@tutti-os/workspace-issue-manager 0.0.12 → 0.0.14
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/dist/{chunk-YGTTLXTS.js → chunk-5A25XEF2.js} +36 -7
- package/dist/chunk-5A25XEF2.js.map +1 -0
- package/dist/{chunk-ENJ7OUQF.js → chunk-ABQR5VIJ.js} +22 -6
- package/dist/chunk-ABQR5VIJ.js.map +1 -0
- package/dist/{chunk-XC4FNAHC.js → chunk-JOEMRSA4.js} +591 -103
- package/dist/chunk-JOEMRSA4.js.map +1 -0
- package/dist/{chunk-4A2ECWB6.js → chunk-MLBXKQLG.js} +33 -2
- package/dist/chunk-MLBXKQLG.js.map +1 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -2
- package/dist/{feature-D1XjdnWx.d.ts → feature-D8dqrbk5.d.ts} +9 -0
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/dist/{issueManagerControllerService.interface-DsqD_RrN.d.ts → issueManagerControllerService.interface-LRf_GbaU.d.ts} +9 -2
- package/dist/services/index.d.ts +4 -3
- package/dist/services/index.js +3 -3
- package/dist/ui/index.d.ts +7 -6
- package/dist/ui/index.js +4 -4
- package/dist/workbench/index.d.ts +8 -7
- package/dist/workbench/index.js +8 -6
- package/dist/workbench/index.js.map +1 -1
- package/package.json +9 -9
- package/dist/chunk-4A2ECWB6.js.map +0 -1
- package/dist/chunk-ENJ7OUQF.js.map +0 -1
- package/dist/chunk-XC4FNAHC.js.map +0 -1
- package/dist/chunk-YGTTLXTS.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
normalizeIssueManagerContent,
|
|
3
3
|
normalizeIssueManagerNodeState
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5A25XEF2.js";
|
|
5
5
|
|
|
6
6
|
// src/services/internal/model.ts
|
|
7
7
|
import { formatTuttiShortDateTime } from "@tutti-os/ui-system/date-format";
|
|
@@ -82,6 +82,18 @@ function parentDirectoryPath(path) {
|
|
|
82
82
|
// src/services/internal/controllerRuntime.ts
|
|
83
83
|
import { proxy } from "valtio/vanilla";
|
|
84
84
|
|
|
85
|
+
// src/internal/issueManagerDiagnostics.ts
|
|
86
|
+
function logIssueManagerDiagnostic(diagnostics, event, details = {}, options = {}) {
|
|
87
|
+
diagnostics?.log(
|
|
88
|
+
event,
|
|
89
|
+
{
|
|
90
|
+
...details,
|
|
91
|
+
...options.includeStack ? { stack: new Error().stack } : {}
|
|
92
|
+
},
|
|
93
|
+
options
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
85
97
|
// src/services/internal/controllerUtils.ts
|
|
86
98
|
var defaultTaskPriority = "medium";
|
|
87
99
|
function resolveIssueManagerSelectedIssueId(currentSelectedIssueId, issues) {
|
|
@@ -331,6 +343,7 @@ function createIssueManagerOpenedParams(source) {
|
|
|
331
343
|
};
|
|
332
344
|
}
|
|
333
345
|
function createIssueManagerControllerRuntime(input) {
|
|
346
|
+
const diagnostics = input.diagnostics ?? null;
|
|
334
347
|
const normalizedNodeState = normalizeIssueManagerNodeState(input.state);
|
|
335
348
|
const listeners = /* @__PURE__ */ new Set();
|
|
336
349
|
let deferredIssueSearch = normalizedNodeState.issueSearchQuery;
|
|
@@ -420,6 +433,23 @@ function createIssueManagerControllerRuntime(input) {
|
|
|
420
433
|
if (next === previous) {
|
|
421
434
|
return;
|
|
422
435
|
}
|
|
436
|
+
if (previous.activeTopicId !== next.activeTopicId || previous.selectedIssueId !== next.selectedIssueId || previous.selectedTaskId !== next.selectedTaskId || previous.taskListCollapsed !== next.taskListCollapsed) {
|
|
437
|
+
logIssueManagerDiagnostic(
|
|
438
|
+
diagnostics,
|
|
439
|
+
"node_state.changed",
|
|
440
|
+
{
|
|
441
|
+
nextActiveTopicId: next.activeTopicId ?? null,
|
|
442
|
+
nextSelectedIssueId: next.selectedIssueId,
|
|
443
|
+
nextSelectedTaskId: next.selectedTaskId,
|
|
444
|
+
nextTaskListCollapsed: next.taskListCollapsed === true,
|
|
445
|
+
previousActiveTopicId: previous.activeTopicId ?? null,
|
|
446
|
+
previousSelectedIssueId: previous.selectedIssueId,
|
|
447
|
+
previousSelectedTaskId: previous.selectedTaskId,
|
|
448
|
+
previousTaskListCollapsed: previous.taskListCollapsed === true
|
|
449
|
+
},
|
|
450
|
+
{ includeStack: true }
|
|
451
|
+
);
|
|
452
|
+
}
|
|
423
453
|
setSnapshot((current) => ({
|
|
424
454
|
...current,
|
|
425
455
|
nodeState: next
|
|
@@ -913,6 +943,7 @@ export {
|
|
|
913
943
|
resolveIssueManagerPriorityLabel,
|
|
914
944
|
uniqueIssueManagerFileReferences,
|
|
915
945
|
parentDirectoryPath,
|
|
946
|
+
logIssueManagerDiagnostic,
|
|
916
947
|
defaultTaskPriority,
|
|
917
948
|
toContextRefInput,
|
|
918
949
|
toIssueManagerWorkspaceFileLinkInput,
|
|
@@ -935,4 +966,4 @@ export {
|
|
|
935
966
|
persistIssueManagerTaskDraftContent,
|
|
936
967
|
createIssueManagerControllerService
|
|
937
968
|
};
|
|
938
|
-
//# sourceMappingURL=chunk-
|
|
969
|
+
//# sourceMappingURL=chunk-MLBXKQLG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/internal/model.ts","../src/services/internal/controllerRuntime.ts","../src/internal/issueManagerDiagnostics.ts","../src/services/internal/controllerUtils.ts","../src/services/internal/controllerState.ts","../src/services/internal/issueManagerControllerService.ts","../src/services/createIssueManagerControllerService.ts"],"sourcesContent":["import { formatTuttiShortDateTime } from \"@tutti-os/ui-system/date-format\";\nimport type {\n IssueManagerFileReference,\n IssueManagerPriority,\n IssueManagerStatus\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\n\nexport type IssueManagerEditorMode = \"read\" | \"create\" | \"edit\";\n\nexport type IssueManagerReferenceTarget =\n | {\n mode: \"attach\";\n parentKind: \"issue\";\n }\n | {\n mode: \"attach\";\n parentKind: \"task\";\n taskId: string;\n }\n | {\n mode: \"insert\";\n parentKind: \"issue\";\n }\n | {\n mode: \"insert\";\n parentKind: \"task\";\n taskId: string;\n };\n\nexport function createIssueManagerDate(\n value: number | null | undefined\n): Date | null {\n if (!value || !Number.isFinite(value)) {\n return null;\n }\n\n const normalized = value < 1_000_000_000_000 ? value * 1000 : value;\n const date = new Date(normalized);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function formatIssueManagerTimestamp(\n value: number | null | undefined\n): string | null {\n const date = createIssueManagerDate(value);\n return date ? formatTuttiShortDateTime(date) : null;\n}\n\nexport function formatIssueManagerDate(\n value: number | null | undefined\n): string {\n const date = createIssueManagerDate(value);\n return date ? formatTuttiShortDateTime(date) : \"\";\n}\n\nexport function resolveIssueManagerStatusLabel(\n copy: IssueManagerI18nRuntime,\n status: IssueManagerStatus | null | undefined\n): string {\n switch (status) {\n case \"not_started\":\n return copy.t(\"status.notStarted\");\n case \"running\":\n return copy.t(\"status.running\");\n case \"in_progress\":\n return copy.t(\"status.inProgress\");\n case \"pending_acceptance\":\n return copy.t(\"status.pendingAcceptance\");\n case \"completed\":\n return copy.t(\"status.completed\");\n case \"failed\":\n return copy.t(\"status.failed\");\n case \"canceled\":\n return copy.t(\"status.canceled\");\n default:\n return copy.t(\"status.unknown\");\n }\n}\n\nexport function resolveIssueManagerPriorityLabel(\n copy: IssueManagerI18nRuntime,\n priority: IssueManagerPriority | null | undefined\n): string {\n switch (priority) {\n case \"high\":\n return copy.t(\"priority.high\");\n case \"low\":\n return copy.t(\"priority.low\");\n default:\n return copy.t(\"priority.medium\");\n }\n}\n\nexport function uniqueIssueManagerFileReferences(\n refs: readonly IssueManagerFileReference[]\n): IssueManagerFileReference[] {\n const unique = new Map<string, IssueManagerFileReference>();\n for (const ref of refs) {\n const normalizedPath = ref.path.trim();\n if (!normalizedPath || unique.has(normalizedPath)) {\n continue;\n }\n unique.set(normalizedPath, {\n displayName: ref.displayName?.trim() || undefined,\n kind: ref.kind === \"folder\" ? \"folder\" : \"file\",\n path: normalizedPath\n });\n }\n return [...unique.values()];\n}\n\nexport function parentDirectoryPath(path: string): string | null {\n const trimmed = path.trim();\n if (!trimmed || trimmed === \"/\") {\n return null;\n }\n\n const normalized =\n trimmed.endsWith(\"/\") && trimmed.length > 1\n ? trimmed.slice(0, -1)\n : trimmed;\n const index = normalized.lastIndexOf(\"/\");\n if (index <= 0) {\n return \"/\";\n }\n return normalized.slice(0, index) || \"/\";\n}\n","import type { SetStateAction } from \"react\";\nimport { proxy } from \"valtio/vanilla\";\nimport type {\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerNodeState,\n IssueManagerOpenSource,\n IssueManagerOpenTrigger,\n IssueManagerTaskDetail,\n IssueManagerTopic\n} from \"../../contracts/index.ts\";\nimport {\n normalizeIssueManagerNodeState,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\nimport {\n logIssueManagerDiagnostic,\n type IssueManagerDiagnostics\n} from \"../../internal/issueManagerDiagnostics.ts\";\nimport { resolveIssueManagerErrorMessage } from \"./controllerUtils.ts\";\nimport {\n applyIssueManagerIssueDetailResultToNodeState,\n applyIssueManagerIssueListResultToNodeState,\n createIssueManagerIssueDraftFromNodeState,\n createIssueManagerTaskDraftFromNodeState,\n syncIssueManagerIssueDraftFromDetail,\n syncIssueManagerTaskDraftFromDetail\n} from \"./controllerState.ts\";\nimport type {\n AsyncCollectionState,\n IssueDraft,\n IssueManagerNotificationState,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\n\nexport interface IssueManagerControllerSnapshot {\n issueDetail: AsyncCollectionState<IssueManagerIssueDetail | null>;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n isRunningTask: boolean;\n nodeState: IssueManagerNodeState;\n notification: IssueManagerNotificationState | null;\n referenceTarget: IssueManagerReferenceTarget | null;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n topics: AsyncCollectionState<IssueManagerTopic[]>;\n}\n\nexport interface CreateIssueManagerControllerRuntimeInput {\n diagnostics?: IssueManagerDiagnostics | null;\n feature: IssueManagerFeature;\n openSource?: IssueManagerOpenSource;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nfunction createIssueManagerOpenedParams(source: IssueManagerOpenSource): {\n source: IssueManagerOpenSource;\n trigger: IssueManagerOpenTrigger;\n} {\n return {\n source,\n trigger:\n source === \"restore\" || source === \"agent_command\"\n ? \"automatic\"\n : \"manual\"\n };\n}\n\nexport interface SyncIssueManagerControllerRuntimeInput {\n deferredIssueSearch: string;\n onStateChange?: (state: IssueManagerNodeState) => void;\n taskListCollapsed: boolean;\n}\n\nexport interface IssueManagerControllerRuntime {\n getSnapshot(): IssueManagerControllerSnapshot;\n refreshAll(): void;\n refreshDetails(): void;\n release(): void;\n reportIssueSearchUsage(query: string): void;\n retain(): void;\n readonly store: IssueManagerControllerSnapshot;\n setIsRunningTask(update: SetStateAction<boolean>): void;\n setIssueDraftInternal(update: SetStateAction<IssueDraft>): void;\n setIssueEditorModeState(update: SetStateAction<IssueManagerEditorMode>): void;\n setReferenceTarget(\n update: SetStateAction<IssueManagerReferenceTarget | null>\n ): void;\n setNotification(\n update: SetStateAction<IssueManagerNotificationState | null>\n ): void;\n setTaskDraftInternal(update: SetStateAction<TaskDraft>): void;\n setTaskEditorModeState(update: SetStateAction<IssueManagerEditorMode>): void;\n subscribe(listener: () => void): () => void;\n syncInput(input: SyncIssueManagerControllerRuntimeInput): void;\n updateNodeState(\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ): void;\n}\n\nexport function createIssueManagerControllerRuntime(\n input: CreateIssueManagerControllerRuntimeInput\n): IssueManagerControllerRuntime {\n const diagnostics = input.diagnostics ?? null;\n const normalizedNodeState = normalizeIssueManagerNodeState(input.state);\n const listeners = new Set<() => void>();\n let deferredIssueSearch = normalizedNodeState.issueSearchQuery;\n let issueDetailSequence = 0;\n let issueListSequence = 0;\n let lastResolvedIssueSearchQuery: string | null = null;\n let hasReportedOpened = false;\n let onStateChange: ((state: IssueManagerNodeState) => void) | undefined;\n let pendingIssueSearchAnalyticsQuery: string | null = null;\n let refCount = 0;\n let retained = false;\n let taskDetailSequence = 0;\n let topicListSequence = 0;\n let unsubscribeIssueUpdates: (() => void) | null = null;\n let snapshot: IssueManagerControllerSnapshot = {\n issueDetail: createAsyncCollectionState<IssueManagerIssueDetail | null>(\n null\n ),\n issueDraft: createIssueManagerIssueDraftFromNodeState(normalizedNodeState),\n issueEditorMode: \"read\",\n issues: createAsyncCollectionState<IssueManagerIssueSummary[]>([], {\n hasResolved: false\n }),\n isRunningTask: false,\n nodeState: normalizedNodeState,\n notification: null,\n referenceTarget: null,\n taskDetail: createAsyncCollectionState<IssueManagerTaskDetail | null>(null),\n taskDraft: createIssueManagerTaskDraftFromNodeState(normalizedNodeState),\n taskEditorMode: \"read\",\n topics: createAsyncCollectionState<IssueManagerTopic[]>([], {\n hasResolved: false\n })\n };\n const store = proxy(snapshot);\n\n const notify = () => {\n for (const listener of listeners) {\n listener();\n }\n };\n\n const setSnapshot = (\n updater:\n | Partial<IssueManagerControllerSnapshot>\n | ((\n current: IssueManagerControllerSnapshot\n ) => IssueManagerControllerSnapshot)\n ) => {\n const next =\n typeof updater === \"function\"\n ? updater(snapshot)\n : {\n ...snapshot,\n ...updater\n };\n if (next === snapshot) {\n return;\n }\n snapshot = next;\n Object.assign(store, next);\n notify();\n };\n\n const syncIssueDraftFromCurrentDetail = () => {\n const nextIssueDraft = syncIssueManagerIssueDraftFromDetail(\n snapshot.issueDraft,\n snapshot.issueDetail.value,\n snapshot.issueEditorMode\n );\n if (nextIssueDraft === snapshot.issueDraft) {\n return;\n }\n setSnapshot((current) => ({\n ...current,\n issueDraft: nextIssueDraft\n }));\n };\n\n const syncTaskDraftFromCurrentDetail = () => {\n const nextTaskDraft = syncIssueManagerTaskDraftFromDetail(\n snapshot.taskDraft,\n snapshot.taskDetail.value,\n snapshot.taskEditorMode\n );\n if (nextTaskDraft === snapshot.taskDraft) {\n return;\n }\n setSnapshot((current) => ({\n ...current,\n taskDraft: nextTaskDraft\n }));\n };\n\n const applyNodeState = (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => {\n const previous = snapshot.nodeState;\n const next =\n typeof updater === \"function\"\n ? updater(previous)\n : ({\n ...previous,\n ...updater\n } satisfies IssueManagerNodeState);\n if (next === previous) {\n return;\n }\n\n if (\n previous.activeTopicId !== next.activeTopicId ||\n previous.selectedIssueId !== next.selectedIssueId ||\n previous.selectedTaskId !== next.selectedTaskId ||\n previous.taskListCollapsed !== next.taskListCollapsed\n ) {\n logIssueManagerDiagnostic(\n diagnostics,\n \"node_state.changed\",\n {\n nextActiveTopicId: next.activeTopicId ?? null,\n nextSelectedIssueId: next.selectedIssueId,\n nextSelectedTaskId: next.selectedTaskId,\n nextTaskListCollapsed: next.taskListCollapsed === true,\n previousActiveTopicId: previous.activeTopicId ?? null,\n previousSelectedIssueId: previous.selectedIssueId,\n previousSelectedTaskId: previous.selectedTaskId,\n previousTaskListCollapsed: previous.taskListCollapsed === true\n },\n { includeStack: true }\n );\n }\n\n setSnapshot((current) => ({\n ...current,\n nodeState: next\n }));\n onStateChange?.(next);\n handleNodeStateTransition(previous, next);\n };\n\n const loadTopics = async () => {\n const sequence = ++topicListSequence;\n setSnapshot((current) => ({\n ...current,\n topics: {\n ...current.topics,\n error: null,\n isLoading: true\n }\n }));\n\n try {\n const result = await input.feature.backend.listTopics({\n workspaceId: input.workspaceId\n });\n if (!retained || sequence !== topicListSequence) {\n return;\n }\n if (result.topics.length === 0) {\n throw new Error(input.feature.i18n.t(\"messages.topicListEmpty\"));\n }\n\n setSnapshot((current) => ({\n ...current,\n topics: {\n error: null,\n hasResolved: true,\n isLoading: false,\n value: result.topics\n }\n }));\n const currentActiveTopicId = snapshot.nodeState.activeTopicId;\n const currentTopicExists = result.topics.some(\n (topic) => topic.topicId === currentActiveTopicId\n );\n const activeTopicId = currentTopicExists\n ? currentActiveTopicId\n : (result.topics[0]?.topicId ?? null);\n applyNodeState({\n activeTopicId\n });\n if (activeTopicId && activeTopicId === currentActiveTopicId) {\n void loadIssues();\n }\n } catch (error) {\n if (!retained || sequence !== topicListSequence) {\n return;\n }\n setSnapshot((current) => ({\n ...current,\n topics: {\n error: resolveIssueManagerErrorMessage(error, input.feature.i18n),\n hasResolved: true,\n isLoading: false,\n value: []\n }\n }));\n }\n };\n\n const trackIssueSearchAnalytics = (\n inputValue: string,\n resultCount: number\n ) => {\n const query = inputValue.trim();\n if (!query) {\n return;\n }\n void Promise.resolve(\n input.feature.analytics?.track({\n name: \"issue_manager.task_searched\",\n params: {\n queryLength: query.length,\n resultCount\n }\n })\n ).catch(() => undefined);\n };\n\n const flushPendingIssueSearchAnalytics = (\n searchQuery: string,\n resultCount: number\n ) => {\n if (pendingIssueSearchAnalyticsQuery !== searchQuery || !searchQuery) {\n return;\n }\n pendingIssueSearchAnalyticsQuery = null;\n trackIssueSearchAnalytics(searchQuery, resultCount);\n };\n\n const loadIssues = async () => {\n const searchQuery = deferredIssueSearch.trim();\n const activeTopicId = snapshot.nodeState.activeTopicId;\n const sequence = ++issueListSequence;\n if (!activeTopicId) {\n lastResolvedIssueSearchQuery = searchQuery;\n setSnapshot((current) => ({\n ...current,\n issues: {\n error: null,\n hasResolved: true,\n isLoading: false,\n value: []\n }\n }));\n flushPendingIssueSearchAnalytics(searchQuery, 0);\n return;\n }\n setSnapshot((current) => ({\n ...current,\n issues: {\n ...current.issues,\n error: null,\n isLoading: true\n }\n }));\n\n try {\n const result = await input.feature.backend.listIssues({\n searchQuery: searchQuery || undefined,\n statusFilter: snapshot.nodeState.issueStatusFilter,\n topicId: activeTopicId,\n workspaceId: input.workspaceId\n });\n if (!retained || sequence !== issueListSequence) {\n return;\n }\n\n lastResolvedIssueSearchQuery = searchQuery;\n setSnapshot((current) => ({\n ...current,\n issues: {\n error: null,\n hasResolved: true,\n isLoading: false,\n statusCounts: result.statusCounts ?? current.issues.statusCounts,\n value: result.issues\n }\n }));\n applyNodeState((current) =>\n applyIssueManagerIssueListResultToNodeState(current, result)\n );\n flushPendingIssueSearchAnalytics(searchQuery, result.issues.length);\n } catch (error) {\n if (!retained || sequence !== issueListSequence) {\n return;\n }\n setSnapshot((current) => ({\n ...current,\n issues: {\n error: resolveIssueManagerErrorMessage(error, input.feature.i18n),\n hasResolved: true,\n isLoading: false,\n statusCounts: current.issues.statusCounts,\n value: []\n }\n }));\n }\n };\n\n const clearIssueDetail = () => {\n setSnapshot((current) => ({\n ...current,\n issueDetail: createAsyncCollectionState<IssueManagerIssueDetail | null>(\n null\n )\n }));\n syncIssueDraftFromCurrentDetail();\n };\n\n const clearTaskDetail = () => {\n setSnapshot((current) => ({\n ...current,\n taskDetail: createAsyncCollectionState<IssueManagerTaskDetail | null>(\n null\n )\n }));\n syncTaskDraftFromCurrentDetail();\n };\n\n const loadIssueDetail = async () => {\n const selectedIssueId = snapshot.nodeState.selectedIssueId;\n issueDetailSequence += 1;\n const sequence = issueDetailSequence;\n if (!selectedIssueId) {\n clearIssueDetail();\n clearTaskDetail();\n return;\n }\n\n setSnapshot((current) => ({\n ...current,\n issueDetail: {\n ...current.issueDetail,\n error: null,\n isLoading: true\n }\n }));\n\n try {\n const result = await input.feature.backend.getIssueDetail({\n issueId: selectedIssueId,\n workspaceId: input.workspaceId\n });\n if (!retained || sequence !== issueDetailSequence) {\n return;\n }\n\n setSnapshot((current) => ({\n ...current,\n issueDetail: {\n error: null,\n isLoading: false,\n value: result\n }\n }));\n syncIssueDraftFromCurrentDetail();\n applyNodeState((current) =>\n applyIssueManagerIssueDetailResultToNodeState(current, result)\n );\n } catch (error) {\n if (!retained || sequence !== issueDetailSequence) {\n return;\n }\n\n setSnapshot((current) => ({\n ...current,\n issueDetail: {\n error: resolveIssueManagerErrorMessage(error, input.feature.i18n),\n isLoading: false,\n value: null\n }\n }));\n syncIssueDraftFromCurrentDetail();\n }\n };\n\n const loadTaskDetail = async () => {\n const selectedIssueId = snapshot.nodeState.selectedIssueId;\n const selectedTaskId = snapshot.nodeState.selectedTaskId;\n taskDetailSequence += 1;\n const sequence = taskDetailSequence;\n if (!selectedIssueId || !selectedTaskId) {\n clearTaskDetail();\n return;\n }\n\n setSnapshot((current) => ({\n ...current,\n taskDetail: {\n ...current.taskDetail,\n error: null,\n isLoading: true\n }\n }));\n\n try {\n const result = await input.feature.backend.getTaskDetail({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId: input.workspaceId\n });\n if (!retained || sequence !== taskDetailSequence) {\n return;\n }\n\n setSnapshot((current) => ({\n ...current,\n taskDetail: {\n error: null,\n isLoading: false,\n value: result\n }\n }));\n syncTaskDraftFromCurrentDetail();\n } catch (error) {\n if (!retained || sequence !== taskDetailSequence) {\n return;\n }\n\n setSnapshot((current) => ({\n ...current,\n taskDetail: {\n error: resolveIssueManagerErrorMessage(error, input.feature.i18n),\n isLoading: false,\n value: null\n }\n }));\n syncTaskDraftFromCurrentDetail();\n }\n };\n\n const handleNodeStateTransition = (\n previous: IssueManagerNodeState,\n next: IssueManagerNodeState\n ) => {\n if (!retained) {\n return;\n }\n\n if (previous.activeTopicId !== next.activeTopicId && next.activeTopicId) {\n applyNodeState({\n selectedIssueId: null,\n selectedTaskId: null\n });\n void loadIssues();\n return;\n }\n\n if (\n previous.issueStatusFilter !== next.issueStatusFilter &&\n deferredIssueSearch === snapshot.nodeState.issueSearchQuery\n ) {\n void loadIssues();\n }\n\n if (previous.selectedIssueId !== next.selectedIssueId) {\n void loadIssueDetail();\n return;\n }\n\n if (previous.selectedTaskId !== next.selectedTaskId) {\n void loadTaskDetail();\n }\n };\n\n const retainIssueUpdates = () => {\n if (unsubscribeIssueUpdates || !input.feature.eventSource) {\n return;\n }\n unsubscribeIssueUpdates = input.feature.eventSource.subscribeToIssueUpdates(\n input.workspaceId,\n (event) => {\n if (event.workspaceId.trim() !== input.workspaceId.trim()) {\n return;\n }\n void loadTopics();\n void loadIssueDetail();\n void loadTaskDetail();\n }\n );\n try {\n const connectResult = input.feature.eventSource.connect?.();\n if (connectResult) {\n void connectResult.catch(() => {});\n }\n } catch {\n // Keep the controller usable when the event stream is temporarily down.\n }\n };\n\n const releaseIssueUpdates = () => {\n unsubscribeIssueUpdates?.();\n unsubscribeIssueUpdates = null;\n };\n\n return {\n getSnapshot() {\n return snapshot;\n },\n refreshAll() {\n if (!retained) {\n return;\n }\n void loadTopics();\n void loadIssueDetail();\n void loadTaskDetail();\n },\n refreshDetails() {\n if (!retained) {\n return;\n }\n void loadIssueDetail();\n void loadTaskDetail();\n },\n release() {\n refCount = Math.max(0, refCount - 1);\n if (refCount > 0) {\n return;\n }\n retained = false;\n issueListSequence += 1;\n issueDetailSequence += 1;\n taskDetailSequence += 1;\n topicListSequence += 1;\n releaseIssueUpdates();\n },\n reportIssueSearchUsage(query) {\n const searchQuery = query.trim();\n if (!searchQuery) {\n return;\n }\n pendingIssueSearchAnalyticsQuery = searchQuery;\n if (\n lastResolvedIssueSearchQuery === searchQuery &&\n !snapshot.issues.isLoading\n ) {\n flushPendingIssueSearchAnalytics(\n searchQuery,\n snapshot.issues.value.length\n );\n }\n },\n retain() {\n refCount += 1;\n if (retained) {\n return;\n }\n retained = true;\n if (!hasReportedOpened) {\n hasReportedOpened = true;\n void Promise.resolve(\n input.feature.analytics?.track({\n name: \"issue_manager.opened\",\n params: createIssueManagerOpenedParams(\n input.openSource ?? \"restore\"\n )\n })\n ).catch(() => undefined);\n }\n retainIssueUpdates();\n void loadTopics();\n void loadIssueDetail();\n void loadTaskDetail();\n },\n setIsRunningTask(update) {\n setSnapshot((current) => ({\n ...current,\n isRunningTask: resolveSetStateAction(update, current.isRunningTask)\n }));\n },\n setIssueDraftInternal(update) {\n setSnapshot((current) => ({\n ...current,\n issueDraft: resolveSetStateAction(update, current.issueDraft)\n }));\n },\n setIssueEditorModeState(update) {\n const nextMode = resolveSetStateAction(update, snapshot.issueEditorMode);\n setSnapshot((current) => ({\n ...current,\n issueEditorMode: nextMode\n }));\n syncIssueDraftFromCurrentDetail();\n },\n setReferenceTarget(update) {\n setSnapshot((current) => ({\n ...current,\n referenceTarget: resolveSetStateAction(update, current.referenceTarget)\n }));\n },\n setNotification(update) {\n setSnapshot((current) => ({\n ...current,\n notification: resolveSetStateAction(update, current.notification)\n }));\n },\n setTaskDraftInternal(update) {\n setSnapshot((current) => ({\n ...current,\n taskDraft: resolveSetStateAction(update, current.taskDraft)\n }));\n },\n setTaskEditorModeState(update) {\n const nextMode = resolveSetStateAction(update, snapshot.taskEditorMode);\n setSnapshot((current) => ({\n ...current,\n taskEditorMode: nextMode\n }));\n syncTaskDraftFromCurrentDetail();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n syncInput(nextInput) {\n onStateChange = nextInput.onStateChange;\n if (deferredIssueSearch !== nextInput.deferredIssueSearch) {\n deferredIssueSearch = nextInput.deferredIssueSearch;\n if (retained) {\n void loadIssues();\n }\n }\n\n if (\n (snapshot.nodeState.taskListCollapsed === true) !==\n nextInput.taskListCollapsed\n ) {\n applyNodeState((current) => ({\n ...current,\n taskListCollapsed: nextInput.taskListCollapsed\n }));\n }\n },\n updateNodeState(updater) {\n applyNodeState(updater);\n },\n store\n };\n}\n\nfunction createAsyncCollectionState<TValue>(\n value: TValue,\n options?: Pick<AsyncCollectionState<TValue>, \"hasResolved\">\n): AsyncCollectionState<TValue> {\n return {\n error: null,\n ...options,\n isLoading: false,\n value\n };\n}\n\nfunction resolveSetStateAction<TValue>(\n update: SetStateAction<TValue>,\n current: TValue\n): TValue {\n return typeof update === \"function\"\n ? (update as (value: TValue) => TValue)(current)\n : update;\n}\n","export interface IssueManagerDiagnostics {\n log(\n event: string,\n details: Record<string, unknown>,\n options?: { includeStack?: boolean }\n ): void;\n}\n\nexport function logIssueManagerDiagnostic(\n diagnostics: IssueManagerDiagnostics | null | undefined,\n event: string,\n details: Record<string, unknown> = {},\n options: { includeStack?: boolean } = {}\n): void {\n diagnostics?.log(\n event,\n {\n ...details,\n ...(options.includeStack ? { stack: new Error().stack } : {})\n },\n options\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerFileReference,\n IssueManagerPriority,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerWorkspaceFileLinkInput } from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\n\nexport const defaultTaskPriority: IssueManagerPriority = \"medium\";\n\nexport function resolveIssueManagerSelectedIssueId(\n currentSelectedIssueId: string | null | undefined,\n issues: readonly IssueManagerIssueSummary[]\n): string | null {\n if (\n currentSelectedIssueId &&\n issues.some((issue) => issue.issueId === currentSelectedIssueId)\n ) {\n return currentSelectedIssueId;\n }\n return issues[0]?.issueId ?? null;\n}\n\nexport function resolveIssueManagerSelectedTaskId(\n currentSelectedTaskId: string | null | undefined,\n tasks: readonly IssueManagerTaskSummary[]\n): string | null {\n if (\n currentSelectedTaskId &&\n tasks.some((task) => task.taskId === currentSelectedTaskId)\n ) {\n return currentSelectedTaskId;\n }\n return null;\n}\n\nexport function toContextRefInput(ref: IssueManagerFileReference) {\n return {\n displayName: ref.displayName,\n path: ref.path,\n refType: ref.kind === \"folder\" ? \"folder\" : \"file\"\n };\n}\n\nexport function toIssueManagerWorkspaceFileLinkInput(\n ref: IssueManagerFileReference\n): IssueManagerWorkspaceFileLinkInput {\n return {\n kind: ref.kind === \"folder\" ? \"folder\" : \"file\",\n name: ref.displayName,\n path: ref.path\n };\n}\n\nexport function confirmIssueManagerMessage(message: string): boolean {\n try {\n return globalThis.confirm?.(message) ?? true;\n } catch {\n return true;\n }\n}\n\nexport function resolveIssueManagerErrorMessage(\n error: unknown,\n copy?: IssueManagerI18nRuntime,\n fallbackKey?: string\n): string {\n const raw =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : String(error);\n\n if (!copy) {\n return raw;\n }\n\n if (raw === \"issue_manager.upload_type_conflict\") {\n return copy.t(\"messages.uploadTypeConflict\");\n }\n if (raw === \"issue_manager.clipboard_unavailable\") {\n return copy.t(\"messages.clipboardUnavailable\");\n }\n if (raw === \"issue_manager.workspace_path_unavailable\") {\n return copy.t(\"messages.workspacePathUnavailable\");\n }\n if (raw === \"issue_manager.run_status_missing\") {\n return copy.t(\"messages.runStatusMissing\");\n }\n if (raw === \"issue_manager.run_timed_out\") {\n return copy.t(\"messages.runTimedOut\");\n }\n if (raw.startsWith(\"issue_manager.run_exit_code:\")) {\n return copy.t(\"messages.runExitCode\", {\n code: raw.slice(\"issue_manager.run_exit_code:\".length)\n });\n }\n\n return fallbackKey ? copy.t(fallbackKey) : raw;\n}\n\nexport function resolveIssueManagerTopicDeleteErrorMessage(\n error: unknown,\n copy: IssueManagerI18nRuntime\n): string {\n const protocolError = extractProtocolErrorShape(error);\n if (!protocolError) {\n return resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.topicDeleteFailed\"\n );\n }\n\n if (protocolError.reason === \"workspace_issue_topic_not_empty\") {\n return copy.t(\"messages.topicDeleteNotEmpty\");\n }\n\n if (protocolError.reason === \"workspace_issue_topic_not_found\") {\n return copy.t(\"messages.topicDeleteNotFound\");\n }\n\n if (\n protocolError.code === \"invalid_request\" &&\n protocolError.reason === \"malformed_request\"\n ) {\n return copy.t(\"messages.topicDeleteDefaultForbidden\");\n }\n\n return copy.t(\"messages.topicDeleteFailed\");\n}\n\ninterface ProtocolErrorShape {\n code: string;\n reason?: string;\n}\n\nfunction extractProtocolErrorShape(error: unknown): ProtocolErrorShape | null {\n if (isProtocolErrorShape(error)) {\n return error;\n }\n\n if (typeof error !== \"object\" || error === null || !(\"error\" in error)) {\n return null;\n }\n\n const nestedError = (error as { error?: unknown }).error;\n return isProtocolErrorShape(nestedError) ? nestedError : null;\n}\n\nfunction isProtocolErrorShape(value: unknown): value is ProtocolErrorShape {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"code\" in value &&\n typeof (value as { code?: unknown }).code === \"string\" &&\n (!(\"reason\" in value) ||\n typeof (value as { reason?: unknown }).reason === \"string\" ||\n typeof (value as { reason?: unknown }).reason === \"undefined\")\n );\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerListIssuesResult,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport { normalizeIssueManagerContent } from \"../../core/index.ts\";\nimport type { IssueManagerEditorMode } from \"./model.ts\";\nimport type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\nimport {\n defaultTaskPriority,\n resolveIssueManagerSelectedIssueId,\n resolveIssueManagerSelectedTaskId\n} from \"./controllerUtils.ts\";\n\nexport function createIssueManagerIssueDraftFromNodeState(\n state:\n | Pick<IssueManagerNodeState, \"issueDraftContent\" | \"issueDraftTitle\">\n | null\n | undefined\n): IssueDraft {\n return {\n content: state?.issueDraftContent ?? \"\",\n title: state?.issueDraftTitle ?? \"\"\n };\n}\n\nexport function createIssueManagerTaskDraftFromNodeState(\n state:\n | Pick<IssueManagerNodeState, \"taskDraftContent\" | \"taskDraftTitle\">\n | null\n | undefined,\n priority: IssueManagerPriority = defaultTaskPriority\n): TaskDraft {\n return {\n content: state?.taskDraftContent ?? \"\",\n priority,\n title: state?.taskDraftTitle ?? \"\"\n };\n}\n\nexport function applyIssueManagerIssueSelection(\n current: IssueManagerNodeState,\n issueId: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedIssueId: issueId,\n selectedTaskId: null\n };\n}\n\nexport function applyIssueManagerTaskSelection(\n current: IssueManagerNodeState,\n taskId: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: taskId\n };\n}\n\nexport function applyIssueManagerIssueDeleted(\n current: IssueManagerNodeState\n): IssueManagerNodeState {\n return {\n ...current,\n selectedIssueId: null,\n selectedTaskId: null\n };\n}\n\nexport function applyIssueManagerTaskDeleted(\n current: IssueManagerNodeState\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: null\n };\n}\n\nexport function applyIssueManagerSelectedAgentProvider(\n current: IssueManagerNodeState,\n provider: string\n): IssueManagerNodeState {\n return {\n ...current,\n selectedAgentProvider: provider\n };\n}\n\nexport function applyIssueManagerSelectedExecutionDirectory(\n current: IssueManagerNodeState,\n executionDirectory: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedExecutionDirectory: executionDirectory?.trim() || null\n };\n}\n\nexport function applyIssueManagerIssueListResultToNodeState(\n current: IssueManagerNodeState,\n result: Pick<IssueManagerListIssuesResult, \"issues\" | \"nextPageToken\">\n): IssueManagerNodeState {\n return {\n ...current,\n issueListNextPageToken: result.nextPageToken ?? null,\n selectedIssueId: resolveIssueManagerSelectedIssueId(\n current.selectedIssueId,\n result.issues\n )\n };\n}\n\nexport function applyIssueManagerIssueDetailResultToNodeState(\n current: IssueManagerNodeState,\n detail: Pick<IssueManagerIssueDetail, \"tasks\">\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: resolveIssueManagerSelectedTaskId(\n current.selectedTaskId,\n detail.tasks\n )\n };\n}\n\nexport function syncIssueManagerIssueDraftFromDetail(\n current: IssueDraft,\n detail: IssueManagerIssueDetail | null,\n editorMode: IssueManagerEditorMode\n): IssueDraft {\n if (editorMode !== \"read\") {\n return current;\n }\n return {\n content: normalizeIssueManagerContent(detail?.issue.content ?? \"\"),\n title: detail?.issue.title ?? \"\"\n };\n}\n\nexport function syncIssueManagerTaskDraftFromDetail(\n current: TaskDraft,\n detail: IssueManagerTaskDetail | null,\n editorMode: IssueManagerEditorMode\n): TaskDraft {\n if (editorMode !== \"read\") {\n return current;\n }\n return {\n content: normalizeIssueManagerContent(detail?.task.content ?? \"\"),\n priority: detail?.task.priority ?? defaultTaskPriority,\n title: detail?.task.title ?? \"\"\n };\n}\n\nexport function applyIssueManagerIssueEditorModeToNodeState(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode\n): IssueManagerNodeState {\n if (editorMode === \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftContent: null,\n issueDraftTitle: null\n };\n}\n\nexport function applyIssueManagerTaskEditorModeToNodeState(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode\n): IssueManagerNodeState {\n if (editorMode === \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftContent: null,\n taskDraftTitle: null\n };\n}\n\nexport function applyIssueManagerIssueSaved(\n current: IssueManagerNodeState,\n issueId: string\n): IssueManagerNodeState {\n return {\n ...current,\n issueDraftContent: null,\n issueDraftTitle: null,\n selectedIssueId: issueId\n };\n}\n\nexport function applyIssueManagerTaskSaved(\n current: IssueManagerNodeState,\n taskId: string\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: taskId,\n taskDraftContent: null,\n taskDraftTitle: null\n };\n}\n\nexport function persistIssueManagerIssueDraftContent(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n content: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftContent: content\n };\n}\n\nexport function persistIssueManagerIssueDraftTitle(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n title: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftTitle: title\n };\n}\n\nexport function persistIssueManagerTaskDraftContent(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n content: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftContent: content\n };\n}\n\nexport function persistIssueManagerTaskDraftTitle(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n title: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftTitle: title\n };\n}\n","import type {\n CreateIssueManagerControllerSessionInput,\n IssueManagerControllerService,\n IssueManagerControllerSession\n} from \"../issueManagerControllerService.interface.ts\";\nimport { createIssueManagerControllerRuntime } from \"./controllerRuntime.ts\";\n\nexport class DefaultIssueManagerControllerService implements IssueManagerControllerService {\n createSession(\n input: CreateIssueManagerControllerSessionInput\n ): IssueManagerControllerSession {\n return createIssueManagerControllerRuntime(input);\n }\n}\n","import { DefaultIssueManagerControllerService } from \"./internal/issueManagerControllerService.ts\";\nimport type { IssueManagerControllerService } from \"./issueManagerControllerService.interface.ts\";\n\nexport function createIssueManagerControllerService(): IssueManagerControllerService {\n return new DefaultIssueManagerControllerService();\n}\n"],"mappings":"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","names":[]}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { C as CreateIssueManagerFeatureInput, I as IssueManagerFeature, a as IssueManagerNotificationSink, c as createIssueManagerFeature, d as defaultIssueManagerNodeState, n as normalizeIssueManagerNodeState } from '../feature-
|
|
1
|
+
export { C as CreateIssueManagerFeatureInput, I as IssueManagerFeature, a as IssueManagerNotificationSink, c as createIssueManagerFeature, d as defaultIssueManagerNodeState, n as normalizeIssueManagerNodeState } from '../feature-D8dqrbk5.js';
|
|
2
2
|
import { RichTextLinkInput, RichTextLinkRef, appendRichTextLinksToContent, createRichTextMentionHref, createRichTextMentionMarkdown, createRichTextLinkMarkdown, extractRichTextMentionsFromContent, extractPlainTextFromContent, extractPlainTextWithoutFilesFromContent, extractRichTextLinksFromContent, normalizeRichTextContent, normalizeRichTextLinkHref, parseRichTextMentionHref, removeRichTextMentionFromContent, removeRichTextLinkFromContent } from '@tutti-os/ui-rich-text/core';
|
|
3
3
|
import { RichTextMentionAttrs } from '@tutti-os/ui-rich-text/types';
|
|
4
4
|
import { IssueManagerIssueSummary, IssueManagerTaskSummary, IssueManagerContextRef } from '../contracts/index.js';
|
package/dist/core/index.js
CHANGED
|
@@ -29,8 +29,8 @@ import {
|
|
|
29
29
|
resolveIssueManagerExpandedFrame,
|
|
30
30
|
resolveIssueManagerWorkspaceRuntimePath,
|
|
31
31
|
shouldAutoCollapseIssueManagerSidebar
|
|
32
|
-
} from "../chunk-
|
|
33
|
-
import "../chunk-
|
|
32
|
+
} from "../chunk-5A25XEF2.js";
|
|
33
|
+
import "../chunk-ABQR5VIJ.js";
|
|
34
34
|
export {
|
|
35
35
|
appendIssueManagerWorkspaceFileLinksToContent,
|
|
36
36
|
buildIssueManagerRunPrompt,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { I18nRuntime } from '@tutti-os/ui-i18n-runtime';
|
|
2
|
+
import { RichTextMentionAttrs } from '@tutti-os/ui-rich-text/types';
|
|
2
3
|
import { WorkspaceUserProjectI18nRuntime } from '@tutti-os/workspace-user-project/i18n';
|
|
3
4
|
import { IssueManagerI18nRuntime } from './i18n/index.js';
|
|
4
5
|
import { IssueManagerAgentBreakdownLauncher, IssueManagerAnalyticsAdapter, IssueManagerAgentProviderOptionsAdapter, IssueManagerAgentSessionOpener, IssueManagerAgentRunner, IssueManagerBackend, IssueManagerEventSource, IssueManagerExecutionDirectoryPicker, IssueManagerFileAdapter, IssueManagerIdentityAdapter, IssueManagerShareAdapter, IssueManagerNodeState } from './contracts/index.js';
|
|
@@ -6,6 +7,12 @@ import { IssueManagerAgentBreakdownLauncher, IssueManagerAnalyticsAdapter, Issue
|
|
|
6
7
|
interface IssueManagerNotificationSink {
|
|
7
8
|
tips(title: string): void;
|
|
8
9
|
}
|
|
10
|
+
interface IssueManagerMentionActionHandler {
|
|
11
|
+
openMention(input: {
|
|
12
|
+
mention: RichTextMentionAttrs;
|
|
13
|
+
workspaceId: string;
|
|
14
|
+
}): Promise<void> | void;
|
|
15
|
+
}
|
|
9
16
|
interface IssueManagerFeatureUIConfig {
|
|
10
17
|
showInviteCollaborator: boolean;
|
|
11
18
|
}
|
|
@@ -21,6 +28,7 @@ interface IssueManagerFeature {
|
|
|
21
28
|
fileAdapter?: IssueManagerFileAdapter;
|
|
22
29
|
i18n: IssueManagerI18nRuntime;
|
|
23
30
|
identityAdapter: IssueManagerIdentityAdapter;
|
|
31
|
+
mentionActionHandler?: IssueManagerMentionActionHandler;
|
|
24
32
|
notifications?: IssueManagerNotificationSink;
|
|
25
33
|
shareAdapter?: IssueManagerShareAdapter;
|
|
26
34
|
ui: IssueManagerFeatureUIConfig;
|
|
@@ -38,6 +46,7 @@ interface CreateIssueManagerFeatureInput {
|
|
|
38
46
|
fileAdapter?: IssueManagerFileAdapter;
|
|
39
47
|
i18n?: I18nRuntime<string>;
|
|
40
48
|
identityAdapter: IssueManagerIdentityAdapter;
|
|
49
|
+
mentionActionHandler?: IssueManagerMentionActionHandler;
|
|
41
50
|
notifications?: IssueManagerNotificationSink;
|
|
42
51
|
shareAdapter?: IssueManagerShareAdapter;
|
|
43
52
|
ui?: Partial<IssueManagerFeatureUIConfig>;
|
package/dist/i18n/index.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { C as CreateIssueManagerFeatureInput, I as IssueManagerFeature, a as IssueManagerNotificationSink, c as createIssueManagerFeature, d as defaultIssueManagerNodeState, n as normalizeIssueManagerNodeState } from './feature-
|
|
1
|
+
export { C as CreateIssueManagerFeatureInput, I as IssueManagerFeature, a as IssueManagerNotificationSink, c as createIssueManagerFeature, d as defaultIssueManagerNodeState, n as normalizeIssueManagerNodeState } from './feature-D8dqrbk5.js';
|
|
2
2
|
export { BuildWorkspaceIssueMentionHrefInput, IssueManagerMentionAttrs, IssueManagerMentionRef, IssueManagerWorkspaceFileLinkInput, IssueManagerWorkspaceFileLinkRef, ParsedWorkspaceIssueMention, WorkspaceIssueMentionMode, appendIssueManagerWorkspaceFileLinksToContent, buildIssueManagerRunPrompt, buildIssueManagerTaskBreakdownPrompt, buildWorkspaceIssueMentionHref, clampIssueManagerSidebarWidth, createIssueManagerMentionHref, createIssueManagerMentionMarkdown, createIssueManagerWorkspaceFileLinkMarkdown, extractIssueManagerMentionsFromContent, extractIssueManagerPlainTextFromContent, extractIssueManagerPlainTextWithoutFilesFromContent, extractIssueManagerWorkspaceFileLinksFromContent, issueManagerDefaultNodeFrameWidth, issueManagerExpandedFrameMinWidth, issueManagerMainMinWidth, issueManagerSidebarDefaultWidth, issueManagerSidebarMaxWidth, issueManagerSidebarMinWidth, normalizeIssueManagerContent, normalizeIssueManagerWorkspaceFileLinkHref, parseIssueManagerMentionHref, parseWorkspaceIssueMentionHref, removeIssueManagerMentionFromContent, removeIssueManagerWorkspaceFileLinkFromContent, resolveIssueManagerExpandedFrame, resolveIssueManagerWorkspaceRuntimePath, shouldAutoCollapseIssueManagerSidebar } from './core/index.js';
|
|
3
3
|
export { IssueManagerI18nKey, IssueManagerI18nRuntime, createIssueManagerI18nRuntime, issueManagerI18nModule, issueManagerI18nNamespace, issueManagerI18nResources } from './i18n/index.js';
|
|
4
|
-
export { A as AsyncCollectionState, C as CreateIssueManagerControllerRuntimeInput, C as CreateIssueManagerControllerSessionInput, I as IssueDraft, a as IssueManagerControllerRuntime, b as IssueManagerControllerService, a as IssueManagerControllerSession, S as IssueManagerControllerSessionSyncInput, c as IssueManagerControllerSnapshot, d as IssueManagerDetailCollections,
|
|
4
|
+
export { A as AsyncCollectionState, C as CreateIssueManagerControllerRuntimeInput, C as CreateIssueManagerControllerSessionInput, I as IssueDraft, a as IssueManagerControllerRuntime, b as IssueManagerControllerService, a as IssueManagerControllerSession, S as IssueManagerControllerSessionSyncInput, c as IssueManagerControllerSnapshot, d as IssueManagerDetailCollections, f as IssueManagerEditorMode, g as IssueManagerNotificationState, h as IssueManagerNotificationTone, i as IssueManagerReferenceTarget, S as SyncIssueManagerControllerRuntimeInput, T as TaskDraft, j as createIssueManagerDate, k as formatIssueManagerDate, l as formatIssueManagerTimestamp, p as parentDirectoryPath, r as resolveIssueManagerPriorityLabel, m as resolveIssueManagerStatusLabel, u as uniqueIssueManagerFileReferences } from './issueManagerControllerService.interface-LRf_GbaU.js';
|
|
5
5
|
export { createIssueManagerControllerService } from './services/index.js';
|
|
6
6
|
import '@tutti-os/ui-i18n-runtime';
|
|
7
|
+
import '@tutti-os/ui-rich-text/types';
|
|
7
8
|
import '@tutti-os/workspace-user-project/i18n';
|
|
8
9
|
import './contracts/index.js';
|
|
9
10
|
import '@tutti-os/workspace-file-reference/contracts';
|
|
10
11
|
import '@tutti-os/workspace-user-project/contracts';
|
|
11
12
|
import '@tutti-os/ui-rich-text/core';
|
|
12
|
-
import '@tutti-os/ui-rich-text/types';
|
|
13
13
|
import 'react';
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
resolveIssueManagerPriorityLabel,
|
|
10
10
|
resolveIssueManagerStatusLabel,
|
|
11
11
|
uniqueIssueManagerFileReferences
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-MLBXKQLG.js";
|
|
13
13
|
import {
|
|
14
14
|
appendIssueManagerWorkspaceFileLinksToContent,
|
|
15
15
|
buildIssueManagerRunPrompt,
|
|
@@ -41,13 +41,13 @@ import {
|
|
|
41
41
|
resolveIssueManagerExpandedFrame,
|
|
42
42
|
resolveIssueManagerWorkspaceRuntimePath,
|
|
43
43
|
shouldAutoCollapseIssueManagerSidebar
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-5A25XEF2.js";
|
|
45
45
|
import {
|
|
46
46
|
createIssueManagerI18nRuntime,
|
|
47
47
|
issueManagerI18nModule,
|
|
48
48
|
issueManagerI18nNamespace,
|
|
49
49
|
issueManagerI18nResources
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-ABQR5VIJ.js";
|
|
51
51
|
export {
|
|
52
52
|
appendIssueManagerWorkspaceFileLinksToContent,
|
|
53
53
|
buildIssueManagerRunPrompt,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SetStateAction } from 'react';
|
|
2
2
|
import { IssueManagerPriority, IssueManagerStatus, IssueManagerFileReference, IssueManagerStatusCounts, IssueManagerIssueDetail, IssueManagerTaskDetail, IssueManagerOpenSource, IssueManagerNodeState, IssueManagerIssueSummary, IssueManagerTopic } from './contracts/index.js';
|
|
3
|
-
import { I as IssueManagerFeature } from './feature-
|
|
3
|
+
import { I as IssueManagerFeature } from './feature-D8dqrbk5.js';
|
|
4
4
|
import { IssueManagerI18nRuntime } from './i18n/index.js';
|
|
5
5
|
|
|
6
6
|
type IssueManagerEditorMode = "read" | "create" | "edit";
|
|
@@ -27,6 +27,12 @@ declare function resolveIssueManagerPriorityLabel(copy: IssueManagerI18nRuntime,
|
|
|
27
27
|
declare function uniqueIssueManagerFileReferences(refs: readonly IssueManagerFileReference[]): IssueManagerFileReference[];
|
|
28
28
|
declare function parentDirectoryPath(path: string): string | null;
|
|
29
29
|
|
|
30
|
+
interface IssueManagerDiagnostics {
|
|
31
|
+
log(event: string, details: Record<string, unknown>, options?: {
|
|
32
|
+
includeStack?: boolean;
|
|
33
|
+
}): void;
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
interface IssueDraft {
|
|
31
37
|
content: string;
|
|
32
38
|
title: string;
|
|
@@ -69,6 +75,7 @@ interface IssueManagerControllerSnapshot {
|
|
|
69
75
|
topics: AsyncCollectionState<IssueManagerTopic[]>;
|
|
70
76
|
}
|
|
71
77
|
interface CreateIssueManagerControllerRuntimeInput {
|
|
78
|
+
diagnostics?: IssueManagerDiagnostics | null;
|
|
72
79
|
feature: IssueManagerFeature;
|
|
73
80
|
openSource?: IssueManagerOpenSource;
|
|
74
81
|
state?: Partial<IssueManagerNodeState> | null;
|
|
@@ -103,4 +110,4 @@ interface IssueManagerControllerService {
|
|
|
103
110
|
createSession(input: CreateIssueManagerControllerRuntimeInput): IssueManagerControllerRuntime;
|
|
104
111
|
}
|
|
105
112
|
|
|
106
|
-
export { type AsyncCollectionState as A, type CreateIssueManagerControllerRuntimeInput as C, type IssueDraft as I, type SyncIssueManagerControllerRuntimeInput as S, type TaskDraft as T, type IssueManagerControllerRuntime as a, type IssueManagerControllerService as b, type IssueManagerControllerSnapshot as c, type IssueManagerDetailCollections as d, type
|
|
113
|
+
export { type AsyncCollectionState as A, type CreateIssueManagerControllerRuntimeInput as C, type IssueDraft as I, type SyncIssueManagerControllerRuntimeInput as S, type TaskDraft as T, type IssueManagerControllerRuntime as a, type IssueManagerControllerService as b, type IssueManagerControllerSnapshot as c, type IssueManagerDetailCollections as d, type IssueManagerDiagnostics as e, type IssueManagerEditorMode as f, type IssueManagerNotificationState as g, type IssueManagerNotificationTone as h, type IssueManagerReferenceTarget as i, createIssueManagerDate as j, formatIssueManagerDate as k, formatIssueManagerTimestamp as l, resolveIssueManagerStatusLabel as m, parentDirectoryPath as p, resolveIssueManagerPriorityLabel as r, uniqueIssueManagerFileReferences as u };
|
package/dist/services/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { b as IssueManagerControllerService } from '../issueManagerControllerService.interface-
|
|
2
|
-
export { A as AsyncCollectionState, C as CreateIssueManagerControllerRuntimeInput, C as CreateIssueManagerControllerSessionInput, I as IssueDraft, a as IssueManagerControllerRuntime, a as IssueManagerControllerSession, S as IssueManagerControllerSessionSyncInput, c as IssueManagerControllerSnapshot, d as IssueManagerDetailCollections,
|
|
1
|
+
import { b as IssueManagerControllerService } from '../issueManagerControllerService.interface-LRf_GbaU.js';
|
|
2
|
+
export { A as AsyncCollectionState, C as CreateIssueManagerControllerRuntimeInput, C as CreateIssueManagerControllerSessionInput, I as IssueDraft, a as IssueManagerControllerRuntime, a as IssueManagerControllerSession, S as IssueManagerControllerSessionSyncInput, c as IssueManagerControllerSnapshot, d as IssueManagerDetailCollections, f as IssueManagerEditorMode, g as IssueManagerNotificationState, h as IssueManagerNotificationTone, i as IssueManagerReferenceTarget, S as SyncIssueManagerControllerRuntimeInput, T as TaskDraft, j as createIssueManagerDate, k as formatIssueManagerDate, l as formatIssueManagerTimestamp, p as parentDirectoryPath, r as resolveIssueManagerPriorityLabel, m as resolveIssueManagerStatusLabel, u as uniqueIssueManagerFileReferences } from '../issueManagerControllerService.interface-LRf_GbaU.js';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '../contracts/index.js';
|
|
5
5
|
import '@tutti-os/workspace-file-reference/contracts';
|
|
6
6
|
import '@tutti-os/workspace-user-project/contracts';
|
|
7
|
-
import '../feature-
|
|
7
|
+
import '../feature-D8dqrbk5.js';
|
|
8
8
|
import '@tutti-os/ui-i18n-runtime';
|
|
9
|
+
import '@tutti-os/ui-rich-text/types';
|
|
9
10
|
import '@tutti-os/workspace-user-project/i18n';
|
|
10
11
|
import '../i18n/index.js';
|
|
11
12
|
|
package/dist/services/index.js
CHANGED
|
@@ -8,9 +8,9 @@ import {
|
|
|
8
8
|
resolveIssueManagerPriorityLabel,
|
|
9
9
|
resolveIssueManagerStatusLabel,
|
|
10
10
|
uniqueIssueManagerFileReferences
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
11
|
+
} from "../chunk-MLBXKQLG.js";
|
|
12
|
+
import "../chunk-5A25XEF2.js";
|
|
13
|
+
import "../chunk-ABQR5VIJ.js";
|
|
14
14
|
export {
|
|
15
15
|
createIssueManagerControllerService,
|
|
16
16
|
createIssueManagerDate,
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -3,9 +3,9 @@ import { IssueManagerI18nRuntime } from '../i18n/index.js';
|
|
|
3
3
|
import { IssueManagerOpenSource, IssueManagerNodeState } from '../contracts/index.js';
|
|
4
4
|
import { a as IssueManagerLatestRunStatusRenderer } from '../latestRunStatusRenderer-B_9yU0CM.js';
|
|
5
5
|
export { I as IssueManagerLatestRunStatusRenderInput } from '../latestRunStatusRenderer-B_9yU0CM.js';
|
|
6
|
-
import {
|
|
7
|
-
import { I as IssueManagerFeature } from '../feature-
|
|
8
|
-
import { b as IssueManagerControllerService } from '../issueManagerControllerService.interface-
|
|
6
|
+
import { RichTextTriggerProvider } from '@tutti-os/ui-rich-text/types';
|
|
7
|
+
import { I as IssueManagerFeature } from '../feature-D8dqrbk5.js';
|
|
8
|
+
import { e as IssueManagerDiagnostics, b as IssueManagerControllerService } from '../issueManagerControllerService.interface-LRf_GbaU.js';
|
|
9
9
|
import '@tutti-os/ui-i18n-runtime';
|
|
10
10
|
import '@tutti-os/workspace-file-reference/contracts';
|
|
11
11
|
import '@tutti-os/workspace-user-project/contracts';
|
|
@@ -14,15 +14,16 @@ import '@tutti-os/workspace-user-project/i18n';
|
|
|
14
14
|
type IssueManagerRichTextSurface = "issue" | "task";
|
|
15
15
|
|
|
16
16
|
interface UseIssueManagerNodeViewInput {
|
|
17
|
+
diagnostics?: IssueManagerDiagnostics | null;
|
|
17
18
|
emptyIllustration?: ReactNode;
|
|
18
19
|
feature: IssueManagerFeature;
|
|
19
20
|
nodeId: string;
|
|
20
21
|
openSource?: IssueManagerOpenSource;
|
|
21
22
|
onStateChange?: (state: IssueManagerNodeState) => void;
|
|
22
|
-
|
|
23
|
+
resolveRichTextTriggerProviders?: (input: {
|
|
23
24
|
surface: IssueManagerRichTextSurface;
|
|
24
25
|
workspaceId: string;
|
|
25
|
-
}) => readonly
|
|
26
|
+
}) => readonly RichTextTriggerProvider[];
|
|
26
27
|
service?: IssueManagerControllerService;
|
|
27
28
|
state?: Partial<IssueManagerNodeState> | null;
|
|
28
29
|
workspaceId: string;
|
|
@@ -42,7 +43,7 @@ type IssueManagerNodeProps = UseIssueManagerNodeViewInput & {
|
|
|
42
43
|
openSource?: IssueManagerOpenSource;
|
|
43
44
|
renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;
|
|
44
45
|
};
|
|
45
|
-
declare function IssueManagerNode({ emptyIllustration, feature, nodeId, openSource, openRequest, onStateChange, renderLatestRunStatus,
|
|
46
|
+
declare function IssueManagerNode({ diagnostics, emptyIllustration, feature, nodeId, openSource, openRequest, onStateChange, renderLatestRunStatus, resolveRichTextTriggerProviders, service, state, workspaceId }: IssueManagerNodeProps): JSX.Element;
|
|
46
47
|
interface IssueManagerNodeHeaderProps extends HTMLAttributes<HTMLElement> {
|
|
47
48
|
activeTopicId?: string | null;
|
|
48
49
|
copy: IssueManagerI18nRuntime;
|
package/dist/ui/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IssueManagerNode,
|
|
3
3
|
IssueManagerNodeHeader
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-JOEMRSA4.js";
|
|
5
|
+
import "../chunk-MLBXKQLG.js";
|
|
6
|
+
import "../chunk-5A25XEF2.js";
|
|
7
|
+
import "../chunk-ABQR5VIJ.js";
|
|
8
8
|
export {
|
|
9
9
|
IssueManagerNode,
|
|
10
10
|
IssueManagerNodeHeader
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { RichTextTriggerProvider } from '@tutti-os/ui-rich-text/types';
|
|
3
3
|
import { WorkbenchHostActivation, WorkbenchHostExternalStateSource, WorkbenchFrame, WorkbenchHostDockEntry, WorkbenchContribution, WorkbenchHostLaunchRequest, WorkbenchHostLaunchResult, WorkbenchHostNodeDefinition } from '@tutti-os/workbench-surface';
|
|
4
4
|
import { IssueManagerNodeState } from '../contracts/index.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { e as IssueManagerDiagnostics, b as IssueManagerControllerService } from '../issueManagerControllerService.interface-LRf_GbaU.js';
|
|
6
|
+
import { I as IssueManagerFeature } from '../feature-D8dqrbk5.js';
|
|
7
7
|
import { a as IssueManagerLatestRunStatusRenderer } from '../latestRunStatusRenderer-B_9yU0CM.js';
|
|
8
8
|
export { defaultIssueManagerNodeFrame, defaultIssueManagerWorkbenchTypeId } from './constants.js';
|
|
9
9
|
import '@tutti-os/workspace-file-reference/contracts';
|
|
10
10
|
import '@tutti-os/workspace-user-project/contracts';
|
|
11
|
+
import '../i18n/index.js';
|
|
11
12
|
import '@tutti-os/ui-i18n-runtime';
|
|
12
13
|
import '@tutti-os/workspace-user-project/i18n';
|
|
13
|
-
import '../i18n/index.js';
|
|
14
14
|
|
|
15
15
|
declare const issueManagerOpenActivationType = "open-workspace-issue";
|
|
16
16
|
interface IssueManagerOpenActivationPayload {
|
|
@@ -27,6 +27,7 @@ interface IssueManagerExternalWorkspaceState {
|
|
|
27
27
|
workspaceId?: string | null;
|
|
28
28
|
}
|
|
29
29
|
interface CreateIssueManagerWorkbenchNodeDefinitionInput {
|
|
30
|
+
diagnostics?: IssueManagerDiagnostics | null;
|
|
30
31
|
emptyIllustration?: ReactNode;
|
|
31
32
|
feature: IssueManagerFeature;
|
|
32
33
|
frame?: WorkbenchFrame;
|
|
@@ -37,10 +38,10 @@ interface CreateIssueManagerWorkbenchNodeDefinitionInput {
|
|
|
37
38
|
state: IssueManagerNodeState;
|
|
38
39
|
workspaceState: IssueManagerExternalWorkspaceState;
|
|
39
40
|
}) => void;
|
|
40
|
-
|
|
41
|
+
resolveRichTextTriggerProviders?: (input: {
|
|
41
42
|
surface: "issue" | "task";
|
|
42
43
|
workspaceId: string;
|
|
43
|
-
}) => readonly
|
|
44
|
+
}) => readonly RichTextTriggerProvider[];
|
|
44
45
|
renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;
|
|
45
46
|
service?: IssueManagerControllerService;
|
|
46
47
|
title?: string;
|
|
@@ -68,7 +69,7 @@ interface CreateIssueManagerWorkbenchContributionInput {
|
|
|
68
69
|
node?: Omit<CreateIssueManagerWorkbenchNodeDefinitionInput, "feature">;
|
|
69
70
|
typeId?: string;
|
|
70
71
|
}
|
|
71
|
-
declare function createIssueManagerWorkbenchNodeDefinition<TExternalWorkspaceState extends IssueManagerExternalWorkspaceState = IssueManagerExternalWorkspaceState>({ emptyIllustration, feature, frame, onStateChange,
|
|
72
|
+
declare function createIssueManagerWorkbenchNodeDefinition<TExternalWorkspaceState extends IssueManagerExternalWorkspaceState = IssueManagerExternalWorkspaceState>({ emptyIllustration, diagnostics, feature, frame, onStateChange, resolveRichTextTriggerProviders, renderLatestRunStatus, service, title, typeId }: CreateIssueManagerWorkbenchNodeDefinitionInput): WorkbenchHostNodeDefinition<Partial<IssueManagerNodeState> | null, TExternalWorkspaceState>;
|
|
72
73
|
declare function createIssueManagerDockEntry({ dockIcon, feature, id, order, separatorAfter, sectionId, typeId }: CreateIssueManagerDockEntryInput): WorkbenchHostDockEntry;
|
|
73
74
|
declare function createIssueManagerDockIconImage(src: string): ReactNode;
|
|
74
75
|
declare function createIssueManagerWorkbenchLaunchHandler({ frame, title, typeId }?: CreateIssueManagerWorkbenchLaunchHandlerInput): (request: WorkbenchHostLaunchRequest) => Promise<WorkbenchHostLaunchResult | null>;
|
package/dist/workbench/index.js
CHANGED
|
@@ -2,14 +2,14 @@ import {
|
|
|
2
2
|
IssueManagerNode,
|
|
3
3
|
IssueManagerNodeHeader,
|
|
4
4
|
dispatchIssueManagerTaskListCollapsed
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-JOEMRSA4.js";
|
|
6
|
+
import "../chunk-MLBXKQLG.js";
|
|
7
7
|
import {
|
|
8
8
|
normalizeIssueManagerNodeState,
|
|
9
9
|
resolveIssueManagerExpandedFrame,
|
|
10
10
|
shouldAutoCollapseIssueManagerSidebar
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
} from "../chunk-5A25XEF2.js";
|
|
12
|
+
import "../chunk-ABQR5VIJ.js";
|
|
13
13
|
import {
|
|
14
14
|
defaultIssueManagerNodeFrame,
|
|
15
15
|
defaultIssueManagerWorkbenchTypeId
|
|
@@ -42,10 +42,11 @@ function readIssueManagerOpenActivationPayload(activation) {
|
|
|
42
42
|
// src/workbench/index.ts
|
|
43
43
|
function createIssueManagerWorkbenchNodeDefinition({
|
|
44
44
|
emptyIllustration,
|
|
45
|
+
diagnostics,
|
|
45
46
|
feature,
|
|
46
47
|
frame = defaultIssueManagerNodeFrame,
|
|
47
48
|
onStateChange,
|
|
48
|
-
|
|
49
|
+
resolveRichTextTriggerProviders,
|
|
49
50
|
renderLatestRunStatus,
|
|
50
51
|
service,
|
|
51
52
|
title,
|
|
@@ -58,6 +59,7 @@ function createIssueManagerWorkbenchNodeDefinition({
|
|
|
58
59
|
},
|
|
59
60
|
renderBody: (context) => createElement(IssueManagerNode, {
|
|
60
61
|
emptyIllustration,
|
|
62
|
+
diagnostics,
|
|
61
63
|
feature,
|
|
62
64
|
nodeId: context.node.id,
|
|
63
65
|
openRequest: toIssueManagerNodeOpenRequest(context.activation),
|
|
@@ -72,7 +74,7 @@ function createIssueManagerWorkbenchNodeDefinition({
|
|
|
72
74
|
workspaceState: context.externalWorkspaceState
|
|
73
75
|
}) : void 0,
|
|
74
76
|
renderLatestRunStatus,
|
|
75
|
-
|
|
77
|
+
resolveRichTextTriggerProviders,
|
|
76
78
|
service,
|
|
77
79
|
state: context.externalNodeState,
|
|
78
80
|
workspaceId: context.externalWorkspaceState.workspaceId ?? ""
|