@nextop-os/workspace-issue-manager 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # Workspace Issue Manager
2
+
3
+ Reusable workbench issue-manager feature for workspace-scoped issue, task, and
4
+ run workflows.
5
+
6
+ This package owns host-agnostic contracts, i18n defaults, React-facing feature
7
+ types, and workbench registration helpers. Hosts provide backend, identity,
8
+ file, agent runner, and optional share adapters.
9
+
10
+ See [docs/architecture/workspace-issue-manager.md](/Users/ccr/tsh-project/nextop/docs/architecture/workspace-issue-manager.md)
11
+ for the current shared architecture and host-adapter model.
@@ -0,0 +1,73 @@
1
+ // src/i18n/issueManagerI18n.ts
2
+ import {
3
+ createI18nRuntime,
4
+ createScopedI18nRuntime,
5
+ createScopedLocaleObjectsI18nModuleManifest
6
+ } from "@nextop-os/ui-i18n-runtime";
7
+ var issueManagerI18nNamespace = "issueManager";
8
+ var issueManagerI18nModule = createScopedLocaleObjectsI18nModuleManifest({
9
+ localeObjectByLocale: {
10
+ en: "issueManagerEn",
11
+ "zh-CN": "issueManagerZhCN"
12
+ },
13
+ name: "workspace-issue-manager",
14
+ namespace: issueManagerI18nNamespace,
15
+ sourceRoot: "packages/workspace/issue-manager/src"
16
+ });
17
+ var issueManagerEn = {
18
+ dockLabel: "Issues",
19
+ emptyState: "No issue selected",
20
+ status: {
21
+ canceled: "Canceled",
22
+ completed: "Completed",
23
+ failed: "Failed",
24
+ notStarted: "Not started",
25
+ pendingAcceptance: "Pending acceptance",
26
+ running: "Running",
27
+ unknown: "Unknown"
28
+ },
29
+ title: "Issue Manager"
30
+ };
31
+ var issueManagerZhCN = {
32
+ dockLabel: "\u4EFB\u52A1",
33
+ emptyState: "\u672A\u9009\u62E9\u4EFB\u52A1",
34
+ status: {
35
+ canceled: "\u5DF2\u53D6\u6D88",
36
+ completed: "\u5DF2\u5B8C\u6210",
37
+ failed: "\u5931\u8D25",
38
+ notStarted: "\u672A\u542F\u52A8",
39
+ pendingAcceptance: "\u5F85\u9A8C\u6536",
40
+ running: "\u6267\u884C\u4E2D",
41
+ unknown: "\u672A\u77E5"
42
+ },
43
+ title: "\u4EFB\u52A1\u7BA1\u7406"
44
+ };
45
+ var issueManagerDefaults = {
46
+ en: issueManagerEn,
47
+ "zh-CN": issueManagerZhCN
48
+ };
49
+ var issueManagerI18nResources = {
50
+ en: {
51
+ [issueManagerI18nNamespace]: issueManagerDefaults.en
52
+ },
53
+ "zh-CN": {
54
+ [issueManagerI18nNamespace]: issueManagerDefaults["zh-CN"]
55
+ }
56
+ };
57
+ var defaultIssueManagerI18n = createI18nRuntime({
58
+ dictionaries: [issueManagerI18nResources.en]
59
+ });
60
+ function createIssueManagerI18nRuntime(runtime) {
61
+ return createScopedI18nRuntime(
62
+ runtime ?? defaultIssueManagerI18n,
63
+ issueManagerI18nNamespace
64
+ );
65
+ }
66
+
67
+ export {
68
+ issueManagerI18nNamespace,
69
+ issueManagerI18nModule,
70
+ issueManagerI18nResources,
71
+ createIssueManagerI18nRuntime
72
+ };
73
+ //# sourceMappingURL=chunk-CSDFXQBD.js.map
@@ -0,0 +1 @@
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 dockLabel: \"Issues\",\n emptyState: \"No issue selected\",\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: \"Issue Manager\"\n} as const satisfies I18nDictionary;\n\nconst issueManagerZhCN = {\n dockLabel: \"任务\",\n emptyState: \"未选择任务\",\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 =\n | \"dockLabel\"\n | \"emptyState\"\n | \"status.canceled\"\n | \"status.completed\"\n | \"status.failed\"\n | \"status.notStarted\"\n | \"status.pendingAcceptance\"\n | \"status.running\"\n | \"status.unknown\"\n | \"title\";\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":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAIA,IAAM,4BAA4B;AAClC,IAAM,yBACX,4CAA4C;AAAA,EAC1C,sBAAsB;AAAA,IACpB,IAAI;AAAA,IACJ,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YAAY;AACd,CAAC;AAEH,IAAM,iBAAiB;AAAA,EACrB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AACT;AAEA,IAAM,mBAAmB;AAAA,EACvB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AACT;AAgBA,IAAM,uBAAuE;AAAA,EAC3E,IAAI;AAAA,EACJ,SAAS;AACX;AAEO,IAAM,4BAA4B;AAAA,EACvC,IAAI;AAAA,IACF,CAAC,yBAAyB,GAAG,qBAAqB;AAAA,EACpD;AAAA,EACA,SAAS;AAAA,IACP,CAAC,yBAAyB,GAAG,qBAAqB,OAAO;AAAA,EAC3D;AACF;AAEA,IAAM,0BAA0B,kBAAkB;AAAA,EAChD,cAAc,CAAC,0BAA0B,EAAE;AAC7C,CAAC;AAEM,SAAS,8BACd,SACyB;AACzB,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,33 @@
1
+ import {
2
+ normalizeIssueManagerNodeState
3
+ } from "./chunk-POBWWUUQ.js";
4
+
5
+ // src/react/IssueManagerNode.tsx
6
+ import { jsx } from "react/jsx-runtime";
7
+ function IssueManagerNode({
8
+ feature,
9
+ nodeId,
10
+ state,
11
+ workspaceId
12
+ }) {
13
+ const normalizedState = normalizeIssueManagerNodeState(state);
14
+ return /* @__PURE__ */ jsx(
15
+ "section",
16
+ {
17
+ "aria-label": feature.i18n.t("title"),
18
+ className: "flex h-full min-h-0 w-full min-w-0 text-foreground",
19
+ "data-issue-manager-node-id": nodeId,
20
+ "data-issue-manager-workspace-id": workspaceId,
21
+ children: /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center justify-center p-4 text-center text-[13px] text-muted-foreground", children: normalizedState.selectedIssueId ?? feature.i18n.t("emptyState") })
22
+ }
23
+ );
24
+ }
25
+ function IssueManagerNodeHeader() {
26
+ return null;
27
+ }
28
+
29
+ export {
30
+ IssueManagerNode,
31
+ IssueManagerNodeHeader
32
+ };
33
+ //# sourceMappingURL=chunk-HMMAMS4Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/IssueManagerNode.tsx"],"sourcesContent":["import type { JSX } from \"react\";\nimport type { IssueManagerNodeState } from \"../contracts/index.ts\";\nimport {\n normalizeIssueManagerNodeState,\n type IssueManagerFeature\n} from \"../core/index.ts\";\n\nexport interface IssueManagerNodeProps {\n feature: IssueManagerFeature;\n nodeId: string;\n onStateChange?: (state: IssueManagerNodeState) => void;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport function IssueManagerNode({\n feature,\n nodeId,\n state,\n workspaceId\n}: IssueManagerNodeProps): JSX.Element {\n const normalizedState = normalizeIssueManagerNodeState(state);\n return (\n <section\n aria-label={feature.i18n.t(\"title\")}\n className=\"flex h-full min-h-0 w-full min-w-0 text-foreground\"\n data-issue-manager-node-id={nodeId}\n data-issue-manager-workspace-id={workspaceId}\n >\n <div className=\"flex min-w-0 flex-1 items-center justify-center p-4 text-center text-[13px] text-muted-foreground\">\n {normalizedState.selectedIssueId ?? feature.i18n.t(\"emptyState\")}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerNodeHeader(): JSX.Element | null {\n return null;\n}\n"],"mappings":";;;;;AA6BM;AAdC,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,kBAAkB,+BAA+B,KAAK;AAC5D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,QAAQ,KAAK,EAAE,OAAO;AAAA,MAClC,WAAU;AAAA,MACV,8BAA4B;AAAA,MAC5B,mCAAiC;AAAA,MAEjC,8BAAC,SAAI,WAAU,qGACZ,0BAAgB,mBAAmB,QAAQ,KAAK,EAAE,YAAY,GACjE;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,yBAA6C;AAC3D,SAAO;AACT;","names":[]}
@@ -0,0 +1,44 @@
1
+ import {
2
+ createIssueManagerI18nRuntime
3
+ } from "./chunk-CSDFXQBD.js";
4
+
5
+ // src/core/feature.ts
6
+ var defaultIssueManagerNodeState = {
7
+ issueSearchQuery: "",
8
+ issueStatusFilter: "all",
9
+ selectedAgentProvider: "codex",
10
+ selectedIssueId: null,
11
+ selectedTaskId: null
12
+ };
13
+ function createIssueManagerFeature(input) {
14
+ return {
15
+ agentRunner: input.agentRunner,
16
+ backend: input.backend,
17
+ fileAdapter: input.fileAdapter,
18
+ i18n: createIssueManagerI18nRuntime(input.i18n),
19
+ identityAdapter: input.identityAdapter,
20
+ shareAdapter: input.shareAdapter
21
+ };
22
+ }
23
+ function normalizeIssueManagerNodeState(state) {
24
+ return {
25
+ ...defaultIssueManagerNodeState,
26
+ ...state,
27
+ issueSearchQuery: state?.issueSearchQuery?.trim() ?? "",
28
+ issueStatusFilter: state?.issueStatusFilter ?? "all",
29
+ selectedAgentProvider: state?.selectedAgentProvider?.trim() || "codex",
30
+ selectedIssueId: normalizeNullableString(state?.selectedIssueId),
31
+ selectedTaskId: normalizeNullableString(state?.selectedTaskId)
32
+ };
33
+ }
34
+ function normalizeNullableString(value) {
35
+ const trimmed = value?.trim() ?? "";
36
+ return trimmed.length > 0 ? trimmed : null;
37
+ }
38
+
39
+ export {
40
+ defaultIssueManagerNodeState,
41
+ createIssueManagerFeature,
42
+ normalizeIssueManagerNodeState
43
+ };
44
+ //# sourceMappingURL=chunk-POBWWUUQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/feature.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"],"mappings":";;;;;AAgCO,IAAM,+BAAsD;AAAA,EACjE,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,gBAAgB;AAClB;AAEO,SAAS,0BACd,OACqB;AACrB,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,SAAS,MAAM;AAAA,IACf,aAAa,MAAM;AAAA,IACnB,MAAM,8BAA8B,MAAM,IAAI;AAAA,IAC9C,iBAAiB,MAAM;AAAA,IACvB,cAAc,MAAM;AAAA,EACtB;AACF;AAEO,SAAS,+BACd,OACuB;AACvB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,kBAAkB,OAAO,kBAAkB,KAAK,KAAK;AAAA,IACrD,mBAAmB,OAAO,qBAAqB;AAAA,IAC/C,uBAAuB,OAAO,uBAAuB,KAAK,KAAK;AAAA,IAC/D,iBAAiB,wBAAwB,OAAO,eAAe;AAAA,IAC/D,gBAAgB,wBAAwB,OAAO,cAAc;AAAA,EAC/D;AACF;AAEA,SAAS,wBACP,OACe;AACf,QAAM,UAAU,OAAO,KAAK,KAAK;AACjC,SAAO,QAAQ,SAAS,IAAI,UAAU;AACxC;","names":[]}
@@ -0,0 +1,312 @@
1
+ type IssueManagerStatus = "not_started" | "running" | "pending_acceptance" | "completed" | "failed" | "canceled" | (string & {});
2
+ type IssueManagerPriority = "high" | "medium" | "low" | (string & {});
3
+ type IssueManagerContextRefParentKind = "issue" | "task";
4
+ interface IssueManagerScope {
5
+ workspaceId: string;
6
+ }
7
+ interface IssueManagerStatusCounts {
8
+ all: number;
9
+ notStarted: number;
10
+ running: number;
11
+ pendingAcceptance: number;
12
+ completed: number;
13
+ failed: number;
14
+ canceled: number;
15
+ }
16
+ interface IssueManagerIssueSummary {
17
+ issueId: string;
18
+ workspaceId: string;
19
+ title: string;
20
+ content?: string;
21
+ status: IssueManagerStatus;
22
+ taskCount?: number;
23
+ notStartedCount?: number;
24
+ runningCount?: number;
25
+ pendingAcceptanceCount?: number;
26
+ completedCount?: number;
27
+ failedCount?: number;
28
+ canceledCount?: number;
29
+ creatorUserId: string;
30
+ creatorDisplayName?: string;
31
+ creatorAvatarUrl?: string;
32
+ createdAtUnix?: number;
33
+ updatedAtUnix?: number;
34
+ }
35
+ interface IssueManagerTaskSummary {
36
+ taskId: string;
37
+ issueId: string;
38
+ workspaceId: string;
39
+ title: string;
40
+ content?: string;
41
+ status: IssueManagerStatus;
42
+ priority: IssueManagerPriority;
43
+ sortIndex?: number;
44
+ dueAtUnix?: number;
45
+ creatorUserId: string;
46
+ creatorDisplayName?: string;
47
+ creatorAvatarUrl?: string;
48
+ latestRunId?: string;
49
+ createdAtUnix?: number;
50
+ updatedAtUnix?: number;
51
+ }
52
+ interface IssueManagerRun {
53
+ runId: string;
54
+ taskId: string;
55
+ issueId: string;
56
+ workspaceId: string;
57
+ requesterUserId: string;
58
+ agentUserId: string;
59
+ agentSessionId?: string;
60
+ agentProvider: string;
61
+ status: IssueManagerStatus;
62
+ summary?: string;
63
+ errorMessage?: string;
64
+ outputDir?: string;
65
+ createdAtUnix?: number;
66
+ startedAtUnix?: number;
67
+ completedAtUnix?: number;
68
+ updatedAtUnix?: number;
69
+ }
70
+ interface IssueManagerRunOutput {
71
+ outputId: string;
72
+ runId: string;
73
+ taskId: string;
74
+ issueId: string;
75
+ workspaceId: string;
76
+ path: string;
77
+ displayName: string;
78
+ mediaType?: string;
79
+ sizeBytes?: number;
80
+ createdAtUnix?: number;
81
+ }
82
+ interface IssueManagerContextRefBase {
83
+ contextRefId: string;
84
+ workspaceId: string;
85
+ issueId: string;
86
+ refType: string;
87
+ path: string;
88
+ displayName: string;
89
+ createdAtUnix?: number;
90
+ }
91
+ interface IssueManagerIssueContextRef extends IssueManagerContextRefBase {
92
+ parentKind: "issue";
93
+ }
94
+ interface IssueManagerTaskContextRef extends IssueManagerContextRefBase {
95
+ parentKind: "task";
96
+ taskId: string;
97
+ }
98
+ type IssueManagerContextRef = IssueManagerIssueContextRef | IssueManagerTaskContextRef;
99
+ interface IssueManagerIssueDetail {
100
+ issue: IssueManagerIssueSummary;
101
+ tasks: IssueManagerTaskSummary[];
102
+ contextRefs: IssueManagerContextRef[];
103
+ }
104
+ interface IssueManagerTaskDetail {
105
+ task: IssueManagerTaskSummary;
106
+ contextRefs: IssueManagerContextRef[];
107
+ latestRun?: IssueManagerRun | null;
108
+ recentRuns: IssueManagerRun[];
109
+ latestOutputs: IssueManagerRunOutput[];
110
+ }
111
+ interface IssueManagerListIssuesInput extends IssueManagerScope {
112
+ pageSize?: number;
113
+ pageToken?: string;
114
+ searchQuery?: string;
115
+ statusFilter?: IssueManagerStatus | "all";
116
+ }
117
+ interface IssueManagerListIssuesResult {
118
+ issues: IssueManagerIssueSummary[];
119
+ nextPageToken?: string;
120
+ statusCounts?: IssueManagerStatusCounts;
121
+ totalCount?: number;
122
+ }
123
+ interface IssueManagerListTasksInput extends IssueManagerScope {
124
+ issueId: string;
125
+ pageSize?: number;
126
+ pageToken?: string;
127
+ searchQuery?: string;
128
+ statusFilter?: IssueManagerStatus | "all";
129
+ }
130
+ interface IssueManagerListTasksResult {
131
+ nextPageToken?: string;
132
+ statusCounts?: IssueManagerStatusCounts;
133
+ tasks: IssueManagerTaskSummary[];
134
+ totalCount?: number;
135
+ }
136
+ interface IssueManagerCreateIssueInput extends IssueManagerScope {
137
+ content?: string;
138
+ issueId?: string;
139
+ title: string;
140
+ }
141
+ interface IssueManagerUpdateIssueInput extends IssueManagerScope {
142
+ content?: string;
143
+ issueId: string;
144
+ title?: string;
145
+ }
146
+ interface IssueManagerCreateTaskInput extends IssueManagerScope {
147
+ content?: string;
148
+ dueAtUnix?: number;
149
+ issueId: string;
150
+ priority?: IssueManagerPriority;
151
+ taskId?: string;
152
+ title: string;
153
+ }
154
+ interface IssueManagerUpdateTaskInput extends IssueManagerScope {
155
+ content?: string;
156
+ dueAtUnix?: number;
157
+ issueId: string;
158
+ priority?: IssueManagerPriority;
159
+ status?: IssueManagerStatus;
160
+ taskId: string;
161
+ title?: string;
162
+ }
163
+ interface IssueManagerAddContextRefInput {
164
+ displayName?: string;
165
+ path: string;
166
+ refType: string;
167
+ }
168
+ interface IssueManagerAddContextRefsInputBase extends IssueManagerScope {
169
+ issueId: string;
170
+ refs: IssueManagerAddContextRefInput[];
171
+ }
172
+ type IssueManagerAddContextRefsInput = (IssueManagerAddContextRefsInputBase & {
173
+ parentKind: "issue";
174
+ }) | (IssueManagerAddContextRefsInputBase & {
175
+ parentKind: "task";
176
+ taskId: string;
177
+ });
178
+ interface IssueManagerCreateRunInput extends IssueManagerScope {
179
+ agentProvider: string;
180
+ agentSessionId?: string;
181
+ agentUserId?: string;
182
+ issueId: string;
183
+ runId?: string;
184
+ taskId: string;
185
+ }
186
+ interface IssueManagerCompleteRunOutputInput {
187
+ displayName?: string;
188
+ mediaType?: string;
189
+ outputId?: string;
190
+ path: string;
191
+ sizeBytes?: number;
192
+ }
193
+ type IssueManagerRunCompletionStatus = Extract<IssueManagerStatus, "completed" | "failed" | "canceled">;
194
+ interface IssueManagerCompleteRunInput extends IssueManagerScope {
195
+ errorMessage?: string;
196
+ issueId: string;
197
+ outputs: IssueManagerCompleteRunOutputInput[];
198
+ runId: string;
199
+ status: IssueManagerRunCompletionStatus;
200
+ summary?: string;
201
+ taskId: string;
202
+ }
203
+ interface IssueManagerRunEnvelope {
204
+ outputs: IssueManagerRunOutput[];
205
+ run: IssueManagerRun;
206
+ }
207
+ interface IssueManagerBackend {
208
+ addContextRefs(input: IssueManagerAddContextRefsInput): Promise<IssueManagerContextRef[]>;
209
+ completeRun(input: IssueManagerCompleteRunInput): Promise<IssueManagerRunEnvelope>;
210
+ createIssue(input: IssueManagerCreateIssueInput): Promise<IssueManagerIssueSummary>;
211
+ createRun(input: IssueManagerCreateRunInput): Promise<IssueManagerRun>;
212
+ createTask(input: IssueManagerCreateTaskInput): Promise<IssueManagerTaskSummary>;
213
+ deleteIssue(input: IssueManagerScope & {
214
+ issueId: string;
215
+ }): Promise<{
216
+ removed: boolean;
217
+ }>;
218
+ deleteTask(input: IssueManagerScope & {
219
+ issueId: string;
220
+ taskId: string;
221
+ }): Promise<{
222
+ removed: boolean;
223
+ }>;
224
+ getIssueDetail(input: IssueManagerScope & {
225
+ issueId: string;
226
+ }): Promise<IssueManagerIssueDetail>;
227
+ getTaskDetail(input: IssueManagerScope & {
228
+ issueId: string;
229
+ taskId: string;
230
+ }): Promise<IssueManagerTaskDetail>;
231
+ listIssues(input: IssueManagerListIssuesInput): Promise<IssueManagerListIssuesResult>;
232
+ listTasks(input: IssueManagerListTasksInput): Promise<IssueManagerListTasksResult>;
233
+ removeContextRef(input: IssueManagerRemoveContextRefInput): Promise<{
234
+ removed: boolean;
235
+ }>;
236
+ updateIssue(input: IssueManagerUpdateIssueInput): Promise<IssueManagerIssueSummary>;
237
+ updateTask(input: IssueManagerUpdateTaskInput): Promise<IssueManagerTaskSummary>;
238
+ }
239
+ type IssueManagerRemoveContextRefInput = (IssueManagerScope & {
240
+ contextRefId: string;
241
+ issueId: string;
242
+ parentKind: "issue";
243
+ }) | (IssueManagerScope & {
244
+ contextRefId: string;
245
+ issueId: string;
246
+ parentKind: "task";
247
+ taskId: string;
248
+ });
249
+ interface IssueManagerIdentityProfile {
250
+ avatarUrl?: string | null;
251
+ displayName?: string | null;
252
+ userId: string;
253
+ }
254
+ interface IssueManagerIdentityAdapter {
255
+ currentUser(): IssueManagerIdentityProfile | null | Promise<IssueManagerIdentityProfile | null>;
256
+ getProfiles?(userIds: readonly string[]): Promise<Record<string, IssueManagerIdentityProfile>>;
257
+ }
258
+ interface IssueManagerFileReference {
259
+ displayName?: string;
260
+ kind: "file" | "folder" | (string & {});
261
+ path: string;
262
+ }
263
+ interface IssueManagerFileAdapter {
264
+ openReference?(reference: IssueManagerFileReference): Promise<void> | void;
265
+ refreshTree?(input: IssueManagerScope & {
266
+ depth?: number;
267
+ paths?: readonly string[];
268
+ }): Promise<void>;
269
+ requestReferences?(input: IssueManagerScope): Promise<IssueManagerFileReference[]>;
270
+ requestUpload?(input: IssueManagerScope & {
271
+ mode: "files" | "folder";
272
+ targetDirectoryPath: string;
273
+ }): Promise<IssueManagerFileReference[]>;
274
+ }
275
+ interface IssueManagerAgentRunRequest extends IssueManagerScope {
276
+ issue: IssueManagerIssueSummary;
277
+ provider: string;
278
+ run: IssueManagerRun;
279
+ task: IssueManagerTaskSummary;
280
+ }
281
+ interface IssueManagerAgentRunResult {
282
+ errorMessage?: string;
283
+ outputs?: IssueManagerCompleteRunOutputInput[];
284
+ sessionId?: string;
285
+ status: "completed" | "failed" | "canceled";
286
+ summary?: string;
287
+ }
288
+ interface IssueManagerAgentRunner {
289
+ runTask(input: IssueManagerAgentRunRequest): Promise<IssueManagerAgentRunResult>;
290
+ }
291
+ interface IssueManagerShareAdapter {
292
+ createIssueLink?(input: IssueManagerScope & {
293
+ issueId: string;
294
+ taskId?: string;
295
+ }): Promise<string>;
296
+ }
297
+ interface IssueManagerNodeState {
298
+ issueDraftContent?: string | null;
299
+ issueDraftTitle?: string | null;
300
+ issueListNextPageToken?: string | null;
301
+ issueSearchQuery: string;
302
+ issueStatusFilter: IssueManagerStatus | "all";
303
+ selectedAgentProvider: string;
304
+ selectedIssueId: string | null;
305
+ selectedTaskId: string | null;
306
+ taskDraftContent?: string | null;
307
+ taskDraftTitle?: string | null;
308
+ taskListCollapsed?: boolean | null;
309
+ taskListNextPageToken?: string | null;
310
+ }
311
+
312
+ export type { IssueManagerAddContextRefInput, IssueManagerAddContextRefsInput, IssueManagerAgentRunRequest, IssueManagerAgentRunResult, IssueManagerAgentRunner, IssueManagerBackend, IssueManagerCompleteRunInput, IssueManagerCompleteRunOutputInput, IssueManagerContextRef, IssueManagerContextRefParentKind, IssueManagerCreateIssueInput, IssueManagerCreateRunInput, IssueManagerCreateTaskInput, IssueManagerFileAdapter, 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 };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,18 @@
1
+ import * as _nextop_os_ui_i18n_runtime from '@nextop-os/ui-i18n-runtime';
2
+ import { I18nRuntime, I18nDictionary } from '@nextop-os/ui-i18n-runtime';
3
+
4
+ declare const issueManagerI18nNamespace = "issueManager";
5
+ declare const issueManagerI18nModule: _nextop_os_ui_i18n_runtime.ScopedLocaleObjectsI18nModuleManifest;
6
+ type IssueManagerI18nKey = "dockLabel" | "emptyState" | "status.canceled" | "status.completed" | "status.failed" | "status.notStarted" | "status.pendingAcceptance" | "status.running" | "status.unknown" | "title";
7
+ type IssueManagerI18nRuntime = I18nRuntime<IssueManagerI18nKey>;
8
+ declare const issueManagerI18nResources: {
9
+ readonly en: {
10
+ readonly issueManager: I18nDictionary;
11
+ };
12
+ readonly "zh-CN": {
13
+ readonly issueManager: I18nDictionary;
14
+ };
15
+ };
16
+ declare function createIssueManagerI18nRuntime(runtime: I18nRuntime<string> | undefined): IssueManagerI18nRuntime;
17
+
18
+ export { type IssueManagerI18nKey, type IssueManagerI18nRuntime, createIssueManagerI18nRuntime, issueManagerI18nModule, issueManagerI18nNamespace, issueManagerI18nResources };
@@ -0,0 +1,13 @@
1
+ import {
2
+ createIssueManagerI18nRuntime,
3
+ issueManagerI18nModule,
4
+ issueManagerI18nNamespace,
5
+ issueManagerI18nResources
6
+ } from "../chunk-CSDFXQBD.js";
7
+ export {
8
+ createIssueManagerI18nRuntime,
9
+ issueManagerI18nModule,
10
+ issueManagerI18nNamespace,
11
+ issueManagerI18nResources
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,25 @@
1
+ import { I18nRuntime } from '@nextop-os/ui-i18n-runtime';
2
+ import { IssueManagerI18nRuntime } from './i18n/index.js';
3
+ import { IssueManagerAgentRunner, IssueManagerBackend, IssueManagerFileAdapter, IssueManagerIdentityAdapter, IssueManagerShareAdapter, IssueManagerNodeState } from './contracts/index.js';
4
+
5
+ interface IssueManagerFeature {
6
+ agentRunner: IssueManagerAgentRunner;
7
+ backend: IssueManagerBackend;
8
+ fileAdapter?: IssueManagerFileAdapter;
9
+ i18n: IssueManagerI18nRuntime;
10
+ identityAdapter: IssueManagerIdentityAdapter;
11
+ shareAdapter?: IssueManagerShareAdapter;
12
+ }
13
+ interface CreateIssueManagerFeatureInput {
14
+ agentRunner: IssueManagerAgentRunner;
15
+ backend: IssueManagerBackend;
16
+ fileAdapter?: IssueManagerFileAdapter;
17
+ i18n?: I18nRuntime<string>;
18
+ identityAdapter: IssueManagerIdentityAdapter;
19
+ shareAdapter?: IssueManagerShareAdapter;
20
+ }
21
+ declare const defaultIssueManagerNodeState: IssueManagerNodeState;
22
+ declare function createIssueManagerFeature(input: CreateIssueManagerFeatureInput): IssueManagerFeature;
23
+ declare function normalizeIssueManagerNodeState(state: Partial<IssueManagerNodeState> | null | undefined): IssueManagerNodeState;
24
+
25
+ export { type CreateIssueManagerFeatureInput, type IssueManagerFeature, createIssueManagerFeature, defaultIssueManagerNodeState, normalizeIssueManagerNodeState };
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import {
2
+ createIssueManagerFeature,
3
+ defaultIssueManagerNodeState,
4
+ normalizeIssueManagerNodeState
5
+ } from "./chunk-POBWWUUQ.js";
6
+ import "./chunk-CSDFXQBD.js";
7
+ export {
8
+ createIssueManagerFeature,
9
+ defaultIssueManagerNodeState,
10
+ normalizeIssueManagerNodeState
11
+ };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,17 @@
1
+ import { JSX } from 'react';
2
+ import { IssueManagerNodeState } from '../contracts/index.js';
3
+ import { IssueManagerFeature } from '../index.js';
4
+ import '@nextop-os/ui-i18n-runtime';
5
+ import '../i18n/index.js';
6
+
7
+ interface IssueManagerNodeProps {
8
+ feature: IssueManagerFeature;
9
+ nodeId: string;
10
+ onStateChange?: (state: IssueManagerNodeState) => void;
11
+ state?: Partial<IssueManagerNodeState> | null;
12
+ workspaceId: string;
13
+ }
14
+ declare function IssueManagerNode({ feature, nodeId, state, workspaceId }: IssueManagerNodeProps): JSX.Element;
15
+ declare function IssueManagerNodeHeader(): JSX.Element | null;
16
+
17
+ export { IssueManagerNode, IssueManagerNodeHeader, type IssueManagerNodeProps };
@@ -0,0 +1,11 @@
1
+ import {
2
+ IssueManagerNode,
3
+ IssueManagerNodeHeader
4
+ } from "../chunk-HMMAMS4Z.js";
5
+ import "../chunk-POBWWUUQ.js";
6
+ import "../chunk-CSDFXQBD.js";
7
+ export {
8
+ IssueManagerNode,
9
+ IssueManagerNodeHeader
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,35 @@
1
+ import { ReactNode } from 'react';
2
+ import { WorkbenchFrame, WorkbenchHostDockEntry, WorkbenchHostLaunchRequest, WorkbenchHostLaunchResult, WorkbenchHostNodeDefinition } from '@nextop-os/workbench-surface';
3
+ import { IssueManagerNodeState } from '../contracts/index.js';
4
+ import { IssueManagerFeature } from '../index.js';
5
+ import '@nextop-os/ui-i18n-runtime';
6
+ import '../i18n/index.js';
7
+
8
+ interface IssueManagerExternalWorkspaceState {
9
+ workspaceId?: string | null;
10
+ }
11
+ interface CreateIssueManagerWorkbenchNodeDefinitionInput {
12
+ feature: IssueManagerFeature;
13
+ frame?: WorkbenchFrame;
14
+ title?: string;
15
+ typeId?: string;
16
+ }
17
+ interface CreateIssueManagerWorkbenchLaunchHandlerInput {
18
+ frame?: WorkbenchFrame;
19
+ title?: string;
20
+ typeId?: string;
21
+ }
22
+ interface CreateIssueManagerDockEntryInput {
23
+ dockIcon?: ReactNode;
24
+ feature: IssueManagerFeature;
25
+ id?: string;
26
+ order?: number;
27
+ sectionId?: string;
28
+ typeId?: string;
29
+ }
30
+ declare const defaultIssueManagerWorkbenchTypeId = "issue-manager";
31
+ declare function createIssueManagerWorkbenchNodeDefinition<TExternalWorkspaceState extends IssueManagerExternalWorkspaceState = IssueManagerExternalWorkspaceState>({ feature, frame, title, typeId }: CreateIssueManagerWorkbenchNodeDefinitionInput): WorkbenchHostNodeDefinition<Partial<IssueManagerNodeState> | null, TExternalWorkspaceState>;
32
+ declare function createIssueManagerDockEntry({ dockIcon, feature, id, order, sectionId, typeId }: CreateIssueManagerDockEntryInput): WorkbenchHostDockEntry;
33
+ declare function createIssueManagerWorkbenchLaunchHandler({ frame, title, typeId }?: CreateIssueManagerWorkbenchLaunchHandlerInput): (request: WorkbenchHostLaunchRequest) => Promise<WorkbenchHostLaunchResult | null>;
34
+
35
+ export { type CreateIssueManagerDockEntryInput, type CreateIssueManagerWorkbenchLaunchHandlerInput, type CreateIssueManagerWorkbenchNodeDefinitionInput, type IssueManagerExternalWorkspaceState, createIssueManagerDockEntry, createIssueManagerWorkbenchLaunchHandler, createIssueManagerWorkbenchNodeDefinition, defaultIssueManagerWorkbenchTypeId };