@nextop-os/workspace-issue-manager 0.0.17 → 0.0.18

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.
@@ -265,7 +265,33 @@ interface IssueManagerFileDirectoryListing {
265
265
  entries: IssueManagerFileReference[];
266
266
  rootPath?: string | null;
267
267
  }
268
+ type IssueManagerReferencePrefetchState = "loaded" | "partial" | "not_loaded" | "unavailable" | (string & {});
269
+ type IssueManagerReferencePrefetchReason = "budget_exhausted" | "depth_limit_reached" | "unreadable" | (string & {});
270
+ interface IssueManagerReferenceTreeDirectory {
271
+ directoryPath: string;
272
+ entries: IssueManagerReferenceTreeEntry[];
273
+ prefetchReason?: IssueManagerReferencePrefetchReason | null;
274
+ prefetchState: IssueManagerReferencePrefetchState;
275
+ }
276
+ interface IssueManagerReferenceTreeEntry extends IssueManagerFileReference {
277
+ hasChildren?: boolean;
278
+ prefetchReason?: IssueManagerReferencePrefetchReason | null;
279
+ prefetchState?: IssueManagerReferencePrefetchState | null;
280
+ prefetchedDirectory?: IssueManagerReferenceTreeDirectory | null;
281
+ }
282
+ interface IssueManagerReferenceTreeSnapshot {
283
+ budgetExceeded: boolean;
284
+ directory: IssueManagerReferenceTreeDirectory;
285
+ prefetchBudgetMs: number;
286
+ prefetchDepth: number;
287
+ rootPath: string;
288
+ }
268
289
  interface IssueManagerFileAdapter {
290
+ loadReferenceTree?(input: IssueManagerScope & {
291
+ path?: string | null;
292
+ prefetchBudgetMs?: number;
293
+ prefetchDepth?: number;
294
+ }): Promise<IssueManagerReferenceTreeSnapshot>;
269
295
  listDirectory?(input: IssueManagerScope & {
270
296
  path?: string | null;
271
297
  }): Promise<IssueManagerFileDirectoryListing>;
@@ -321,4 +347,4 @@ interface IssueManagerNodeState {
321
347
  taskListNextPageToken?: string | null;
322
348
  }
323
349
 
324
- export type { IssueManagerAddContextRefInput, IssueManagerAddContextRefsInput, IssueManagerAgentRunRequest, IssueManagerAgentRunResult, IssueManagerAgentRunner, IssueManagerBackend, IssueManagerCompleteRunInput, IssueManagerCompleteRunOutputInput, IssueManagerContextRef, IssueManagerContextRefParentKind, IssueManagerCreateIssueInput, IssueManagerCreateRunInput, IssueManagerCreateTaskInput, IssueManagerFileAdapter, IssueManagerFileDirectoryListing, IssueManagerFileReference, IssueManagerIdentityAdapter, IssueManagerIdentityProfile, IssueManagerIssueContextRef, IssueManagerIssueDetail, IssueManagerIssueSummary, IssueManagerListIssuesInput, IssueManagerListIssuesResult, IssueManagerListTasksInput, IssueManagerListTasksResult, IssueManagerNodeState, IssueManagerPriority, IssueManagerRemoveContextRefInput, IssueManagerRun, IssueManagerRunCompletionStatus, IssueManagerRunEnvelope, IssueManagerRunOutput, IssueManagerScope, IssueManagerShareAdapter, IssueManagerStatus, IssueManagerStatusCounts, IssueManagerTaskContextRef, IssueManagerTaskDetail, IssueManagerTaskSummary, IssueManagerUpdateIssueInput, IssueManagerUpdateTaskInput };
350
+ export type { IssueManagerAddContextRefInput, IssueManagerAddContextRefsInput, IssueManagerAgentRunRequest, IssueManagerAgentRunResult, IssueManagerAgentRunner, IssueManagerBackend, IssueManagerCompleteRunInput, IssueManagerCompleteRunOutputInput, IssueManagerContextRef, IssueManagerContextRefParentKind, IssueManagerCreateIssueInput, IssueManagerCreateRunInput, IssueManagerCreateTaskInput, IssueManagerFileAdapter, IssueManagerFileDirectoryListing, IssueManagerFileReference, IssueManagerIdentityAdapter, IssueManagerIdentityProfile, IssueManagerIssueContextRef, IssueManagerIssueDetail, IssueManagerIssueSummary, IssueManagerListIssuesInput, IssueManagerListIssuesResult, IssueManagerListTasksInput, IssueManagerListTasksResult, IssueManagerNodeState, IssueManagerPriority, IssueManagerReferencePrefetchReason, IssueManagerReferencePrefetchState, IssueManagerReferenceTreeDirectory, IssueManagerReferenceTreeEntry, IssueManagerReferenceTreeSnapshot, IssueManagerRemoveContextRefInput, IssueManagerRun, IssueManagerRunCompletionStatus, IssueManagerRunEnvelope, IssueManagerRunOutput, IssueManagerScope, IssueManagerShareAdapter, IssueManagerStatus, IssueManagerStatusCounts, IssueManagerTaskContextRef, IssueManagerTaskDetail, IssueManagerTaskSummary, IssueManagerUpdateIssueInput, IssueManagerUpdateTaskInput };
@@ -2,12 +2,16 @@ import { I18nRuntime } from '@nextop-os/ui-i18n-runtime';
2
2
  import { IssueManagerI18nRuntime } from './i18n/index.js';
3
3
  import { IssueManagerAgentRunner, IssueManagerBackend, IssueManagerFileAdapter, IssueManagerIdentityAdapter, IssueManagerShareAdapter, IssueManagerNodeState } from './contracts/index.js';
4
4
 
5
+ interface IssueManagerNotificationSink {
6
+ tips(title: string): void;
7
+ }
5
8
  interface IssueManagerFeature {
6
9
  agentRunner: IssueManagerAgentRunner;
7
10
  backend: IssueManagerBackend;
8
11
  fileAdapter?: IssueManagerFileAdapter;
9
12
  i18n: IssueManagerI18nRuntime;
10
13
  identityAdapter: IssueManagerIdentityAdapter;
14
+ notifications?: IssueManagerNotificationSink;
11
15
  shareAdapter?: IssueManagerShareAdapter;
12
16
  }
13
17
  interface CreateIssueManagerFeatureInput {
@@ -16,10 +20,11 @@ interface CreateIssueManagerFeatureInput {
16
20
  fileAdapter?: IssueManagerFileAdapter;
17
21
  i18n?: I18nRuntime<string>;
18
22
  identityAdapter: IssueManagerIdentityAdapter;
23
+ notifications?: IssueManagerNotificationSink;
19
24
  shareAdapter?: IssueManagerShareAdapter;
20
25
  }
21
26
  declare const defaultIssueManagerNodeState: IssueManagerNodeState;
22
27
  declare function createIssueManagerFeature(input: CreateIssueManagerFeatureInput): IssueManagerFeature;
23
28
  declare function normalizeIssueManagerNodeState(state: Partial<IssueManagerNodeState> | null | undefined): IssueManagerNodeState;
24
29
 
25
- export { type CreateIssueManagerFeatureInput as C, type IssueManagerFeature as I, createIssueManagerFeature as c, defaultIssueManagerNodeState as d, normalizeIssueManagerNodeState as n };
30
+ export { type CreateIssueManagerFeatureInput as C, type IssueManagerFeature as I, type IssueManagerNotificationSink as a, createIssueManagerFeature as c, defaultIssueManagerNodeState as d, normalizeIssueManagerNodeState as n };
@@ -3,7 +3,7 @@ import {
3
3
  issueManagerI18nModule,
4
4
  issueManagerI18nNamespace,
5
5
  issueManagerI18nResources
6
- } from "../chunk-5YEGAJKA.js";
6
+ } from "../chunk-H2ZF6X6A.js";
7
7
  export {
8
8
  createIssueManagerI18nRuntime,
9
9
  issueManagerI18nModule,
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- export { C as CreateIssueManagerFeatureInput, I as IssueManagerFeature, c as createIssueManagerFeature, d as defaultIssueManagerNodeState, n as normalizeIssueManagerNodeState } from './feature-B6_wXych.js';
1
+ export { C as CreateIssueManagerFeatureInput, I as IssueManagerFeature, a as IssueManagerNotificationSink, c as createIssueManagerFeature, d as defaultIssueManagerNodeState, n as normalizeIssueManagerNodeState } from './feature-Qe1b5W0D.js';
2
+ import { createRichTextMentionHref, createRichTextMentionMarkdown, extractRichTextMentionsFromContent, extractPlainTextFromContent, extractPlainTextWithoutFilesFromContent, normalizeRichTextContent, parseRichTextMentionHref, removeRichTextMentionFromContent } from '@nextop-os/ui-rich-text/core';
3
+ import { RichTextMentionAttrs } from '@nextop-os/ui-rich-text/types';
2
4
  import { IssueManagerIssueSummary, IssueManagerTaskSummary } from './contracts/index.js';
3
5
  import '@nextop-os/ui-i18n-runtime';
4
6
  import './i18n/index.js';
@@ -14,14 +16,21 @@ type IssueManagerWorkspaceFileLinkInput = {
14
16
  name?: string | null;
15
17
  path: string;
16
18
  };
17
- declare function normalizeIssueManagerContent(value?: string | null): string;
19
+ type IssueManagerMentionRef = RichTextMentionAttrs;
20
+ type IssueManagerMentionAttrs = RichTextMentionAttrs;
21
+ declare const normalizeIssueManagerContent: typeof normalizeRichTextContent;
18
22
  declare function normalizeIssueManagerWorkspaceFileLinkHref(pathOrHref: string, kind?: "file" | "folder"): string;
19
23
  declare function createIssueManagerWorkspaceFileLinkMarkdown(input: IssueManagerWorkspaceFileLinkInput): string;
20
24
  declare function appendIssueManagerWorkspaceFileLinksToContent(value: string | null | undefined, refs: readonly IssueManagerWorkspaceFileLinkInput[]): string;
21
25
  declare function extractIssueManagerWorkspaceFileLinksFromContent(value: string | null | undefined): IssueManagerWorkspaceFileLinkRef[];
22
26
  declare function removeIssueManagerWorkspaceFileLinkFromContent(content: string, path: string): string;
23
- declare function extractIssueManagerPlainTextFromContent(value?: string | null): string;
24
- declare function extractIssueManagerPlainTextWithoutFilesFromContent(value?: string | null): string;
27
+ declare const extractIssueManagerPlainTextFromContent: typeof extractPlainTextFromContent;
28
+ declare const extractIssueManagerPlainTextWithoutFilesFromContent: typeof extractPlainTextWithoutFilesFromContent;
29
+ declare const createIssueManagerMentionHref: typeof createRichTextMentionHref;
30
+ declare const createIssueManagerMentionMarkdown: typeof createRichTextMentionMarkdown;
31
+ declare const parseIssueManagerMentionHref: typeof parseRichTextMentionHref;
32
+ declare const extractIssueManagerMentionsFromContent: typeof extractRichTextMentionsFromContent;
33
+ declare const removeIssueManagerMentionFromContent: typeof removeRichTextMentionFromContent;
25
34
 
26
35
  declare function buildIssueManagerRunOutputDir(issueId: string, taskId: string, runId: string): string;
27
36
  declare function buildIssueManagerUploadDir(issueId: string, taskId?: string | null): string;
@@ -33,4 +42,4 @@ declare function buildIssueManagerRunPrompt(input: {
33
42
  workspaceRoot: string;
34
43
  }): string;
35
44
 
36
- export { type IssueManagerWorkspaceFileLinkInput, type IssueManagerWorkspaceFileLinkRef, appendIssueManagerWorkspaceFileLinksToContent, buildIssueManagerRunOutputDir, buildIssueManagerRunPrompt, buildIssueManagerUploadDir, createIssueManagerWorkspaceFileLinkMarkdown, extractIssueManagerPlainTextFromContent, extractIssueManagerPlainTextWithoutFilesFromContent, extractIssueManagerWorkspaceFileLinksFromContent, normalizeIssueManagerContent, normalizeIssueManagerWorkspaceFileLinkHref, removeIssueManagerWorkspaceFileLinkFromContent, resolveIssueManagerWorkspaceRuntimePath };
45
+ export { type IssueManagerMentionAttrs, type IssueManagerMentionRef, type IssueManagerWorkspaceFileLinkInput, type IssueManagerWorkspaceFileLinkRef, appendIssueManagerWorkspaceFileLinksToContent, buildIssueManagerRunOutputDir, buildIssueManagerRunPrompt, buildIssueManagerUploadDir, createIssueManagerMentionHref, createIssueManagerMentionMarkdown, createIssueManagerWorkspaceFileLinkMarkdown, extractIssueManagerMentionsFromContent, extractIssueManagerPlainTextFromContent, extractIssueManagerPlainTextWithoutFilesFromContent, extractIssueManagerWorkspaceFileLinksFromContent, normalizeIssueManagerContent, normalizeIssueManagerWorkspaceFileLinkHref, parseIssueManagerMentionHref, removeIssueManagerMentionFromContent, removeIssueManagerWorkspaceFileLinkFromContent, resolveIssueManagerWorkspaceRuntimePath };
package/dist/index.js CHANGED
@@ -4,32 +4,42 @@ import {
4
4
  buildIssueManagerRunPrompt,
5
5
  buildIssueManagerUploadDir,
6
6
  createIssueManagerFeature,
7
+ createIssueManagerMentionHref,
8
+ createIssueManagerMentionMarkdown,
7
9
  createIssueManagerWorkspaceFileLinkMarkdown,
8
10
  defaultIssueManagerNodeState,
11
+ extractIssueManagerMentionsFromContent,
9
12
  extractIssueManagerPlainTextFromContent,
10
13
  extractIssueManagerPlainTextWithoutFilesFromContent,
11
14
  extractIssueManagerWorkspaceFileLinksFromContent,
12
15
  normalizeIssueManagerContent,
13
16
  normalizeIssueManagerNodeState,
14
17
  normalizeIssueManagerWorkspaceFileLinkHref,
18
+ parseIssueManagerMentionHref,
19
+ removeIssueManagerMentionFromContent,
15
20
  removeIssueManagerWorkspaceFileLinkFromContent,
16
21
  resolveIssueManagerWorkspaceRuntimePath
17
- } from "./chunk-LYYOPZIJ.js";
18
- import "./chunk-5YEGAJKA.js";
22
+ } from "./chunk-HKIH3OTZ.js";
23
+ import "./chunk-H2ZF6X6A.js";
19
24
  export {
20
25
  appendIssueManagerWorkspaceFileLinksToContent,
21
26
  buildIssueManagerRunOutputDir,
22
27
  buildIssueManagerRunPrompt,
23
28
  buildIssueManagerUploadDir,
24
29
  createIssueManagerFeature,
30
+ createIssueManagerMentionHref,
31
+ createIssueManagerMentionMarkdown,
25
32
  createIssueManagerWorkspaceFileLinkMarkdown,
26
33
  defaultIssueManagerNodeState,
34
+ extractIssueManagerMentionsFromContent,
27
35
  extractIssueManagerPlainTextFromContent,
28
36
  extractIssueManagerPlainTextWithoutFilesFromContent,
29
37
  extractIssueManagerWorkspaceFileLinksFromContent,
30
38
  normalizeIssueManagerContent,
31
39
  normalizeIssueManagerNodeState,
32
40
  normalizeIssueManagerWorkspaceFileLinkHref,
41
+ parseIssueManagerMentionHref,
42
+ removeIssueManagerMentionFromContent,
33
43
  removeIssueManagerWorkspaceFileLinkFromContent,
34
44
  resolveIssueManagerWorkspaceRuntimePath
35
45
  };
@@ -1,17 +1,32 @@
1
- import { JSX } from 'react';
1
+ import { JSX, HTMLAttributes, ReactNode } from 'react';
2
+ import { RichTextAtProvider } from '@nextop-os/ui-rich-text/types';
2
3
  import { IssueManagerNodeState } from '../contracts/index.js';
3
- import { I as IssueManagerFeature } from '../feature-B6_wXych.js';
4
+ import { I as IssueManagerFeature } from '../feature-Qe1b5W0D.js';
5
+ import { IssueManagerI18nRuntime } from '../i18n/index.js';
4
6
  import '@nextop-os/ui-i18n-runtime';
5
- import '../i18n/index.js';
7
+
8
+ type IssueManagerRichTextSurface = "issue" | "task";
6
9
 
7
10
  interface IssueManagerNodeProps {
8
11
  feature: IssueManagerFeature;
9
12
  nodeId: string;
10
13
  onStateChange?: (state: IssueManagerNodeState) => void;
14
+ resolveRichTextAtProviders?: (input: {
15
+ surface: IssueManagerRichTextSurface;
16
+ workspaceId: string;
17
+ }) => readonly RichTextAtProvider[];
11
18
  state?: Partial<IssueManagerNodeState> | null;
12
19
  workspaceId: string;
13
20
  }
14
- declare function IssueManagerNode({ feature, nodeId, onStateChange, state, workspaceId }: IssueManagerNodeProps): JSX.Element;
15
- declare function IssueManagerNodeHeader(): JSX.Element | null;
21
+ declare function IssueManagerNode({ feature, nodeId, onStateChange, resolveRichTextAtProviders, state, workspaceId }: IssueManagerNodeProps): JSX.Element;
22
+ interface IssueManagerNodeHeaderProps extends HTMLAttributes<HTMLElement> {
23
+ copy: IssueManagerI18nRuntime;
24
+ defaultActions?: ReactNode;
25
+ isSidebarAutoCollapsed: boolean;
26
+ isSidebarCollapsed: boolean;
27
+ onToggleSidebar: () => void;
28
+ title?: string;
29
+ }
30
+ declare function IssueManagerNodeHeader({ className, copy, defaultActions, isSidebarAutoCollapsed, isSidebarCollapsed, onToggleSidebar, title, ...headerProps }: IssueManagerNodeHeaderProps): JSX.Element;
16
31
 
17
32
  export { IssueManagerNode, IssueManagerNodeHeader, type IssueManagerNodeProps };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  IssueManagerNode,
3
3
  IssueManagerNodeHeader
4
- } from "../chunk-RX6P2DPR.js";
5
- import "../chunk-LYYOPZIJ.js";
6
- import "../chunk-5YEGAJKA.js";
4
+ } from "../chunk-IYLTKFVO.js";
5
+ import "../chunk-HKIH3OTZ.js";
6
+ import "../chunk-H2ZF6X6A.js";
7
7
  export {
8
8
  IssueManagerNode,
9
9
  IssueManagerNodeHeader
@@ -1,7 +1,8 @@
1
1
  import { ReactNode } from 'react';
2
+ import { RichTextAtProvider } from '@nextop-os/ui-rich-text/types';
2
3
  import { WorkbenchFrame, WorkbenchHostDockEntry, WorkbenchHostLaunchRequest, WorkbenchHostLaunchResult, WorkbenchHostNodeDefinition } from '@nextop-os/workbench-surface';
3
4
  import { IssueManagerNodeState } from '../contracts/index.js';
4
- import { I as IssueManagerFeature } from '../feature-B6_wXych.js';
5
+ import { I as IssueManagerFeature } from '../feature-Qe1b5W0D.js';
5
6
  import '@nextop-os/ui-i18n-runtime';
6
7
  import '../i18n/index.js';
7
8
 
@@ -18,6 +19,10 @@ interface CreateIssueManagerWorkbenchNodeDefinitionInput {
18
19
  state: IssueManagerNodeState;
19
20
  workspaceState: IssueManagerExternalWorkspaceState;
20
21
  }) => void;
22
+ resolveRichTextAtProviders?: (input: {
23
+ surface: "issue" | "task";
24
+ workspaceId: string;
25
+ }) => readonly RichTextAtProvider[];
21
26
  title?: string;
22
27
  typeId?: string;
23
28
  }
@@ -35,7 +40,7 @@ interface CreateIssueManagerDockEntryInput {
35
40
  typeId?: string;
36
41
  }
37
42
  declare const defaultIssueManagerWorkbenchTypeId = "issue-manager";
38
- declare function createIssueManagerWorkbenchNodeDefinition<TExternalWorkspaceState extends IssueManagerExternalWorkspaceState = IssueManagerExternalWorkspaceState>({ feature, frame, onStateChange, title, typeId }: CreateIssueManagerWorkbenchNodeDefinitionInput): WorkbenchHostNodeDefinition<Partial<IssueManagerNodeState> | null, TExternalWorkspaceState>;
43
+ declare function createIssueManagerWorkbenchNodeDefinition<TExternalWorkspaceState extends IssueManagerExternalWorkspaceState = IssueManagerExternalWorkspaceState>({ feature, frame, onStateChange, resolveRichTextAtProviders, title, typeId }: CreateIssueManagerWorkbenchNodeDefinitionInput): WorkbenchHostNodeDefinition<Partial<IssueManagerNodeState> | null, TExternalWorkspaceState>;
39
44
  declare function createIssueManagerDockEntry({ dockIcon, feature, id, order, sectionId, typeId }: CreateIssueManagerDockEntryInput): WorkbenchHostDockEntry;
40
45
  declare function createIssueManagerWorkbenchLaunchHandler({ frame, title, typeId }?: CreateIssueManagerWorkbenchLaunchHandlerInput): (request: WorkbenchHostLaunchRequest) => Promise<WorkbenchHostLaunchResult | null>;
41
46
 
@@ -1,8 +1,13 @@
1
1
  import {
2
- IssueManagerNode
3
- } from "../chunk-RX6P2DPR.js";
4
- import "../chunk-LYYOPZIJ.js";
5
- import "../chunk-5YEGAJKA.js";
2
+ IssueManagerNode,
3
+ IssueManagerNodeHeader,
4
+ dispatchIssueManagerTaskListCollapsed,
5
+ shouldAutoCollapseIssueManagerSidebar
6
+ } from "../chunk-IYLTKFVO.js";
7
+ import {
8
+ normalizeIssueManagerNodeState
9
+ } from "../chunk-HKIH3OTZ.js";
10
+ import "../chunk-H2ZF6X6A.js";
6
11
 
7
12
  // src/workbench/index.ts
8
13
  import { createElement } from "react";
@@ -17,10 +22,12 @@ var defaultIssueManagerNodeFrame = {
17
22
  x: 220,
18
23
  y: 120
19
24
  };
25
+ var issueManagerExpandedFrameMinWidth = 668;
20
26
  function createIssueManagerWorkbenchNodeDefinition({
21
27
  feature,
22
28
  frame = defaultIssueManagerNodeFrame,
23
29
  onStateChange,
30
+ resolveRichTextAtProviders,
24
31
  title,
25
32
  typeId = defaultIssueManagerWorkbenchTypeId
26
33
  }) {
@@ -39,9 +46,71 @@ function createIssueManagerWorkbenchNodeDefinition({
39
46
  state,
40
47
  workspaceState: context.externalWorkspaceState
41
48
  }) : void 0,
49
+ resolveRichTextAtProviders,
42
50
  state: context.externalNodeState,
43
51
  workspaceId: context.externalWorkspaceState.workspaceId ?? ""
44
52
  }),
53
+ renderHeader: ({
54
+ defaultActions,
55
+ dragHandleProps,
56
+ externalNodeState,
57
+ externalWorkspaceState,
58
+ instanceId,
59
+ instanceKey,
60
+ isFocused,
61
+ node,
62
+ surfaceSize,
63
+ windowActions
64
+ }) => {
65
+ const nodeState = normalizeIssueManagerNodeState(externalNodeState);
66
+ const isSidebarAutoCollapsed = shouldAutoCollapseIssueManagerSidebar(
67
+ node.frame.width
68
+ );
69
+ const isSidebarCollapsed = nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;
70
+ const persistTaskListCollapsed = (collapsed) => {
71
+ onStateChange?.({
72
+ instanceId,
73
+ instanceKey: instanceKey ?? null,
74
+ nodeId: node.id,
75
+ state: {
76
+ ...nodeState,
77
+ taskListCollapsed: collapsed
78
+ },
79
+ workspaceState: externalWorkspaceState
80
+ });
81
+ };
82
+ const applyTaskListCollapsed = (collapsed) => {
83
+ dispatchIssueManagerTaskListCollapsed({
84
+ collapsed,
85
+ nodeId: node.id
86
+ });
87
+ persistTaskListCollapsed(collapsed);
88
+ };
89
+ return createElement(IssueManagerNodeHeader, {
90
+ copy: feature.i18n,
91
+ defaultActions,
92
+ isSidebarAutoCollapsed,
93
+ isSidebarCollapsed,
94
+ title: node.title,
95
+ ...dragHandleProps,
96
+ onPointerDown: (event) => {
97
+ dragHandleProps.onPointerDown?.(event);
98
+ if (!isFocused) {
99
+ windowActions.focus();
100
+ }
101
+ },
102
+ onToggleSidebar: () => {
103
+ if (isSidebarAutoCollapsed) {
104
+ windowActions.resize(
105
+ resolveIssueManagerExpandedFrame(node.frame, surfaceSize.width)
106
+ );
107
+ applyTaskListCollapsed(false);
108
+ return;
109
+ }
110
+ applyTaskListCollapsed(nodeState.taskListCollapsed !== true);
111
+ }
112
+ });
113
+ },
45
114
  title: title ?? feature.i18n.t("title"),
46
115
  typeId,
47
116
  window: {
@@ -52,6 +121,17 @@ function createIssueManagerWorkbenchNodeDefinition({
52
121
  }
53
122
  };
54
123
  }
124
+ function resolveIssueManagerExpandedFrame(frame, surfaceWidth) {
125
+ const width = Math.min(
126
+ Math.max(frame.width, issueManagerExpandedFrameMinWidth),
127
+ Math.max(frame.width, surfaceWidth)
128
+ );
129
+ return {
130
+ ...frame,
131
+ width,
132
+ x: Math.max(0, Math.min(frame.x, surfaceWidth - width))
133
+ };
134
+ }
55
135
  function createIssueManagerDockEntry({
56
136
  dockIcon,
57
137
  feature,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/workbench/index.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport type {\n WorkbenchFrame,\n WorkbenchHostDockEntry,\n WorkbenchHostLaunchRequest,\n WorkbenchHostLaunchResult,\n WorkbenchHostNodeDefinition\n} from \"@nextop-os/workbench-surface\";\nimport type { IssueManagerNodeState } from \"../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../core/index.ts\";\nimport { IssueManagerNode } from \"../react/IssueManagerNode.tsx\";\n\nexport interface IssueManagerExternalWorkspaceState {\n workspaceId?: string | null;\n}\n\nexport interface CreateIssueManagerWorkbenchNodeDefinitionInput {\n feature: IssueManagerFeature;\n frame?: WorkbenchFrame;\n onStateChange?: (input: {\n instanceId: string;\n instanceKey?: string | null;\n nodeId: string;\n state: IssueManagerNodeState;\n workspaceState: IssueManagerExternalWorkspaceState;\n }) => void;\n title?: string;\n typeId?: string;\n}\n\nexport interface CreateIssueManagerWorkbenchLaunchHandlerInput {\n frame?: WorkbenchFrame;\n title?: string;\n typeId?: string;\n}\n\nexport interface CreateIssueManagerDockEntryInput {\n dockIcon?: ReactNode;\n feature: IssueManagerFeature;\n id?: string;\n order?: number;\n sectionId?: string;\n typeId?: string;\n}\n\nexport const defaultIssueManagerWorkbenchTypeId = \"issue-manager\";\nconst defaultIssueManagerDockIconUrl = new URL(\n \"../assets/workspace-dock-task.png\",\n import.meta.url\n).href;\n\nconst defaultIssueManagerNodeFrame: WorkbenchFrame = {\n height: 620,\n width: 960,\n x: 220,\n y: 120\n};\n\nexport function createIssueManagerWorkbenchNodeDefinition<\n TExternalWorkspaceState extends IssueManagerExternalWorkspaceState =\n IssueManagerExternalWorkspaceState\n>({\n feature,\n frame = defaultIssueManagerNodeFrame,\n onStateChange,\n title,\n typeId = defaultIssueManagerWorkbenchTypeId\n}: CreateIssueManagerWorkbenchNodeDefinitionInput): WorkbenchHostNodeDefinition<\n Partial<IssueManagerNodeState> | null,\n TExternalWorkspaceState\n> {\n return {\n frame,\n instance: {\n mode: \"single\"\n },\n renderBody: (context) =>\n createElement(IssueManagerNode, {\n feature,\n nodeId: context.node.id,\n onStateChange: onStateChange\n ? (state) =>\n onStateChange({\n instanceId: context.instanceId,\n instanceKey: context.instanceKey ?? null,\n nodeId: context.node.id,\n state,\n workspaceState: context.externalWorkspaceState\n })\n : undefined,\n state: context.externalNodeState,\n workspaceId: context.externalWorkspaceState.workspaceId ?? \"\"\n }),\n title: title ?? feature.i18n.t(\"title\"),\n typeId,\n window: {\n closable: true,\n defaultOpen: false,\n minimizable: true,\n restoreOnLoad: true\n }\n };\n}\n\nexport function createIssueManagerDockEntry({\n dockIcon,\n feature,\n id,\n order,\n sectionId,\n typeId = defaultIssueManagerWorkbenchTypeId\n}: CreateIssueManagerDockEntryInput): WorkbenchHostDockEntry {\n return {\n icon: dockIcon ?? createElement(DefaultIssueManagerDockIcon),\n id: id ?? typeId,\n label: feature.i18n.t(\"dockLabel\"),\n launchBehavior: \"enabled\",\n matchNode: (node) => node.data.typeId === typeId,\n order,\n resolvePopupItem: ({ node }) => ({\n title: node.title\n }),\n sectionId,\n typeId,\n visibility: \"always\"\n };\n}\n\nexport function createIssueManagerWorkbenchLaunchHandler({\n frame = defaultIssueManagerNodeFrame,\n title,\n typeId = defaultIssueManagerWorkbenchTypeId\n}: CreateIssueManagerWorkbenchLaunchHandlerInput = {}): (\n request: WorkbenchHostLaunchRequest\n) => Promise<WorkbenchHostLaunchResult | null> {\n return (request) => {\n if (request.typeId !== typeId) {\n return Promise.resolve(null);\n }\n\n return Promise.resolve({\n defaultFrame: frame,\n dockEntryId: request.dockEntryId ?? typeId,\n framePolicy: \"cascade\",\n instanceId: typeId,\n title,\n typeId\n });\n };\n}\n\nfunction DefaultIssueManagerDockIcon() {\n return createElement(\"img\", {\n alt: \"\",\n \"aria-hidden\": \"true\",\n \"data-issue-manager-dock-icon\": \"true\",\n draggable: false,\n src: defaultIssueManagerDockIconUrl\n });\n}\n"],"mappings":";;;;;;;AAAA,SAAS,qBAAqC;AA6CvC,IAAM,qCAAqC;AAClD,IAAM,iCAAiC,IAAI;AAAA,EACzC;AAAA,EACA,YAAY;AACd,EAAE;AAEF,IAAM,+BAA+C;AAAA,EACnD,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,GAAG;AAAA,EACH,GAAG;AACL;AAEO,SAAS,0CAGd;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAGE;AACA,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,IACR;AAAA,IACA,YAAY,CAAC,YACX,cAAc,kBAAkB;AAAA,MAC9B;AAAA,MACA,QAAQ,QAAQ,KAAK;AAAA,MACrB,eAAe,gBACX,CAAC,UACC,cAAc;AAAA,QACZ,YAAY,QAAQ;AAAA,QACpB,aAAa,QAAQ,eAAe;AAAA,QACpC,QAAQ,QAAQ,KAAK;AAAA,QACrB;AAAA,QACA,gBAAgB,QAAQ;AAAA,MAC1B,CAAC,IACH;AAAA,MACJ,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ,uBAAuB,eAAe;AAAA,IAC7D,CAAC;AAAA,IACH,OAAO,SAAS,QAAQ,KAAK,EAAE,OAAO;AAAA,IACtC;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEO,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AACX,GAA6D;AAC3D,SAAO;AAAA,IACL,MAAM,YAAY,cAAc,2BAA2B;AAAA,IAC3D,IAAI,MAAM;AAAA,IACV,OAAO,QAAQ,KAAK,EAAE,WAAW;AAAA,IACjC,gBAAgB;AAAA,IAChB,WAAW,CAAC,SAAS,KAAK,KAAK,WAAW;AAAA,IAC1C;AAAA,IACA,kBAAkB,CAAC,EAAE,KAAK,OAAO;AAAA,MAC/B,OAAO,KAAK;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAEO,SAAS,yCAAyC;AAAA,EACvD,QAAQ;AAAA,EACR;AAAA,EACA,SAAS;AACX,IAAmD,CAAC,GAEL;AAC7C,SAAO,CAAC,YAAY;AAClB,QAAI,QAAQ,WAAW,QAAQ;AAC7B,aAAO,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AAEA,WAAO,QAAQ,QAAQ;AAAA,MACrB,cAAc;AAAA,MACd,aAAa,QAAQ,eAAe;AAAA,MACpC,aAAa;AAAA,MACb,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,8BAA8B;AACrC,SAAO,cAAc,OAAO;AAAA,IAC1B,KAAK;AAAA,IACL,eAAe;AAAA,IACf,gCAAgC;AAAA,IAChC,WAAW;AAAA,IACX,KAAK;AAAA,EACP,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../src/workbench/index.ts"],"sourcesContent":["import { createElement, type ReactNode } from \"react\";\nimport type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type {\n WorkbenchFrame,\n WorkbenchHostDockEntry,\n WorkbenchHostLaunchRequest,\n WorkbenchHostLaunchResult,\n WorkbenchHostNodeDefinition\n} from \"@nextop-os/workbench-surface\";\nimport type { IssueManagerNodeState } from \"../contracts/index.ts\";\nimport {\n normalizeIssueManagerNodeState,\n type IssueManagerFeature\n} from \"../core/index.ts\";\nimport {\n dispatchIssueManagerTaskListCollapsed,\n IssueManagerNode,\n IssueManagerNodeHeader\n} from \"../react/IssueManagerNode.tsx\";\nimport { shouldAutoCollapseIssueManagerSidebar } from \"../react/internal/IssueManagerShell.tsx\";\n\nexport interface IssueManagerExternalWorkspaceState {\n workspaceId?: string | null;\n}\n\nexport interface CreateIssueManagerWorkbenchNodeDefinitionInput {\n feature: IssueManagerFeature;\n frame?: WorkbenchFrame;\n onStateChange?: (input: {\n instanceId: string;\n instanceKey?: string | null;\n nodeId: string;\n state: IssueManagerNodeState;\n workspaceState: IssueManagerExternalWorkspaceState;\n }) => void;\n resolveRichTextAtProviders?: (input: {\n surface: \"issue\" | \"task\";\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n title?: string;\n typeId?: string;\n}\n\nexport interface CreateIssueManagerWorkbenchLaunchHandlerInput {\n frame?: WorkbenchFrame;\n title?: string;\n typeId?: string;\n}\n\nexport interface CreateIssueManagerDockEntryInput {\n dockIcon?: ReactNode;\n feature: IssueManagerFeature;\n id?: string;\n order?: number;\n sectionId?: string;\n typeId?: string;\n}\n\nexport const defaultIssueManagerWorkbenchTypeId = \"issue-manager\";\nconst defaultIssueManagerDockIconUrl = new URL(\n \"../assets/workspace-dock-task.png\",\n import.meta.url\n).href;\n\nconst defaultIssueManagerNodeFrame: WorkbenchFrame = {\n height: 620,\n width: 960,\n x: 220,\n y: 120\n};\nconst issueManagerExpandedFrameMinWidth = 668;\n\nexport function createIssueManagerWorkbenchNodeDefinition<\n TExternalWorkspaceState extends IssueManagerExternalWorkspaceState =\n IssueManagerExternalWorkspaceState\n>({\n feature,\n frame = defaultIssueManagerNodeFrame,\n onStateChange,\n resolveRichTextAtProviders,\n title,\n typeId = defaultIssueManagerWorkbenchTypeId\n}: CreateIssueManagerWorkbenchNodeDefinitionInput): WorkbenchHostNodeDefinition<\n Partial<IssueManagerNodeState> | null,\n TExternalWorkspaceState\n> {\n return {\n frame,\n instance: {\n mode: \"single\"\n },\n renderBody: (context) =>\n createElement(IssueManagerNode, {\n feature,\n nodeId: context.node.id,\n onStateChange: onStateChange\n ? (state) =>\n onStateChange({\n instanceId: context.instanceId,\n instanceKey: context.instanceKey ?? null,\n nodeId: context.node.id,\n state,\n workspaceState: context.externalWorkspaceState\n })\n : undefined,\n resolveRichTextAtProviders,\n state: context.externalNodeState,\n workspaceId: context.externalWorkspaceState.workspaceId ?? \"\"\n }),\n renderHeader: ({\n defaultActions,\n dragHandleProps,\n externalNodeState,\n externalWorkspaceState,\n instanceId,\n instanceKey,\n isFocused,\n node,\n surfaceSize,\n windowActions\n }) => {\n const nodeState = normalizeIssueManagerNodeState(externalNodeState);\n const isSidebarAutoCollapsed = shouldAutoCollapseIssueManagerSidebar(\n node.frame.width\n );\n const isSidebarCollapsed =\n nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;\n const persistTaskListCollapsed = (collapsed: boolean) => {\n onStateChange?.({\n instanceId,\n instanceKey: instanceKey ?? null,\n nodeId: node.id,\n state: {\n ...nodeState,\n taskListCollapsed: collapsed\n },\n workspaceState: externalWorkspaceState\n });\n };\n const applyTaskListCollapsed = (collapsed: boolean) => {\n dispatchIssueManagerTaskListCollapsed({\n collapsed,\n nodeId: node.id\n });\n persistTaskListCollapsed(collapsed);\n };\n\n return createElement(IssueManagerNodeHeader, {\n copy: feature.i18n,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n title: node.title,\n ...dragHandleProps,\n onPointerDown: (event) => {\n dragHandleProps.onPointerDown?.(event);\n if (!isFocused) {\n windowActions.focus();\n }\n },\n onToggleSidebar: () => {\n if (isSidebarAutoCollapsed) {\n windowActions.resize(\n resolveIssueManagerExpandedFrame(node.frame, surfaceSize.width)\n );\n applyTaskListCollapsed(false);\n return;\n }\n\n applyTaskListCollapsed(nodeState.taskListCollapsed !== true);\n }\n });\n },\n title: title ?? feature.i18n.t(\"title\"),\n typeId,\n window: {\n closable: true,\n defaultOpen: false,\n minimizable: true,\n restoreOnLoad: true\n }\n };\n}\n\nfunction resolveIssueManagerExpandedFrame(\n frame: WorkbenchFrame,\n surfaceWidth: number\n): WorkbenchFrame {\n const width = Math.min(\n Math.max(frame.width, issueManagerExpandedFrameMinWidth),\n Math.max(frame.width, surfaceWidth)\n );\n return {\n ...frame,\n width,\n x: Math.max(0, Math.min(frame.x, surfaceWidth - width))\n };\n}\n\nexport function createIssueManagerDockEntry({\n dockIcon,\n feature,\n id,\n order,\n sectionId,\n typeId = defaultIssueManagerWorkbenchTypeId\n}: CreateIssueManagerDockEntryInput): WorkbenchHostDockEntry {\n return {\n icon: dockIcon ?? createElement(DefaultIssueManagerDockIcon),\n id: id ?? typeId,\n label: feature.i18n.t(\"dockLabel\"),\n launchBehavior: \"enabled\",\n matchNode: (node) => node.data.typeId === typeId,\n order,\n resolvePopupItem: ({ node }) => ({\n title: node.title\n }),\n sectionId,\n typeId,\n visibility: \"always\"\n };\n}\n\nexport function createIssueManagerWorkbenchLaunchHandler({\n frame = defaultIssueManagerNodeFrame,\n title,\n typeId = defaultIssueManagerWorkbenchTypeId\n}: CreateIssueManagerWorkbenchLaunchHandlerInput = {}): (\n request: WorkbenchHostLaunchRequest\n) => Promise<WorkbenchHostLaunchResult | null> {\n return (request) => {\n if (request.typeId !== typeId) {\n return Promise.resolve(null);\n }\n\n return Promise.resolve({\n defaultFrame: frame,\n dockEntryId: request.dockEntryId ?? typeId,\n framePolicy: \"cascade\",\n instanceId: typeId,\n title,\n typeId\n });\n };\n}\n\nfunction DefaultIssueManagerDockIcon() {\n return createElement(\"img\", {\n alt: \"\",\n \"aria-hidden\": \"true\",\n \"data-issue-manager-dock-icon\": \"true\",\n draggable: false,\n src: defaultIssueManagerDockIconUrl\n });\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextop-os/workspace-issue-manager",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -38,9 +38,10 @@
38
38
  "directory": "packages/workspace/issue-manager"
39
39
  },
40
40
  "dependencies": {
41
- "@nextop-os/ui-i18n-runtime": "0.0.17",
42
- "@nextop-os/ui-system": "0.0.17",
43
- "@nextop-os/workbench-surface": "0.0.17"
41
+ "@nextop-os/ui-i18n-runtime": "0.0.18",
42
+ "@nextop-os/ui-rich-text": "0.0.18",
43
+ "@nextop-os/ui-system": "0.0.18",
44
+ "@nextop-os/workbench-surface": "0.0.18"
44
45
  },
45
46
  "devDependencies": {
46
47
  "@types/node": "^24.0.1",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/i18n/issueManagerI18n.ts"],"sourcesContent":["import {\n createI18nRuntime,\n createScopedI18nRuntime,\n createScopedLocaleObjectsI18nModuleManifest,\n type I18nDictionary,\n type I18nRuntime\n} from \"@nextop-os/ui-i18n-runtime\";\n\ntype IssueManagerI18nLocale = \"en\" | \"zh-CN\";\n\nexport const issueManagerI18nNamespace = \"issueManager\";\nexport const issueManagerI18nModule =\n createScopedLocaleObjectsI18nModuleManifest({\n localeObjectByLocale: {\n en: \"issueManagerEn\",\n \"zh-CN\": \"issueManagerZhCN\"\n },\n name: \"workspace-issue-manager\",\n namespace: issueManagerI18nNamespace,\n sourceRoot: \"packages/workspace/issue-manager/src\"\n });\n\nconst issueManagerEn = {\n actions: {\n add: \"Add\",\n addReferences: \"Add references\",\n addSubtask: \"Add subtask\",\n askAgentToRun: \"Ask agent to run\",\n cancel: \"Cancel\",\n copyShareLink: \"Copy share link\",\n createIssue: \"Create issue\",\n createTask: \"Create task\",\n delete: \"Delete\",\n deleteIssue: \"Delete issue\",\n deleteTask: \"Delete task\",\n edit: \"Edit\",\n editIssue: \"Edit issue\",\n editTask: \"Edit task\",\n inviteCollaborator: \"Invite collaborator\",\n insertReferences: \"Insert references\",\n moreActions: \"More actions\",\n openReference: \"Open\",\n refresh: \"Refresh\",\n referenceWorkspaceFiles: \"Reference workspace files\",\n removeReference: \"Remove\",\n runTask: \"Run task\",\n saveIssue: \"Save issue\",\n saveSubtask: \"Save subtask\",\n saveTask: \"Save task\",\n uploadFiles: \"Upload files\",\n uploadFolder: \"Upload folder\"\n },\n composer: {\n issueContentPlaceholder: \"Describe the issue, goals, or context.\",\n issueTitlePlaceholder: \"Issue title\",\n subtaskContentPlaceholder:\n \"Add the subtask goal, execution approach, and acceptance criteria.\",\n subtaskTitlePlaceholder: \"Enter a subtask title\",\n taskContentPlaceholder: \"Describe the executable task and expected result.\",\n taskTitlePlaceholder: \"Task title\"\n },\n confirmations: {\n deleteIssue: \"Delete this issue?\",\n deleteTask: \"Delete this task?\"\n },\n dockLabel: \"Tasks\",\n emptyState:\n \"Create an issue, add the goal and references, then start executing.\",\n labels: {\n allStatus: \"All\",\n content: \"Content\",\n contextReferences: \"Context references\",\n createdAt: \"Created\",\n creator: \"Creator\",\n description: \"Description\",\n executionOutputs: \"Execution outputs\",\n issueDetails: \"Issue details\",\n issueList: \"Issues\",\n latestRunStatus: \"Latest execution status\",\n outputs: \"Outputs\",\n priority: \"Priority\",\n provider: \"Provider\",\n recentRuns: \"Recent runs\",\n requirementDescription: \"Requirements\",\n resizeIssueList: \"Resize issue list\",\n searchIssues: \"Search issues\",\n scrollStatusTabsLeft: \"Scroll status tabs left\",\n scrollStatusTabsRight: \"Scroll status tabs right\",\n status: \"Status\",\n subtasks: \"Subtasks\",\n title: \"Title\",\n updatedAt: \"Updated\",\n taskCount: \"{{count}} tasks\",\n taskDetails: \"Task details\",\n taskList: \"Tasks\"\n },\n messages: {\n clipboardUnavailable: \"Clipboard is unavailable.\",\n copiedShareLink: \"Share link copied.\",\n issueDeleted: \"Issue deleted.\",\n issueSaved: \"Issue saved.\",\n issueContentEmpty: \"No issue description yet.\",\n noExecutionOutputs: \"No execution outputs yet.\",\n noExecutionStatus: \"No execution records yet.\",\n noIssueReferences: \"No issue references yet.\",\n noIssuesForFilterBody:\n \"Try another filter, or create a new issue to get things started.\",\n noIssuesForFilterTitle: \"No issues match the current filter.\",\n noIssues: \"No issues yet.\",\n noOutputs: \"No outputs yet.\",\n noRecentRuns: \"No runs yet.\",\n taskContentEmpty: \"No task description yet.\",\n noTaskReferences: \"No task references yet.\",\n noTasksForIssueBody:\n \"Create the first task for this issue and let an agent or yourself execute it.\",\n noSubtasksForIssue:\n \"You can continue breaking down this item by adding subtasks.\",\n noTasks: \"No tasks yet.\",\n runExitCode: \"Codex exited with code {{code}}.\",\n runCompleted: \"Run completed.\",\n runFailed: \"Run failed.\",\n runStarted: \"Run started.\",\n runStatusMissing:\n \"Terminal exited before the issue run produced a status marker.\",\n runTimedOut: \"Issue run timed out while waiting for Codex output.\",\n taskDeleted: \"Task deleted.\",\n taskSaved: \"Task saved.\",\n uploadTypeConflict: \"Upload target contains conflicting entry types.\",\n workspacePathUnavailable: \"Workspace path is unavailable.\"\n },\n priority: {\n high: \"High\",\n low: \"Low\",\n medium: \"Medium\"\n },\n referencePicker: {\n browse: \"Browse\",\n confirm: \"Use selected references\",\n emptyDirectory: \"This folder is empty.\",\n emptySearch: \"No matching files or folders.\",\n searchPlaceholder: \"Search files and folders\",\n selectedCount: \"{{count}} selected\",\n title: \"Pick workspace references\"\n },\n run: {\n failedSummaryFallback: \"Run failed\",\n outputDirectory: \"Output directory\",\n requester: \"Requester\",\n status: \"Run status\",\n summary: \"Summary\"\n },\n status: {\n canceled: \"Canceled\",\n completed: \"Completed\",\n failed: \"Failed\",\n notStarted: \"Not started\",\n pendingAcceptance: \"Pending acceptance\",\n running: \"Running\",\n unknown: \"Unknown\"\n },\n title: \"Task Center\"\n} as const satisfies I18nDictionary;\n\nconst issueManagerZhCN = {\n actions: {\n add: \"添加\",\n addReferences: \"添加引用\",\n addSubtask: \"添加子任务\",\n askAgentToRun: \"让 Agent 执行\",\n cancel: \"取消\",\n copyShareLink: \"复制分享链接\",\n createIssue: \"新建事项\",\n createTask: \"新建任务\",\n delete: \"删除\",\n deleteIssue: \"删除事项\",\n deleteTask: \"删除任务\",\n edit: \"编辑\",\n editIssue: \"编辑事项\",\n editTask: \"编辑任务\",\n inviteCollaborator: \"邀请协作者\",\n insertReferences: \"插入引用\",\n moreActions: \"更多操作\",\n openReference: \"打开\",\n refresh: \"刷新\",\n referenceWorkspaceFiles: \"引用空间文件\",\n removeReference: \"移除\",\n runTask: \"运行任务\",\n saveIssue: \"保存事项\",\n saveSubtask: \"保存子任务\",\n saveTask: \"保存任务\",\n uploadFiles: \"上传文件\",\n uploadFolder: \"上传文件夹\"\n },\n composer: {\n issueContentPlaceholder: \"补充这个事项的背景、目标或上下文。\",\n issueTitlePlaceholder: \"事项标题\",\n subtaskContentPlaceholder: \"补充子任务目标、执行方式和验收标准\",\n subtaskTitlePlaceholder: \"请输入子任务标题\",\n taskContentPlaceholder: \"描述这个任务的执行要求和预期结果。\",\n taskTitlePlaceholder: \"任务标题\"\n },\n confirmations: {\n deleteIssue: \"确定删除这个事项吗?\",\n deleteTask: \"确定删除这个任务吗?\"\n },\n dockLabel: \"任务\",\n emptyState: \"新建事项,补充需求描述和相关文件,即可开始执行。\",\n labels: {\n allStatus: \"全部\",\n content: \"内容\",\n contextReferences: \"上下文引用\",\n createdAt: \"创建时间\",\n creator: \"创建者\",\n description: \"描述\",\n executionOutputs: \"执行产物\",\n issueDetails: \"事项详情\",\n issueList: \"事项\",\n latestRunStatus: \"最新执行状态\",\n outputs: \"输出产物\",\n priority: \"优先级\",\n provider: \"Provider\",\n recentRuns: \"最近运行\",\n requirementDescription: \"需求描述\",\n resizeIssueList: \"调整事项列表宽度\",\n searchIssues: \"搜索事项\",\n scrollStatusTabsLeft: \"向左滚动状态标签\",\n scrollStatusTabsRight: \"向右滚动状态标签\",\n status: \"状态\",\n subtasks: \"子任务\",\n title: \"标题\",\n updatedAt: \"更新时间\",\n taskCount: \"{{count}} 个任务\",\n taskDetails: \"任务详情\",\n taskList: \"任务\"\n },\n messages: {\n clipboardUnavailable: \"当前环境无法访问剪贴板。\",\n copiedShareLink: \"已复制分享链接。\",\n issueDeleted: \"事项已删除。\",\n issueSaved: \"事项已保存。\",\n issueContentEmpty: \"这个事项还没有描述。\",\n noExecutionOutputs: \"暂无执行产物\",\n noExecutionStatus: \"暂无执行记录\",\n noIssueReferences: \"这个事项还没有引用。\",\n noIssuesForFilterBody: \"试试切换筛选条件,或者新建一个事项。\",\n noIssuesForFilterTitle: \"当前筛选条件下暂无事项。\",\n noIssues: \"还没有事项。\",\n noOutputs: \"还没有输出产物。\",\n noRecentRuns: \"还没有运行记录。\",\n taskContentEmpty: \"这个任务还没有描述。\",\n noTaskReferences: \"这个任务还没有引用。\",\n noTasksForIssueBody:\n \"为这个事项创建第一个任务,然后交给 Agent 或你自己执行。\",\n noSubtasksForIssue: \"你可以围绕当前任务继续添加子任务\",\n noTasks: \"还没有任务。\",\n runExitCode: \"Codex 以退出码 {{code}} 结束。\",\n runCompleted: \"运行已完成。\",\n runFailed: \"运行失败。\",\n runStarted: \"运行已开始。\",\n runStatusMissing: \"终端在写入运行状态前就退出了。\",\n runTimedOut: \"等待 Codex 输出超时。\",\n taskDeleted: \"任务已删除。\",\n taskSaved: \"任务已保存。\",\n uploadTypeConflict: \"上传目标中存在类型冲突的同名条目。\",\n workspacePathUnavailable: \"当前工作区路径不可用。\"\n },\n priority: {\n high: \"高\",\n low: \"低\",\n medium: \"中\"\n },\n referencePicker: {\n browse: \"浏览\",\n confirm: \"使用已选引用\",\n emptyDirectory: \"当前目录为空。\",\n emptySearch: \"没有匹配的文件或文件夹。\",\n searchPlaceholder: \"搜索文件和文件夹\",\n selectedCount: \"已选择 {{count}} 项\",\n title: \"选择工作区引用\"\n },\n run: {\n failedSummaryFallback: \"运行失败\",\n outputDirectory: \"输出目录\",\n requester: \"发起人\",\n status: \"运行状态\",\n summary: \"摘要\"\n },\n status: {\n canceled: \"已取消\",\n completed: \"已完成\",\n failed: \"失败\",\n notStarted: \"未启动\",\n pendingAcceptance: \"待验收\",\n running: \"执行中\",\n unknown: \"未知\"\n },\n title: \"任务中心\"\n} as const satisfies I18nDictionary;\n\nexport type IssueManagerI18nKey = string;\n\nexport type IssueManagerI18nRuntime = I18nRuntime<IssueManagerI18nKey>;\n\nconst issueManagerDefaults: Record<IssueManagerI18nLocale, I18nDictionary> = {\n en: issueManagerEn,\n \"zh-CN\": issueManagerZhCN\n};\n\nexport const issueManagerI18nResources = {\n en: {\n [issueManagerI18nNamespace]: issueManagerDefaults.en\n },\n \"zh-CN\": {\n [issueManagerI18nNamespace]: issueManagerDefaults[\"zh-CN\"]\n }\n} as const satisfies Record<IssueManagerI18nLocale, I18nDictionary>;\n\nconst defaultIssueManagerI18n = createI18nRuntime({\n dictionaries: [issueManagerI18nResources.en]\n});\n\nexport function createIssueManagerI18nRuntime(\n runtime: I18nRuntime<string> | undefined\n): IssueManagerI18nRuntime {\n return createScopedI18nRuntime<IssueManagerI18nKey>(\n runtime ?? defaultIssueManagerI18n,\n issueManagerI18nNamespace\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/feature.ts","../src/core/content.ts","../src/core/runPrompt.ts"],"sourcesContent":["import type { I18nRuntime } from \"@nextop-os/ui-i18n-runtime\";\nimport {\n createIssueManagerI18nRuntime,\n type IssueManagerI18nRuntime\n} from \"../i18n/issueManagerI18n.ts\";\nimport type {\n IssueManagerAgentRunner,\n IssueManagerBackend,\n IssueManagerFileAdapter,\n IssueManagerIdentityAdapter,\n IssueManagerNodeState,\n IssueManagerShareAdapter\n} from \"../contracts/index.ts\";\n\nexport interface IssueManagerFeature {\n agentRunner: IssueManagerAgentRunner;\n backend: IssueManagerBackend;\n fileAdapter?: IssueManagerFileAdapter;\n i18n: IssueManagerI18nRuntime;\n identityAdapter: IssueManagerIdentityAdapter;\n shareAdapter?: IssueManagerShareAdapter;\n}\n\nexport interface CreateIssueManagerFeatureInput {\n agentRunner: IssueManagerAgentRunner;\n backend: IssueManagerBackend;\n fileAdapter?: IssueManagerFileAdapter;\n i18n?: I18nRuntime<string>;\n identityAdapter: IssueManagerIdentityAdapter;\n shareAdapter?: IssueManagerShareAdapter;\n}\n\nexport const defaultIssueManagerNodeState: IssueManagerNodeState = {\n issueSearchQuery: \"\",\n issueStatusFilter: \"all\",\n selectedAgentProvider: \"codex\",\n selectedIssueId: null,\n selectedTaskId: null\n};\n\nexport function createIssueManagerFeature(\n input: CreateIssueManagerFeatureInput\n): IssueManagerFeature {\n return {\n agentRunner: input.agentRunner,\n backend: input.backend,\n fileAdapter: input.fileAdapter,\n i18n: createIssueManagerI18nRuntime(input.i18n),\n identityAdapter: input.identityAdapter,\n shareAdapter: input.shareAdapter\n };\n}\n\nexport function normalizeIssueManagerNodeState(\n state: Partial<IssueManagerNodeState> | null | undefined\n): IssueManagerNodeState {\n return {\n ...defaultIssueManagerNodeState,\n ...state,\n issueSearchQuery: state?.issueSearchQuery?.trim() ?? \"\",\n issueStatusFilter: state?.issueStatusFilter ?? \"all\",\n selectedAgentProvider: state?.selectedAgentProvider?.trim() || \"codex\",\n selectedIssueId: normalizeNullableString(state?.selectedIssueId),\n selectedTaskId: normalizeNullableString(state?.selectedTaskId)\n };\n}\n\nfunction normalizeNullableString(\n value: string | null | undefined\n): string | null {\n const trimmed = value?.trim() ?? \"\";\n return trimmed.length > 0 ? trimmed : null;\n}\n","export type IssueManagerWorkspaceFileLinkRef = {\n href: string;\n kind: \"file\" | \"folder\";\n name: string;\n path: string;\n};\n\nexport type IssueManagerWorkspaceFileLinkInput = {\n kind?: \"file\" | \"folder\";\n name?: string | null;\n path: string;\n};\n\nconst markdownLinkPattern = /\\[([^\\]]+)\\]\\(([^)\\s]+)\\)/g;\nconst markdownImagePattern = /!\\[([^\\]]*)\\]\\(([^)\\s]+)\\)/g;\nconst externalLinkPrefix = /^(?:[a-z]+:)?\\/\\//i;\nconst mentionLinkPrefix = /^mention:\\/\\//i;\n\ntype LegacyJSONContentNode = {\n attrs?: Record<string, unknown>;\n content?: LegacyJSONContentNode[];\n text?: string;\n type?: string;\n};\n\nfunction normalizeLineEndings(value: string): string {\n return value.replace(/\\r\\n?/g, \"\\n\");\n}\n\nexport function normalizeIssueManagerContent(value?: string | null): string {\n const trimmed = normalizeLineEndings(value ?? \"\").trim();\n if (!trimmed) {\n return \"\";\n }\n\n const markdown = convertLegacyDocumentString(trimmed);\n return markdown || trimmed;\n}\n\nfunction convertLegacyDocumentString(value: string): string {\n try {\n const parsed = JSON.parse(value) as LegacyJSONContentNode;\n if (parsed?.type !== \"doc\" || !Array.isArray(parsed.content)) {\n return \"\";\n }\n\n return renderLegacyNodesToMarkdown(parsed.content).trim();\n } catch {\n return \"\";\n }\n}\n\nfunction renderLegacyNodesToMarkdown(nodes: LegacyJSONContentNode[]): string {\n return nodes\n .map((node) => renderLegacyNodeToMarkdown(node))\n .filter((part) => part.length > 0)\n .join(\"\\n\\n\");\n}\n\nfunction renderLegacyNodeToMarkdown(\n node: LegacyJSONContentNode | null | undefined\n): string {\n if (!node) {\n return \"\";\n }\n\n if (node.type === \"text\") {\n return node.text ?? \"\";\n }\n\n if (node.type === \"workspaceFileLink\") {\n const attrs = node.attrs ?? {};\n const kind = attrs.kind === \"folder\" ? \"folder\" : \"file\";\n const hrefValue =\n (typeof attrs.href === \"string\" ? attrs.href : undefined) ||\n (typeof attrs.path === \"string\" ? attrs.path : undefined) ||\n \"\";\n const href = normalizeIssueManagerWorkspaceFileLinkHref(hrefValue, kind);\n const label =\n (typeof attrs.name === \"string\" ? attrs.name : undefined)?.trim() ||\n href.split(\"/\").filter(Boolean).at(-1) ||\n href;\n return href && label ? `[${label}](${href})` : label;\n }\n\n if (Array.isArray(node.content)) {\n const inline = node.content\n .map((child) => renderLegacyNodeToMarkdown(child))\n .filter((part) => part.length > 0)\n .join(\"\")\n .trim();\n if (!inline) {\n return \"\";\n }\n if (node.type === \"paragraph\") {\n return inline;\n }\n return inline;\n }\n\n return \"\";\n}\n\nfunction normalizeWorkspacePath(\n pathOrHref: string,\n kind: \"file\" | \"folder\"\n): string {\n const trimmed = pathOrHref.trim();\n if (!trimmed) {\n return \"\";\n }\n if (kind === \"folder\" && !trimmed.endsWith(\"/\")) {\n return `${trimmed}/`;\n }\n return trimmed;\n}\n\nfunction isWorkspaceReferenceHref(href: string): boolean {\n const trimmed = href.trim();\n if (\n !trimmed ||\n mentionLinkPrefix.test(trimmed) ||\n externalLinkPrefix.test(trimmed)\n ) {\n return false;\n }\n return true;\n}\n\nexport function normalizeIssueManagerWorkspaceFileLinkHref(\n pathOrHref: string,\n kind: \"file\" | \"folder\" = \"file\"\n): string {\n return normalizeWorkspacePath(pathOrHref, kind);\n}\n\nexport function createIssueManagerWorkspaceFileLinkMarkdown(\n input: IssueManagerWorkspaceFileLinkInput\n): string {\n const kind = input.kind === \"folder\" ? \"folder\" : \"file\";\n const href = normalizeIssueManagerWorkspaceFileLinkHref(input.path, kind);\n const displayName =\n input.name?.trim() ||\n href.split(\"/\").filter(Boolean).at(-1) ||\n href ||\n input.path.trim();\n if (!href || !displayName) {\n return \"\";\n }\n return `[${displayName}](${href})`;\n}\n\nexport function appendIssueManagerWorkspaceFileLinksToContent(\n value: string | null | undefined,\n refs: readonly IssueManagerWorkspaceFileLinkInput[]\n): string {\n const content = normalizeIssueManagerContent(value);\n const existing = new Set(\n extractIssueManagerWorkspaceFileLinksFromContent(content).map(\n (ref) => ref.path\n )\n );\n const rendered = refs\n .map((ref) => {\n const kind = ref.kind === \"folder\" ? \"folder\" : \"file\";\n const path = normalizeIssueManagerWorkspaceFileLinkHref(ref.path, kind);\n if (!path || existing.has(path)) {\n return \"\";\n }\n existing.add(path);\n return createIssueManagerWorkspaceFileLinkMarkdown({\n ...ref,\n kind,\n path\n });\n })\n .filter(Boolean);\n\n if (rendered.length === 0) {\n return content;\n }\n\n return content ? `${content}\\n\\n${rendered.join(\"\\n\")}` : rendered.join(\"\\n\");\n}\n\nexport function extractIssueManagerWorkspaceFileLinksFromContent(\n value: string | null | undefined\n): IssueManagerWorkspaceFileLinkRef[] {\n const content = normalizeIssueManagerContent(value);\n const refs = new Map<string, IssueManagerWorkspaceFileLinkRef>();\n for (const match of content.matchAll(markdownLinkPattern)) {\n const name = match[1]?.trim() ?? \"\";\n const href = match[2]?.trim() ?? \"\";\n if (!name || !isWorkspaceReferenceHref(href)) {\n continue;\n }\n const kind = href.endsWith(\"/\") ? \"folder\" : \"file\";\n const path = normalizeIssueManagerWorkspaceFileLinkHref(href, kind);\n if (!path || refs.has(path)) {\n continue;\n }\n refs.set(path, {\n href: path,\n kind,\n name,\n path\n });\n }\n return [...refs.values()];\n}\n\nexport function removeIssueManagerWorkspaceFileLinkFromContent(\n content: string,\n path: string\n): string {\n const targetPath = path.trim();\n if (!targetPath) {\n return normalizeIssueManagerContent(content);\n }\n const normalized = normalizeIssueManagerContent(content);\n const next = normalized\n .split(\"\\n\")\n .filter((line) => {\n const trimmed = line.trim();\n if (!trimmed) {\n return true;\n }\n const refs = extractIssueManagerWorkspaceFileLinksFromContent(trimmed);\n return !refs.some((ref) => ref.path === targetPath) || refs.length > 1;\n })\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\");\n return next.trim();\n}\n\nexport function extractIssueManagerPlainTextFromContent(\n value?: string | null\n): string {\n const content = normalizeIssueManagerContent(value);\n if (!content) {\n return \"\";\n }\n return content\n .replace(markdownImagePattern, \" $1 \")\n .replace(markdownLinkPattern, \" $1 \")\n .replace(/^[\\s>*#+-]+/gm, \" \")\n .replace(/`([^`]+)`/g, \" $1 \")\n .replace(/[*_~]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nexport function extractIssueManagerPlainTextWithoutFilesFromContent(\n value?: string | null\n): string {\n const content = normalizeIssueManagerContent(value);\n if (!content) {\n return \"\";\n }\n return content\n .replace(markdownImagePattern, \" \")\n .replace(markdownLinkPattern, \" \")\n .replace(/^[\\s>*#+-]+/gm, \" \")\n .replace(/`([^`]+)`/g, \" $1 \")\n .replace(/[*_~]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../contracts/index.ts\";\nimport {\n extractIssueManagerPlainTextFromContent,\n extractIssueManagerWorkspaceFileLinksFromContent\n} from \"./content.ts\";\n\nexport function buildIssueManagerRunOutputDir(\n issueId: string,\n taskId: string,\n runId: string\n): string {\n return `/workspace/issues/${issueId}/tasks/${taskId}/runs/${runId}`;\n}\n\nexport function buildIssueManagerUploadDir(\n issueId: string,\n taskId?: string | null\n): string {\n const normalizedTaskId = taskId?.trim();\n if (normalizedTaskId) {\n return `/workspace/issues/${issueId}/tasks/${normalizedTaskId}/attachments`;\n }\n return `/workspace/issues/${issueId}/attachments`;\n}\n\nexport function resolveIssueManagerWorkspaceRuntimePath(\n workspaceRoot: string,\n requestedPath: string\n): string {\n const normalizedWorkspaceRoot = workspaceRoot.trim().replace(/\\/+$/, \"\");\n const normalizedRequestedPath = requestedPath.trim();\n\n if (!normalizedWorkspaceRoot || !normalizedRequestedPath) {\n return normalizedRequestedPath;\n }\n\n if (\n normalizedRequestedPath === normalizedWorkspaceRoot ||\n normalizedRequestedPath.startsWith(`${normalizedWorkspaceRoot}/`)\n ) {\n return normalizedRequestedPath;\n }\n\n if (normalizedRequestedPath === \"/workspace\") {\n return normalizedWorkspaceRoot;\n }\n\n if (normalizedRequestedPath.startsWith(\"/workspace/\")) {\n return `${normalizedWorkspaceRoot}/${normalizedRequestedPath.slice(\"/workspace/\".length)}`;\n }\n\n if (!normalizedRequestedPath.startsWith(\"/\")) {\n return `${normalizedWorkspaceRoot}/${normalizedRequestedPath.replace(/^\\/+/, \"\")}`;\n }\n\n return normalizedRequestedPath;\n}\n\nexport function buildIssueManagerRunPrompt(input: {\n issue: IssueManagerIssueSummary;\n runId: string;\n task: IssueManagerTaskSummary;\n workspaceRoot: string;\n}): string {\n const outputDir = resolveIssueManagerWorkspaceRuntimePath(\n input.workspaceRoot,\n buildIssueManagerRunOutputDir(\n input.issue.issueId,\n input.task.taskId,\n input.runId\n )\n );\n const workspaceFileRefs = collectIssueManagerWorkspaceReferencePaths(\n input.task.content || \"\",\n input.issue.content || \"\"\n )\n .map(\n (refPath) =>\n `- [file] ${resolveIssueManagerWorkspaceRuntimePath(input.workspaceRoot, refPath)}`\n )\n .join(\"\\n\");\n const taskContent = extractIssueManagerPlainTextFromContent(\n input.task.content || \"\"\n );\n const issueContent = extractIssueManagerPlainTextFromContent(\n input.issue.content || \"\"\n );\n\n return [\n \"你正在处理一个工作区任务。\",\n \"\",\n `Issue 标题:${input.issue.title}`,\n `Issue 内容:${issueContent || \"(无补充内容)\"}`,\n `Task 标题:${input.task.title}`,\n `Task 内容:${taskContent || \"(无补充内容)\"}`,\n `当前工作目录:${input.workspaceRoot}`,\n `任务输出目录:${outputDir}`,\n \"\",\n \"引用资料:\",\n workspaceFileRefs || \"- (无引用资料)\",\n \"\",\n \"执行要求:\",\n `1. 在 ${input.workspaceRoot} 下工作,不要切换到其他无关目录。`,\n \"2. 如需读取引用资料,请直接使用上面的路径。\",\n `3. 如果用户没有另行指定位置,所有最终产物都写入 ${outputDir}/。`,\n \"4. 至少输出 summary.md,说明处理结果、改动与结论。\",\n \"5. 不要把最终产物写到工作区之外。\"\n ].join(\"\\n\");\n}\n\nfunction collectIssueManagerWorkspaceReferencePaths(\n ...contents: string[]\n): string[] {\n const paths = new Set<string>();\n for (const content of contents) {\n for (const ref of extractIssueManagerWorkspaceFileLinksFromContent(\n content\n )) {\n paths.add(ref.path);\n }\n }\n return [...paths];\n}\n"],"mappings":"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","names":[]}