@shipfox/client-workflows 15.0.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/preview.css +4 -0
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-type.log +1 -0
- package/CHANGELOG.md +41 -0
- package/dist/components/identifier/identifier.js +2 -2
- package/dist/components/identifier/identifier.js.map +1 -1
- package/dist/components/job-detail/agent-config-failure-callout.d.ts.map +1 -1
- package/dist/components/job-detail/agent-config-failure-callout.js +1 -1
- package/dist/components/job-detail/agent-config-failure-callout.js.map +1 -1
- package/dist/components/job-detail/job-context-panel.d.ts +6 -0
- package/dist/components/job-detail/job-context-panel.d.ts.map +1 -0
- package/dist/components/job-detail/job-context-panel.js +224 -0
- package/dist/components/job-detail/job-context-panel.js.map +1 -0
- package/dist/components/job-detail/job-detail-header.d.ts +10 -1
- package/dist/components/job-detail/job-detail-header.d.ts.map +1 -1
- package/dist/components/job-detail/job-detail-header.js +58 -39
- package/dist/components/job-detail/job-detail-header.js.map +1 -1
- package/dist/components/job-detail/job-detail-view.d.ts +1 -1
- package/dist/components/job-detail/job-detail-view.d.ts.map +1 -1
- package/dist/components/job-detail/job-detail-view.js +92 -41
- package/dist/components/job-detail/job-detail-view.js.map +1 -1
- package/dist/components/job-detail/job-empty-states.d.ts.map +1 -1
- package/dist/components/job-detail/job-empty-states.js +19 -10
- package/dist/components/job-detail/job-empty-states.js.map +1 -1
- package/dist/components/job-detail/job-execution-switcher.js +4 -4
- package/dist/components/job-detail/job-execution-switcher.js.map +1 -1
- package/dist/components/job-detail/json-code.d.ts +14 -0
- package/dist/components/job-detail/json-code.d.ts.map +1 -0
- package/dist/components/job-detail/json-code.js +93 -0
- package/dist/components/job-detail/json-code.js.map +1 -0
- package/dist/components/job-detail/step-attempt-log-panel.d.ts.map +1 -1
- package/dist/components/job-detail/step-attempt-log-panel.js +9 -6
- package/dist/components/job-detail/step-attempt-log-panel.js.map +1 -1
- package/dist/components/job-detail/step-troubleshooting.d.ts +18 -0
- package/dist/components/job-detail/step-troubleshooting.d.ts.map +1 -0
- package/dist/components/job-detail/step-troubleshooting.js +493 -0
- package/dist/components/job-detail/step-troubleshooting.js.map +1 -0
- package/dist/components/job-graph/job-graph-content.d.ts.map +1 -1
- package/dist/components/job-graph/job-graph-content.js +5 -4
- package/dist/components/job-graph/job-graph-content.js.map +1 -1
- package/dist/components/job-graph/job-node.js +3 -3
- package/dist/components/job-graph/job-node.js.map +1 -1
- package/dist/components/step-list/index.d.ts +1 -0
- package/dist/components/step-list/index.d.ts.map +1 -1
- package/dist/components/step-list/index.js.map +1 -1
- package/dist/components/step-list/step-list-model.d.ts.map +1 -1
- package/dist/components/step-list/step-list-model.js +5 -0
- package/dist/components/step-list/step-list-model.js.map +1 -1
- package/dist/components/step-list/step-list.d.ts +5 -1
- package/dist/components/step-list/step-list.d.ts.map +1 -1
- package/dist/components/step-list/step-list.js +117 -82
- package/dist/components/step-list/step-list.js.map +1 -1
- package/dist/components/workflow-run-duration-label.js +1 -1
- package/dist/components/workflow-run-duration-label.js.map +1 -1
- package/dist/components/workflow-run-list/job-status-strip.js +6 -6
- package/dist/components/workflow-run-list/job-status-strip.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-filter-menu.js +1 -1
- package/dist/components/workflow-run-list/workflow-run-filter-menu.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-filters.js +4 -4
- package/dist/components/workflow-run-list/workflow-run-filters.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-list-states.js +6 -6
- package/dist/components/workflow-run-list/workflow-run-list-states.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-list-view.js +1 -1
- package/dist/components/workflow-run-list/workflow-run-list-view.js.map +1 -1
- package/dist/components/workflow-run-list/workflow-run-row.js +7 -7
- package/dist/components/workflow-run-list/workflow-run-row.js.map +1 -1
- package/dist/components/workflow-run-summary/workflow-run-attempt-switcher.js +1 -1
- package/dist/components/workflow-run-summary/workflow-run-attempt-switcher.js.map +1 -1
- package/dist/components/workflow-run-summary/workflow-run-summary.d.ts +0 -1
- package/dist/components/workflow-run-summary/workflow-run-summary.d.ts.map +1 -1
- package/dist/components/workflow-run-summary/workflow-run-summary.js +9 -13
- package/dist/components/workflow-run-summary/workflow-run-summary.js.map +1 -1
- package/dist/components/workflow-run-tabs/index.d.ts +3 -0
- package/dist/components/workflow-run-tabs/index.d.ts.map +1 -1
- package/dist/components/workflow-run-tabs/index.js +3 -0
- package/dist/components/workflow-run-tabs/index.js.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-count-chip.d.ts +16 -0
- package/dist/components/workflow-run-tabs/run-annotation-count-chip.d.ts.map +1 -0
- package/dist/components/workflow-run-tabs/run-annotation-count-chip.js +50 -0
- package/dist/components/workflow-run-tabs/run-annotation-count-chip.js.map +1 -0
- package/dist/components/workflow-run-tabs/run-annotation-item.d.ts +20 -0
- package/dist/components/workflow-run-tabs/run-annotation-item.d.ts.map +1 -0
- package/dist/components/workflow-run-tabs/run-annotation-item.js +102 -0
- package/dist/components/workflow-run-tabs/run-annotation-item.js.map +1 -0
- package/dist/components/workflow-run-tabs/run-annotation-list.d.ts +39 -0
- package/dist/components/workflow-run-tabs/run-annotation-list.d.ts.map +1 -0
- package/dist/components/workflow-run-tabs/run-annotation-list.js +211 -0
- package/dist/components/workflow-run-tabs/run-annotation-list.js.map +1 -0
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.d.ts +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.d.ts.map +1 -1
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.js +90 -25
- package/dist/components/workflow-run-tabs/run-annotation-summary-line.js.map +1 -1
- package/dist/components/workflow-run-tabs/severity-visuals.d.ts +20 -0
- package/dist/components/workflow-run-tabs/severity-visuals.d.ts.map +1 -0
- package/dist/components/workflow-run-tabs/severity-visuals.js +31 -0
- package/dist/components/workflow-run-tabs/severity-visuals.js.map +1 -0
- package/dist/components/workflow-run-view/run-workspace-nav.d.ts +1 -1
- package/dist/components/workflow-run-view/run-workspace-nav.d.ts.map +1 -1
- package/dist/components/workflow-run-view/run-workspace-nav.js +16 -10
- package/dist/components/workflow-run-view/run-workspace-nav.js.map +1 -1
- package/dist/components/workflow-run-view/workflow-run-states.js +6 -6
- package/dist/components/workflow-run-view/workflow-run-states.js.map +1 -1
- package/dist/components/workflow-run-view/workflow-run-view.d.ts +1 -3
- package/dist/components/workflow-run-view/workflow-run-view.d.ts.map +1 -1
- package/dist/components/workflow-run-view/workflow-run-view.js +217 -59
- package/dist/components/workflow-run-view/workflow-run-view.js.map +1 -1
- package/dist/core/entities/job-execution.d.ts +7 -0
- package/dist/core/entities/job-execution.d.ts.map +1 -1
- package/dist/core/entities/job-execution.js.map +1 -1
- package/dist/core/entities/job.d.ts +9 -0
- package/dist/core/entities/job.d.ts.map +1 -1
- package/dist/core/entities/job.js.map +1 -1
- package/dist/core/entities/step-attempt.d.ts +29 -0
- package/dist/core/entities/step-attempt.d.ts.map +1 -1
- package/dist/core/entities/step-attempt.js.map +1 -1
- package/dist/core/entities/step.d.ts +3 -1
- package/dist/core/entities/step.d.ts.map +1 -1
- package/dist/core/entities/step.js.map +1 -1
- package/dist/core/run-annotation.d.ts +79 -0
- package/dist/core/run-annotation.d.ts.map +1 -0
- package/dist/core/run-annotation.js +125 -0
- package/dist/core/run-annotation.js.map +1 -0
- package/dist/core/workflow-run.d.ts +1 -1
- package/dist/core/workflow-run.d.ts.map +1 -1
- package/dist/core/workflow-run.js.map +1 -1
- package/dist/hooks/api/annotations.d.ts +63 -0
- package/dist/hooks/api/annotations.d.ts.map +1 -0
- package/dist/hooks/api/annotations.js +145 -0
- package/dist/hooks/api/annotations.js.map +1 -0
- package/dist/hooks/api/run-annotation-mapper.d.ts +10 -0
- package/dist/hooks/api/run-annotation-mapper.d.ts.map +1 -0
- package/dist/hooks/api/run-annotation-mapper.js +22 -0
- package/dist/hooks/api/run-annotation-mapper.js.map +1 -0
- package/dist/hooks/api/run-annotations.d.ts +25 -0
- package/dist/hooks/api/run-annotations.d.ts.map +1 -0
- package/dist/hooks/api/run-annotations.js +78 -0
- package/dist/hooks/api/run-annotations.js.map +1 -0
- package/dist/hooks/api/step-attempt-detail.d.ts +14 -0
- package/dist/hooks/api/step-attempt-detail.d.ts.map +1 -0
- package/dist/hooks/api/step-attempt-detail.js +43 -0
- package/dist/hooks/api/step-attempt-detail.js.map +1 -0
- package/dist/hooks/api/workflow-run-mapper.d.ts +9 -2
- package/dist/hooks/api/workflow-run-mapper.d.ts.map +1 -1
- package/dist/hooks/api/workflow-run-mapper.js +47 -0
- package/dist/hooks/api/workflow-run-mapper.js.map +1 -1
- package/dist/pages/project-workflows-page.js +19 -19
- package/dist/pages/project-workflows-page.js.map +1 -1
- package/dist/pages/workflow-run-list-page.js +1 -1
- package/dist/pages/workflow-run-list-page.js.map +1 -1
- package/dist/routes/inputs.d.ts +7 -2
- package/dist/routes/inputs.d.ts.map +1 -1
- package/dist/routes/inputs.js +5 -6
- package/dist/routes/inputs.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +10 -9
- package/src/components/identifier/identifier.tsx +2 -2
- package/src/components/job-detail/agent-config-failure-callout.tsx +5 -1
- package/src/components/job-detail/job-context-panel.test.tsx +72 -0
- package/src/components/job-detail/job-context-panel.tsx +237 -0
- package/src/components/job-detail/job-detail-header.test.tsx +3 -0
- package/src/components/job-detail/job-detail-header.tsx +65 -34
- package/src/components/job-detail/job-detail-view.stories.tsx +555 -48
- package/src/components/job-detail/job-detail-view.tsx +101 -42
- package/src/components/job-detail/job-empty-states.tsx +23 -10
- package/src/components/job-detail/job-execution-switcher.tsx +5 -5
- package/src/components/job-detail/json-code.tsx +120 -0
- package/src/components/job-detail/step-attempt-log-panel.test.tsx +1 -0
- package/src/components/job-detail/step-attempt-log-panel.tsx +17 -6
- package/src/components/job-detail/step-troubleshooting.stories.tsx +120 -0
- package/src/components/job-detail/step-troubleshooting.test.tsx +337 -0
- package/src/components/job-detail/step-troubleshooting.tsx +537 -0
- package/src/components/job-graph/job-graph-content.tsx +4 -3
- package/src/components/job-graph/job-node.tsx +3 -3
- package/src/components/step-list/index.ts +1 -0
- package/src/components/step-list/step-list-model.ts +5 -0
- package/src/components/step-list/step-list.test.tsx +75 -2
- package/src/components/step-list/step-list.tsx +73 -20
- package/src/components/workflow-run-duration-label.tsx +1 -1
- package/src/components/workflow-run-list/job-status-strip.tsx +6 -6
- package/src/components/workflow-run-list/workflow-run-filter-menu.tsx +1 -1
- package/src/components/workflow-run-list/workflow-run-filters.tsx +4 -4
- package/src/components/workflow-run-list/workflow-run-list-states.tsx +6 -6
- package/src/components/workflow-run-list/workflow-run-list-view.tsx +1 -1
- package/src/components/workflow-run-list/workflow-run-row.tsx +7 -7
- package/src/components/workflow-run-summary/workflow-run-attempt-switcher.tsx +1 -1
- package/src/components/workflow-run-summary/workflow-run-summary.test.tsx +1 -1
- package/src/components/workflow-run-summary/workflow-run-summary.tsx +12 -12
- package/src/components/workflow-run-tabs/index.ts +7 -0
- package/src/components/workflow-run-tabs/run-annotation-count-chip.tsx +63 -0
- package/src/components/workflow-run-tabs/run-annotation-item.tsx +123 -0
- package/src/components/workflow-run-tabs/run-annotation-list.tsx +273 -0
- package/src/components/workflow-run-tabs/run-annotation-summary-line.test.tsx +77 -3
- package/src/components/workflow-run-tabs/run-annotation-summary-line.tsx +95 -20
- package/src/components/workflow-run-tabs/run-annotations.stories.tsx +293 -0
- package/src/components/workflow-run-tabs/severity-visuals.ts +37 -0
- package/src/components/workflow-run-view/run-workspace-nav.test.tsx +44 -0
- package/src/components/workflow-run-view/run-workspace-nav.tsx +22 -9
- package/src/components/workflow-run-view/workflow-run-states.tsx +6 -6
- package/src/components/workflow-run-view/workflow-run-view.test.tsx +246 -20
- package/src/components/workflow-run-view/workflow-run-view.tsx +255 -37
- package/src/core/entities/job-execution.ts +7 -0
- package/src/core/entities/job.ts +9 -0
- package/src/core/entities/step-attempt.ts +33 -0
- package/src/core/entities/step.ts +3 -1
- package/src/core/run-annotation.test.ts +315 -0
- package/src/core/run-annotation.ts +244 -0
- package/src/core/workflow-run.ts +4 -0
- package/src/hooks/api/annotations.test.ts +84 -0
- package/src/hooks/api/annotations.ts +240 -0
- package/src/hooks/api/run-annotation-mapper.ts +30 -0
- package/src/hooks/api/run-annotations.ts +137 -0
- package/src/hooks/api/step-attempt-detail.ts +67 -0
- package/src/hooks/api/workflow-run-mapper.ts +46 -0
- package/src/hooks/api/workflow-runs.test.tsx +61 -1
- package/src/pages/project-workflows-page.tsx +19 -19
- package/src/pages/workflow-job-detail-page.test.tsx +118 -1
- package/src/pages/workflow-run-list-page.tsx +1 -1
- package/src/routes/inputs.ts +7 -2
- package/test/fixtures/workflow-run.ts +7 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/core/workflow-run-tabs.d.ts +0 -9
- package/dist/core/workflow-run-tabs.d.ts.map +0 -1
- package/dist/core/workflow-run-tabs.js +0 -3
- package/dist/core/workflow-run-tabs.js.map +0 -1
- package/src/core/workflow-run-tabs.ts +0 -8
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type UseQueryOptions } from '@tanstack/react-query';
|
|
2
|
+
import type { StepAttemptDetail } from '#core/workflow-run.js';
|
|
3
|
+
export declare const stepAttemptDetailQueryKeys: {
|
|
4
|
+
all: readonly ['workflow-step-attempt-details'];
|
|
5
|
+
detail: (stepId: string, attempt: number) => readonly ["workflow-step-attempt-details", string, number];
|
|
6
|
+
};
|
|
7
|
+
type StepAttemptDetailQueryKey = ReturnType<typeof stepAttemptDetailQueryKeys.detail> | readonly ['workflow-step-attempt-details'];
|
|
8
|
+
type StepAttemptDetailQueryOptions = UseQueryOptions<StepAttemptDetail, Error, StepAttemptDetail, StepAttemptDetailQueryKey>;
|
|
9
|
+
export declare function stepAttemptDetailQueryOptions(stepId: string | undefined, attempt: number | undefined): StepAttemptDetailQueryOptions;
|
|
10
|
+
export declare function useStepAttemptDetailQuery(stepId: string | undefined, attempt: number | undefined, options?: {
|
|
11
|
+
enabled?: boolean | undefined;
|
|
12
|
+
}): import("@tanstack/react-query").UseQueryResult<NoInfer<StepAttemptDetail>, Error>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=step-attempt-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-attempt-detail.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/step-attempt-detail.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,KAAK,eAAe,EAAW,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,0BAA0B;IACrC,GAAG,YAAG,+BAA+B;IACrC,MAAM,WAAW,MAAM,WAAW,MAAM;CAEzC,CAAC;AAEF,KAAK,yBAAyB,GAC1B,UAAU,CAAC,OAAO,0BAA0B,CAAC,MAAM,CAAC,GACpD,SAAS,CAAC,+BAA+B,CAAC,CAAC;AAE/C,KAAK,6BAA6B,GAAG,eAAe,CAClD,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EACjB,yBAAyB,CAC1B,CAAC;AAmBF,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,6BAA6B,CAW/B;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE;IAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAC,qFAO1C"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { stepAttemptDetailResponseSchema } from '@shipfox/api-workflows-dto';
|
|
2
|
+
import { checkedApiRequest } from '@shipfox/client-api';
|
|
3
|
+
import { queryOptions, useQuery } from '@tanstack/react-query';
|
|
4
|
+
import { toStepAttemptDetail } from './workflow-run-mapper.js';
|
|
5
|
+
export const stepAttemptDetailQueryKeys = {
|
|
6
|
+
all: [
|
|
7
|
+
'workflow-step-attempt-details'
|
|
8
|
+
],
|
|
9
|
+
detail: (stepId, attempt)=>[
|
|
10
|
+
...stepAttemptDetailQueryKeys.all,
|
|
11
|
+
stepId,
|
|
12
|
+
attempt
|
|
13
|
+
]
|
|
14
|
+
};
|
|
15
|
+
async function getStepAttemptDetail({ stepId, attempt, signal }) {
|
|
16
|
+
const response = await checkedApiRequest(stepAttemptDetailResponseSchema, `/workflows/runs/steps/${stepId}/attempts/${attempt}`, {
|
|
17
|
+
signal
|
|
18
|
+
});
|
|
19
|
+
return toStepAttemptDetail(response);
|
|
20
|
+
}
|
|
21
|
+
export function stepAttemptDetailQueryOptions(stepId, attempt) {
|
|
22
|
+
return queryOptions({
|
|
23
|
+
queryKey: stepId && attempt !== undefined ? stepAttemptDetailQueryKeys.detail(stepId, attempt) : [
|
|
24
|
+
...stepAttemptDetailQueryKeys.all
|
|
25
|
+
],
|
|
26
|
+
enabled: Boolean(stepId) && attempt !== undefined,
|
|
27
|
+
queryFn: ({ signal })=>getStepAttemptDetail({
|
|
28
|
+
stepId: stepId ?? '',
|
|
29
|
+
attempt: attempt ?? 0,
|
|
30
|
+
signal
|
|
31
|
+
}),
|
|
32
|
+
staleTime: Infinity
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
export function useStepAttemptDetailQuery(stepId, attempt, options) {
|
|
36
|
+
return useQuery({
|
|
37
|
+
...stepAttemptDetailQueryOptions(stepId, attempt),
|
|
38
|
+
...options,
|
|
39
|
+
enabled: Boolean(stepId) && attempt !== undefined && (options?.enabled ?? true)
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=step-attempt-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/api/step-attempt-detail.ts"],"sourcesContent":["import {stepAttemptDetailResponseSchema} from '@shipfox/api-workflows-dto';\nimport {checkedApiRequest} from '@shipfox/client-api';\nimport {queryOptions, type UseQueryOptions, useQuery} from '@tanstack/react-query';\nimport type {StepAttemptDetail} from '#core/workflow-run.js';\nimport {toStepAttemptDetail} from './workflow-run-mapper.js';\n\nexport const stepAttemptDetailQueryKeys = {\n all: ['workflow-step-attempt-details'] as const,\n detail: (stepId: string, attempt: number) =>\n [...stepAttemptDetailQueryKeys.all, stepId, attempt] as const,\n};\n\ntype StepAttemptDetailQueryKey =\n | ReturnType<typeof stepAttemptDetailQueryKeys.detail>\n | readonly ['workflow-step-attempt-details'];\n\ntype StepAttemptDetailQueryOptions = UseQueryOptions<\n StepAttemptDetail,\n Error,\n StepAttemptDetail,\n StepAttemptDetailQueryKey\n>;\n\nasync function getStepAttemptDetail({\n stepId,\n attempt,\n signal,\n}: {\n stepId: string;\n attempt: number;\n signal?: AbortSignal;\n}): Promise<StepAttemptDetail> {\n const response = await checkedApiRequest(\n stepAttemptDetailResponseSchema,\n `/workflows/runs/steps/${stepId}/attempts/${attempt}`,\n {signal},\n );\n return toStepAttemptDetail(response);\n}\n\nexport function stepAttemptDetailQueryOptions(\n stepId: string | undefined,\n attempt: number | undefined,\n): StepAttemptDetailQueryOptions {\n return queryOptions({\n queryKey:\n stepId && attempt !== undefined\n ? stepAttemptDetailQueryKeys.detail(stepId, attempt)\n : ([...stepAttemptDetailQueryKeys.all] as const),\n enabled: Boolean(stepId) && attempt !== undefined,\n queryFn: ({signal}) =>\n getStepAttemptDetail({stepId: stepId ?? '', attempt: attempt ?? 0, signal}),\n staleTime: Infinity,\n });\n}\n\nexport function useStepAttemptDetailQuery(\n stepId: string | undefined,\n attempt: number | undefined,\n options?: {enabled?: boolean | undefined},\n) {\n return useQuery({\n ...stepAttemptDetailQueryOptions(stepId, attempt),\n ...options,\n enabled: Boolean(stepId) && attempt !== undefined && (options?.enabled ?? true),\n });\n}\n"],"names":["stepAttemptDetailResponseSchema","checkedApiRequest","queryOptions","useQuery","toStepAttemptDetail","stepAttemptDetailQueryKeys","all","detail","stepId","attempt","getStepAttemptDetail","signal","response","stepAttemptDetailQueryOptions","queryKey","undefined","enabled","Boolean","queryFn","staleTime","Infinity","useStepAttemptDetailQuery","options"],"mappings":"AAAA,SAAQA,+BAA+B,QAAO,6BAA6B;AAC3E,SAAQC,iBAAiB,QAAO,sBAAsB;AACtD,SAAQC,YAAY,EAAwBC,QAAQ,QAAO,wBAAwB;AAEnF,SAAQC,mBAAmB,QAAO,2BAA2B;AAE7D,OAAO,MAAMC,6BAA6B;IACxCC,KAAK;QAAC;KAAgC;IACtCC,QAAQ,CAACC,QAAgBC,UACvB;eAAIJ,2BAA2BC,GAAG;YAAEE;YAAQC;SAAQ;AACxD,EAAE;AAaF,eAAeC,qBAAqB,EAClCF,MAAM,EACNC,OAAO,EACPE,MAAM,EAKP;IACC,MAAMC,WAAW,MAAMX,kBACrBD,iCACA,CAAC,sBAAsB,EAAEQ,OAAO,UAAU,EAAEC,SAAS,EACrD;QAACE;IAAM;IAET,OAAOP,oBAAoBQ;AAC7B;AAEA,OAAO,SAASC,8BACdL,MAA0B,EAC1BC,OAA2B;IAE3B,OAAOP,aAAa;QAClBY,UACEN,UAAUC,YAAYM,YAClBV,2BAA2BE,MAAM,CAACC,QAAQC,WACzC;eAAIJ,2BAA2BC,GAAG;SAAC;QAC1CU,SAASC,QAAQT,WAAWC,YAAYM;QACxCG,SAAS,CAAC,EAACP,MAAM,EAAC,GAChBD,qBAAqB;gBAACF,QAAQA,UAAU;gBAAIC,SAASA,WAAW;gBAAGE;YAAM;QAC3EQ,WAAWC;IACb;AACF;AAEA,OAAO,SAASC,0BACdb,MAA0B,EAC1BC,OAA2B,EAC3Ba,OAAyC;IAEzC,OAAOnB,SAAS;QACd,GAAGU,8BAA8BL,QAAQC,QAAQ;QACjD,GAAGa,OAAO;QACVN,SAASC,QAAQT,WAAWC,YAAYM,aAAcO,CAAAA,SAASN,WAAW,IAAG;IAC/E;AACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { StepAttemptDto, WorkflowRunAttemptDto, WorkflowRunDetailResponseDto, WorkflowRunJobDetailDto, WorkflowRunJobExecutionDetailDto, WorkflowRunListItemDto, WorkflowRunListResponseDto, WorkflowRunResponseDto, WorkflowRunStepDetailDto } from '@shipfox/api-workflows-dto';
|
|
2
|
-
import { Job, JobExecution, type Step, StepAttempt, type WorkflowRun, WorkflowRunAttempt, type WorkflowRunDetail, type WorkflowRunListItem, type WorkflowRunListPage, type WorkflowRunRecord } from '#core/workflow-run.js';
|
|
1
|
+
import type { StepAttemptDetailResponseDto, StepAttemptDto, WorkflowRunAttemptDto, WorkflowRunDetailResponseDto, WorkflowRunJobDetailDto, WorkflowRunJobExecutionDetailDto, WorkflowRunListItemDto, WorkflowRunListResponseDto, WorkflowRunResponseDto, WorkflowRunStepDetailDto } from '@shipfox/api-workflows-dto';
|
|
2
|
+
import { type EvaluationTraceEntry, Job, JobExecution, type Step, StepAttempt, type WorkflowRun, WorkflowRunAttempt, type WorkflowRunDetail, type WorkflowRunListItem, type WorkflowRunListPage, type WorkflowRunRecord } from '#core/workflow-run.js';
|
|
3
3
|
export declare function toWorkflowRun(dto: WorkflowRunResponseDto): WorkflowRun;
|
|
4
4
|
export declare function toWorkflowRunAttempt(dto: WorkflowRunAttemptDto): WorkflowRunAttempt;
|
|
5
5
|
export declare function toWorkflowRunRecord(dto: WorkflowRunResponseDto): WorkflowRunRecord;
|
|
@@ -10,4 +10,11 @@ export declare function toJob(dto: WorkflowRunJobDetailDto): Job;
|
|
|
10
10
|
export declare function toJobExecution(dto: WorkflowRunJobExecutionDetailDto): JobExecution;
|
|
11
11
|
export declare function toStep(dto: WorkflowRunStepDetailDto): Step;
|
|
12
12
|
export declare function toStepAttempt(dto: StepAttemptDto, jobExecutionId: string): StepAttempt;
|
|
13
|
+
export declare function toStepAttemptDetail(dto: StepAttemptDetailResponseDto): {
|
|
14
|
+
stepId: string;
|
|
15
|
+
attempt: number;
|
|
16
|
+
authoredConfig: Record<string, unknown> | null;
|
|
17
|
+
config: Record<string, unknown> | null;
|
|
18
|
+
evaluationTrace: EvaluationTraceEntry[] | null;
|
|
19
|
+
};
|
|
13
20
|
//# sourceMappingURL=workflow-run-mapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/workflow-run-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"workflow-run-mapper.d.ts","sourceRoot":"","sources":["../../../src/hooks/api/workflow-run-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,4BAA4B,EAC5B,cAAc,EAGd,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,gCAAgC,EAChC,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,KAAK,oBAAoB,EACzB,GAAG,EACH,YAAY,EAEZ,KAAK,IAAI,EACT,WAAW,EAGX,KAAK,WAAW,EAChB,kBAAkB,EAElB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,aAAa,CAAC,GAAG,EAAE,sBAAsB,GAAG,WAAW,CA8BtE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,qBAAqB,GAAG,kBAAkB,CAWnF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,sBAAsB,GAAG,iBAAiB,CAclF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,GAAG,mBAAmB,CAkBtF;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,0BAA0B,GAAG,mBAAmB,CAM1F;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,4BAA4B,GAAG,iBAAiB,CAOxF;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,uBAAuB,GAAG,GAAG,CAuBvD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,gCAAgC,GAAG,YAAY,CAoBlF;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI,CA+B1D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,WAAW,CAkBtF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,4BAA4B;IAEjE,MAAM;IACN,OAAO;IACP,cAAc;IACd,MAAM;IACN,eAAe;EAElB"}
|
|
@@ -105,6 +105,10 @@ export function toJob(dto) {
|
|
|
105
105
|
status: dto.status,
|
|
106
106
|
statusReason: dto.status_reason,
|
|
107
107
|
carriedOver: dto.carried_over,
|
|
108
|
+
outputs: dto.outputs ?? null,
|
|
109
|
+
success: dto.success ?? null,
|
|
110
|
+
runner: dto.runner ?? null,
|
|
111
|
+
evaluationTrace: toEvaluationTrace(dto.evaluation_trace),
|
|
108
112
|
listening: dto.listening ? toJobListening(dto.listening) : null,
|
|
109
113
|
listenerStatus: dto.listener_status,
|
|
110
114
|
resolutionReason: dto.resolution_reason,
|
|
@@ -123,11 +127,14 @@ export function toJobExecution(dto) {
|
|
|
123
127
|
name: dto.name,
|
|
124
128
|
status: dto.status,
|
|
125
129
|
statusReason: dto.status_reason,
|
|
130
|
+
runner: dto.runner ?? null,
|
|
131
|
+
outputs: dto.outputs ?? null,
|
|
126
132
|
triggerEvents: (dto.trigger_events ?? []).map(toWorkflowExecutionEvent),
|
|
127
133
|
queuedAt: dto.queued_at ?? null,
|
|
128
134
|
startedAt: dto.started_at ?? null,
|
|
129
135
|
finishedAt: dto.finished_at ?? null,
|
|
130
136
|
timedOutAt: dto.timed_out_at ?? null,
|
|
137
|
+
evaluationTrace: toEvaluationTrace(dto.evaluation_trace),
|
|
131
138
|
createdAt: dto.created_at,
|
|
132
139
|
updatedAt: dto.updated_at,
|
|
133
140
|
steps: dto.steps.map(toStep)
|
|
@@ -144,8 +151,10 @@ export function toStep(dto) {
|
|
|
144
151
|
endLine: dto.source_location.end_line
|
|
145
152
|
} : null,
|
|
146
153
|
status: dto.status,
|
|
154
|
+
statusReason: dto.status_reason,
|
|
147
155
|
type: dto.type,
|
|
148
156
|
config: dto.config,
|
|
157
|
+
evaluationTrace: toEvaluationTrace(dto.evaluation_trace),
|
|
149
158
|
agentConfig: toAgentStepConfig(dto),
|
|
150
159
|
error: dto.error ? {
|
|
151
160
|
message: dto.error.message,
|
|
@@ -172,6 +181,8 @@ export function toStepAttempt(dto, jobExecutionId) {
|
|
|
172
181
|
status: dto.status,
|
|
173
182
|
exitCode: dto.exit_code ?? null,
|
|
174
183
|
output: dto.output ?? null,
|
|
184
|
+
outputs: dto.outputs ?? dto.output ?? null,
|
|
185
|
+
response: dto.response ?? null,
|
|
175
186
|
error: dto.error ?? null,
|
|
176
187
|
gateResult: toStepGateResult(dto.gate_result),
|
|
177
188
|
restartFeedback: dto.restart_feedback ?? null,
|
|
@@ -179,6 +190,15 @@ export function toStepAttempt(dto, jobExecutionId) {
|
|
|
179
190
|
finishedAt: dto.finished_at ?? null
|
|
180
191
|
});
|
|
181
192
|
}
|
|
193
|
+
export function toStepAttemptDetail(dto) {
|
|
194
|
+
return {
|
|
195
|
+
stepId: dto.step_id,
|
|
196
|
+
attempt: dto.attempt,
|
|
197
|
+
authoredConfig: dto.authored_config,
|
|
198
|
+
config: dto.config,
|
|
199
|
+
evaluationTrace: toEvaluationTrace(dto.evaluation_trace)
|
|
200
|
+
};
|
|
201
|
+
}
|
|
182
202
|
function toJobListening(dto) {
|
|
183
203
|
return {
|
|
184
204
|
on: dto.on,
|
|
@@ -220,6 +240,33 @@ function toStepGateResult(dto) {
|
|
|
220
240
|
};
|
|
221
241
|
return dto;
|
|
222
242
|
}
|
|
243
|
+
function toEvaluationTrace(trace) {
|
|
244
|
+
return trace?.map((entry)=>'dropped' in entry ? entry : {
|
|
245
|
+
expression: entry.expression,
|
|
246
|
+
roots: entry.roots,
|
|
247
|
+
fillTarget: entry.fill_target,
|
|
248
|
+
evaluatedAt: entry.evaluated_at,
|
|
249
|
+
field: entry.field,
|
|
250
|
+
...entry.value === undefined ? {} : {
|
|
251
|
+
value: entry.value
|
|
252
|
+
},
|
|
253
|
+
...entry.truncated === undefined ? {} : {
|
|
254
|
+
truncated: entry.truncated
|
|
255
|
+
},
|
|
256
|
+
...entry.expr_truncated === undefined ? {} : {
|
|
257
|
+
exprTruncated: entry.expr_truncated
|
|
258
|
+
},
|
|
259
|
+
...entry.reference === undefined ? {} : {
|
|
260
|
+
reference: entry.reference
|
|
261
|
+
},
|
|
262
|
+
...entry.degraded === undefined ? {} : {
|
|
263
|
+
degraded: entry.degraded
|
|
264
|
+
},
|
|
265
|
+
...entry.env_key === undefined ? {} : {
|
|
266
|
+
envKey: entry.env_key
|
|
267
|
+
}
|
|
268
|
+
}) ?? null;
|
|
269
|
+
}
|
|
223
270
|
function toAgentStepConfig(dto) {
|
|
224
271
|
if (dto.type !== 'agent') return null;
|
|
225
272
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/api/workflow-run-mapper.ts"],"sourcesContent":["import type {\n JobListeningDto,\n StepAttemptDto,\n StepGateResultDto,\n WorkflowExecutionEventDto,\n WorkflowRunAttemptDto,\n WorkflowRunDetailResponseDto,\n WorkflowRunJobDetailDto,\n WorkflowRunJobExecutionDetailDto,\n WorkflowRunListItemDto,\n WorkflowRunListResponseDto,\n WorkflowRunResponseDto,\n WorkflowRunStepDetailDto,\n} from '@shipfox/api-workflows-dto';\nimport {\n Job,\n JobExecution,\n type JobListening,\n type Step,\n StepAttempt,\n type StepGateResult,\n type WorkflowExecutionEvent,\n type WorkflowRun,\n WorkflowRunAttempt,\n WorkflowRunAttemptSummary,\n type WorkflowRunDetail,\n type WorkflowRunListItem,\n type WorkflowRunListPage,\n type WorkflowRunRecord,\n workflowRunTriggerDisplayLabel,\n workflowRunTriggerLabel,\n} from '#core/workflow-run.js';\n\nexport function toWorkflowRun(dto: WorkflowRunResponseDto): WorkflowRun {\n return {\n id: dto.id,\n projectId: dto.project_id,\n definitionId: dto.definition_id,\n number: dto.number,\n name: dto.name,\n workflowName: dto.workflow_name,\n currentAttempt: dto.current_attempt,\n triggerProvider: dto.trigger_provider,\n triggerSource: dto.trigger_source,\n triggerEvent: dto.trigger_event,\n triggerDisplayLabel: workflowRunTriggerDisplayLabel({\n triggerSource: dto.trigger_source,\n triggerEvent: dto.trigger_event,\n }),\n triggerLabel: workflowRunTriggerLabel({\n triggerSource: dto.trigger_source,\n triggerEvent: dto.trigger_event,\n }),\n triggerPayload: dto.trigger_payload,\n triggerReference: dto.trigger_reference,\n inputs: dto.inputs ?? null,\n sourceSnapshot: dto.source_snapshot\n ? {content: dto.source_snapshot.content, format: dto.source_snapshot.format}\n : null,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n isTemporary: dto.id.startsWith('temp-'),\n };\n}\n\nexport function toWorkflowRunAttempt(dto: WorkflowRunAttemptDto): WorkflowRunAttempt {\n return new WorkflowRunAttempt({\n id: dto.id,\n workflowRunId: dto.workflow_run_id,\n attempt: dto.attempt,\n status: dto.status,\n createdAt: dto.created_at,\n startedAt: dto.started_at ?? null,\n finishedAt: dto.finished_at ?? null,\n rerunMode: dto.rerun_mode,\n });\n}\n\nexport function toWorkflowRunRecord(dto: WorkflowRunResponseDto): WorkflowRunRecord {\n return {\n ...toWorkflowRun(dto),\n status: dto.status,\n latestAttempt: dto.latest_attempt,\n runAttempt: new WorkflowRunAttemptSummary({\n workflowRunId: dto.id,\n attempt: dto.current_attempt,\n status: dto.status,\n createdAt: dto.created_at,\n startedAt: dto.started_at ?? null,\n finishedAt: dto.finished_at ?? null,\n }),\n };\n}\n\nexport function toWorkflowRunListItem(dto: WorkflowRunListItemDto): WorkflowRunListItem {\n const statusCounts = dto.job_status_counts.map(({status, count}) => ({status, count}));\n return {\n ...toWorkflowRunRecord(dto),\n jobs: {\n preview: dto.jobs.map((job) => ({\n id: job.id,\n key: job.key,\n name: job.name,\n status: job.status,\n position: job.position,\n })),\n statusCounts,\n // Derived rather than sent: the counts already cover every job, and a separate total\n // would be a second source of truth that could disagree with them.\n total: statusCounts.reduce((sum, entry) => sum + entry.count, 0),\n },\n };\n}\n\nexport function toWorkflowRunListPage(dto: WorkflowRunListResponseDto): WorkflowRunListPage {\n return {\n runs: dto.runs.map(toWorkflowRunListItem),\n nextCursor: dto.next_cursor,\n filteredTotalCount: dto.filtered_total_count,\n };\n}\n\nexport function toWorkflowRunDetail(dto: WorkflowRunDetailResponseDto): WorkflowRunDetail {\n return {\n ...toWorkflowRun(dto),\n latestAttempt: dto.latest_attempt,\n runAttempt: toWorkflowRunAttempt(dto.run_attempt),\n jobs: dto.jobs.map(toJob),\n };\n}\n\nexport function toJob(dto: WorkflowRunJobDetailDto): Job {\n return new Job({\n id: dto.id,\n runAttemptId: dto.run_attempt_id,\n key: dto.key,\n name: dto.name,\n mode: dto.mode,\n status: dto.status,\n statusReason: dto.status_reason,\n carriedOver: dto.carried_over,\n listening: dto.listening ? toJobListening(dto.listening) : null,\n listenerStatus: dto.listener_status,\n resolutionReason: dto.resolution_reason,\n dependencies: dto.dependencies,\n position: dto.position,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n jobExecutions: dto.job_executions.map(toJobExecution),\n });\n}\n\nexport function toJobExecution(dto: WorkflowRunJobExecutionDetailDto): JobExecution {\n return new JobExecution({\n id: dto.id,\n jobId: dto.job_id,\n sequence: dto.sequence,\n name: dto.name,\n status: dto.status,\n statusReason: dto.status_reason,\n triggerEvents: (dto.trigger_events ?? []).map(toWorkflowExecutionEvent),\n queuedAt: dto.queued_at ?? null,\n startedAt: dto.started_at ?? null,\n finishedAt: dto.finished_at ?? null,\n timedOutAt: dto.timed_out_at ?? null,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n steps: dto.steps.map(toStep),\n });\n}\n\nexport function toStep(dto: WorkflowRunStepDetailDto): Step {\n return {\n id: dto.id,\n jobExecutionId: dto.job_execution_id,\n key: dto.key,\n name: dto.name,\n sourceLocation: dto.source_location\n ? {startLine: dto.source_location.start_line, endLine: dto.source_location.end_line}\n : null,\n status: dto.status,\n type: dto.type,\n config: dto.config,\n agentConfig: toAgentStepConfig(dto),\n error: dto.error\n ? {\n message: dto.error.message,\n exitCode: dto.error.exit_code ?? null,\n signal: dto.error.signal,\n reason: dto.error.reason,\n agentConfigIssue: dto.error.agent_config_issue,\n category: dto.error.category,\n }\n : null,\n position: dto.position,\n currentAttempt: dto.current_attempt,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n attempts: dto.attempts.map((attempt) => toStepAttempt(attempt, dto.job_execution_id)),\n };\n}\n\nexport function toStepAttempt(dto: StepAttemptDto, jobExecutionId: string): StepAttempt {\n return new StepAttempt({\n id: dto.id,\n stepId: dto.step_id,\n jobExecutionId,\n attempt: dto.attempt,\n executionOrder: dto.execution_order,\n status: dto.status,\n exitCode: dto.exit_code ?? null,\n output: dto.output ?? null,\n error: dto.error ?? null,\n gateResult: toStepGateResult(dto.gate_result),\n restartFeedback: dto.restart_feedback ?? null,\n startedAt: dto.started_at,\n finishedAt: dto.finished_at ?? null,\n });\n}\n\nfunction toJobListening(dto: JobListeningDto): JobListening {\n return {\n on: dto.on,\n until: dto.until,\n timeoutMs: dto.timeout_ms,\n maxExecutions: dto.max_executions,\n batch: dto.batch\n ? {\n debounceMs: dto.batch.debounce_ms,\n maxSize: dto.batch.max_size,\n maxWaitMs: dto.batch.max_wait_ms,\n }\n : null,\n onResolve: dto.on_resolve,\n executionTimeoutMs: dto.execution_timeout_ms,\n name: dto.name,\n };\n}\n\nfunction toWorkflowExecutionEvent(dto: WorkflowExecutionEventDto): WorkflowExecutionEvent {\n return {\n source: dto.source,\n event: dto.event,\n deliveryId: dto.delivery_id,\n receivedAt: dto.received_at,\n project: dto.project,\n repository: dto.repository,\n ref: dto.ref,\n commit: dto.commit,\n data: dto.data,\n };\n}\n\nfunction toStepGateResult(dto: StepGateResultDto): StepGateResult {\n if (dto === null || dto.kind === 'none' || dto.kind === 'not_evaluated') return dto;\n if (dto.kind === 'passed' || dto.kind === 'failed') return {...dto, exitCode: dto.exit_code};\n if (dto.kind === 'uncheckable' || dto.kind === 'evaluation_error')\n return {...dto, exitCode: dto.exit_code};\n return dto;\n}\n\nfunction toAgentStepConfig(dto: WorkflowRunStepDetailDto): Step['agentConfig'] {\n if (dto.type !== 'agent') return null;\n return {\n provider: stringConfigValue(dto.config.provider),\n model: stringConfigValue(dto.config.model),\n thinking: stringConfigValue(dto.config.thinking),\n };\n}\n\nfunction stringConfigValue(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n"],"names":["Job","JobExecution","StepAttempt","WorkflowRunAttempt","WorkflowRunAttemptSummary","workflowRunTriggerDisplayLabel","workflowRunTriggerLabel","toWorkflowRun","dto","id","projectId","project_id","definitionId","definition_id","number","name","workflowName","workflow_name","currentAttempt","current_attempt","triggerProvider","trigger_provider","triggerSource","trigger_source","triggerEvent","trigger_event","triggerDisplayLabel","triggerLabel","triggerPayload","trigger_payload","triggerReference","trigger_reference","inputs","sourceSnapshot","source_snapshot","content","format","createdAt","created_at","updatedAt","updated_at","isTemporary","startsWith","toWorkflowRunAttempt","workflowRunId","workflow_run_id","attempt","status","startedAt","started_at","finishedAt","finished_at","rerunMode","rerun_mode","toWorkflowRunRecord","latestAttempt","latest_attempt","runAttempt","toWorkflowRunListItem","statusCounts","job_status_counts","map","count","jobs","preview","job","key","position","total","reduce","sum","entry","toWorkflowRunListPage","runs","nextCursor","next_cursor","filteredTotalCount","filtered_total_count","toWorkflowRunDetail","run_attempt","toJob","runAttemptId","run_attempt_id","mode","statusReason","status_reason","carriedOver","carried_over","listening","toJobListening","listenerStatus","listener_status","resolutionReason","resolution_reason","dependencies","jobExecutions","job_executions","toJobExecution","jobId","job_id","sequence","triggerEvents","trigger_events","toWorkflowExecutionEvent","queuedAt","queued_at","timedOutAt","timed_out_at","steps","toStep","jobExecutionId","job_execution_id","sourceLocation","source_location","startLine","start_line","endLine","end_line","type","config","agentConfig","toAgentStepConfig","error","message","exitCode","exit_code","signal","reason","agentConfigIssue","agent_config_issue","category","attempts","toStepAttempt","stepId","step_id","executionOrder","execution_order","output","gateResult","toStepGateResult","gate_result","restartFeedback","restart_feedback","on","until","timeoutMs","timeout_ms","maxExecutions","max_executions","batch","debounceMs","debounce_ms","maxSize","max_size","maxWaitMs","max_wait_ms","onResolve","on_resolve","executionTimeoutMs","execution_timeout_ms","source","event","deliveryId","delivery_id","receivedAt","received_at","project","repository","ref","commit","data","kind","provider","stringConfigValue","model","thinking","value","trim"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/api/workflow-run-mapper.ts"],"sourcesContent":["import type {\n EvaluationTraceDto,\n JobListeningDto,\n StepAttemptDetailResponseDto,\n StepAttemptDto,\n StepGateResultDto,\n WorkflowExecutionEventDto,\n WorkflowRunAttemptDto,\n WorkflowRunDetailResponseDto,\n WorkflowRunJobDetailDto,\n WorkflowRunJobExecutionDetailDto,\n WorkflowRunListItemDto,\n WorkflowRunListResponseDto,\n WorkflowRunResponseDto,\n WorkflowRunStepDetailDto,\n} from '@shipfox/api-workflows-dto';\nimport {\n type EvaluationTraceEntry,\n Job,\n JobExecution,\n type JobListening,\n type Step,\n StepAttempt,\n type StepGateResult,\n type WorkflowExecutionEvent,\n type WorkflowRun,\n WorkflowRunAttempt,\n WorkflowRunAttemptSummary,\n type WorkflowRunDetail,\n type WorkflowRunListItem,\n type WorkflowRunListPage,\n type WorkflowRunRecord,\n workflowRunTriggerDisplayLabel,\n workflowRunTriggerLabel,\n} from '#core/workflow-run.js';\n\nexport function toWorkflowRun(dto: WorkflowRunResponseDto): WorkflowRun {\n return {\n id: dto.id,\n projectId: dto.project_id,\n definitionId: dto.definition_id,\n number: dto.number,\n name: dto.name,\n workflowName: dto.workflow_name,\n currentAttempt: dto.current_attempt,\n triggerProvider: dto.trigger_provider,\n triggerSource: dto.trigger_source,\n triggerEvent: dto.trigger_event,\n triggerDisplayLabel: workflowRunTriggerDisplayLabel({\n triggerSource: dto.trigger_source,\n triggerEvent: dto.trigger_event,\n }),\n triggerLabel: workflowRunTriggerLabel({\n triggerSource: dto.trigger_source,\n triggerEvent: dto.trigger_event,\n }),\n triggerPayload: dto.trigger_payload,\n triggerReference: dto.trigger_reference,\n inputs: dto.inputs ?? null,\n sourceSnapshot: dto.source_snapshot\n ? {content: dto.source_snapshot.content, format: dto.source_snapshot.format}\n : null,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n isTemporary: dto.id.startsWith('temp-'),\n };\n}\n\nexport function toWorkflowRunAttempt(dto: WorkflowRunAttemptDto): WorkflowRunAttempt {\n return new WorkflowRunAttempt({\n id: dto.id,\n workflowRunId: dto.workflow_run_id,\n attempt: dto.attempt,\n status: dto.status,\n createdAt: dto.created_at,\n startedAt: dto.started_at ?? null,\n finishedAt: dto.finished_at ?? null,\n rerunMode: dto.rerun_mode,\n });\n}\n\nexport function toWorkflowRunRecord(dto: WorkflowRunResponseDto): WorkflowRunRecord {\n return {\n ...toWorkflowRun(dto),\n status: dto.status,\n latestAttempt: dto.latest_attempt,\n runAttempt: new WorkflowRunAttemptSummary({\n workflowRunId: dto.id,\n attempt: dto.current_attempt,\n status: dto.status,\n createdAt: dto.created_at,\n startedAt: dto.started_at ?? null,\n finishedAt: dto.finished_at ?? null,\n }),\n };\n}\n\nexport function toWorkflowRunListItem(dto: WorkflowRunListItemDto): WorkflowRunListItem {\n const statusCounts = dto.job_status_counts.map(({status, count}) => ({status, count}));\n return {\n ...toWorkflowRunRecord(dto),\n jobs: {\n preview: dto.jobs.map((job) => ({\n id: job.id,\n key: job.key,\n name: job.name,\n status: job.status,\n position: job.position,\n })),\n statusCounts,\n // Derived rather than sent: the counts already cover every job, and a separate total\n // would be a second source of truth that could disagree with them.\n total: statusCounts.reduce((sum, entry) => sum + entry.count, 0),\n },\n };\n}\n\nexport function toWorkflowRunListPage(dto: WorkflowRunListResponseDto): WorkflowRunListPage {\n return {\n runs: dto.runs.map(toWorkflowRunListItem),\n nextCursor: dto.next_cursor,\n filteredTotalCount: dto.filtered_total_count,\n };\n}\n\nexport function toWorkflowRunDetail(dto: WorkflowRunDetailResponseDto): WorkflowRunDetail {\n return {\n ...toWorkflowRun(dto),\n latestAttempt: dto.latest_attempt,\n runAttempt: toWorkflowRunAttempt(dto.run_attempt),\n jobs: dto.jobs.map(toJob),\n };\n}\n\nexport function toJob(dto: WorkflowRunJobDetailDto): Job {\n return new Job({\n id: dto.id,\n runAttemptId: dto.run_attempt_id,\n key: dto.key,\n name: dto.name,\n mode: dto.mode,\n status: dto.status,\n statusReason: dto.status_reason,\n carriedOver: dto.carried_over,\n outputs: dto.outputs ?? null,\n success: dto.success ?? null,\n runner: dto.runner ?? null,\n evaluationTrace: toEvaluationTrace(dto.evaluation_trace),\n listening: dto.listening ? toJobListening(dto.listening) : null,\n listenerStatus: dto.listener_status,\n resolutionReason: dto.resolution_reason,\n dependencies: dto.dependencies,\n position: dto.position,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n jobExecutions: dto.job_executions.map(toJobExecution),\n });\n}\n\nexport function toJobExecution(dto: WorkflowRunJobExecutionDetailDto): JobExecution {\n return new JobExecution({\n id: dto.id,\n jobId: dto.job_id,\n sequence: dto.sequence,\n name: dto.name,\n status: dto.status,\n statusReason: dto.status_reason,\n runner: dto.runner ?? null,\n outputs: dto.outputs ?? null,\n triggerEvents: (dto.trigger_events ?? []).map(toWorkflowExecutionEvent),\n queuedAt: dto.queued_at ?? null,\n startedAt: dto.started_at ?? null,\n finishedAt: dto.finished_at ?? null,\n timedOutAt: dto.timed_out_at ?? null,\n evaluationTrace: toEvaluationTrace(dto.evaluation_trace),\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n steps: dto.steps.map(toStep),\n });\n}\n\nexport function toStep(dto: WorkflowRunStepDetailDto): Step {\n return {\n id: dto.id,\n jobExecutionId: dto.job_execution_id,\n key: dto.key,\n name: dto.name,\n sourceLocation: dto.source_location\n ? {startLine: dto.source_location.start_line, endLine: dto.source_location.end_line}\n : null,\n status: dto.status,\n statusReason: dto.status_reason,\n type: dto.type,\n config: dto.config,\n evaluationTrace: toEvaluationTrace(dto.evaluation_trace),\n agentConfig: toAgentStepConfig(dto),\n error: dto.error\n ? {\n message: dto.error.message,\n exitCode: dto.error.exit_code ?? null,\n signal: dto.error.signal,\n reason: dto.error.reason,\n agentConfigIssue: dto.error.agent_config_issue,\n category: dto.error.category,\n }\n : null,\n position: dto.position,\n currentAttempt: dto.current_attempt,\n createdAt: dto.created_at,\n updatedAt: dto.updated_at,\n attempts: dto.attempts.map((attempt) => toStepAttempt(attempt, dto.job_execution_id)),\n };\n}\n\nexport function toStepAttempt(dto: StepAttemptDto, jobExecutionId: string): StepAttempt {\n return new StepAttempt({\n id: dto.id,\n stepId: dto.step_id,\n jobExecutionId,\n attempt: dto.attempt,\n executionOrder: dto.execution_order,\n status: dto.status,\n exitCode: dto.exit_code ?? null,\n output: dto.output ?? null,\n outputs: dto.outputs ?? dto.output ?? null,\n response: dto.response ?? null,\n error: dto.error ?? null,\n gateResult: toStepGateResult(dto.gate_result),\n restartFeedback: dto.restart_feedback ?? null,\n startedAt: dto.started_at,\n finishedAt: dto.finished_at ?? null,\n });\n}\n\nexport function toStepAttemptDetail(dto: StepAttemptDetailResponseDto) {\n return {\n stepId: dto.step_id,\n attempt: dto.attempt,\n authoredConfig: dto.authored_config,\n config: dto.config,\n evaluationTrace: toEvaluationTrace(dto.evaluation_trace),\n };\n}\n\nfunction toJobListening(dto: JobListeningDto): JobListening {\n return {\n on: dto.on,\n until: dto.until,\n timeoutMs: dto.timeout_ms,\n maxExecutions: dto.max_executions,\n batch: dto.batch\n ? {\n debounceMs: dto.batch.debounce_ms,\n maxSize: dto.batch.max_size,\n maxWaitMs: dto.batch.max_wait_ms,\n }\n : null,\n onResolve: dto.on_resolve,\n executionTimeoutMs: dto.execution_timeout_ms,\n name: dto.name,\n };\n}\n\nfunction toWorkflowExecutionEvent(dto: WorkflowExecutionEventDto): WorkflowExecutionEvent {\n return {\n source: dto.source,\n event: dto.event,\n deliveryId: dto.delivery_id,\n receivedAt: dto.received_at,\n project: dto.project,\n repository: dto.repository,\n ref: dto.ref,\n commit: dto.commit,\n data: dto.data,\n };\n}\n\nfunction toStepGateResult(dto: StepGateResultDto): StepGateResult {\n if (dto === null || dto.kind === 'none' || dto.kind === 'not_evaluated') return dto;\n if (dto.kind === 'passed' || dto.kind === 'failed') return {...dto, exitCode: dto.exit_code};\n if (dto.kind === 'uncheckable' || dto.kind === 'evaluation_error')\n return {...dto, exitCode: dto.exit_code};\n return dto;\n}\n\nfunction toEvaluationTrace(trace: EvaluationTraceDto | null): EvaluationTraceEntry[] | null {\n return (\n trace?.map((entry) =>\n 'dropped' in entry\n ? entry\n : {\n expression: entry.expression,\n roots: entry.roots,\n fillTarget: entry.fill_target,\n evaluatedAt: entry.evaluated_at,\n field: entry.field,\n ...(entry.value === undefined ? {} : {value: entry.value}),\n ...(entry.truncated === undefined ? {} : {truncated: entry.truncated}),\n ...(entry.expr_truncated === undefined ? {} : {exprTruncated: entry.expr_truncated}),\n ...(entry.reference === undefined ? {} : {reference: entry.reference}),\n ...(entry.degraded === undefined ? {} : {degraded: entry.degraded}),\n ...(entry.env_key === undefined ? {} : {envKey: entry.env_key}),\n },\n ) ?? null\n );\n}\n\nfunction toAgentStepConfig(dto: WorkflowRunStepDetailDto): Step['agentConfig'] {\n if (dto.type !== 'agent') return null;\n return {\n provider: stringConfigValue(dto.config.provider),\n model: stringConfigValue(dto.config.model),\n thinking: stringConfigValue(dto.config.thinking),\n };\n}\n\nfunction stringConfigValue(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n"],"names":["Job","JobExecution","StepAttempt","WorkflowRunAttempt","WorkflowRunAttemptSummary","workflowRunTriggerDisplayLabel","workflowRunTriggerLabel","toWorkflowRun","dto","id","projectId","project_id","definitionId","definition_id","number","name","workflowName","workflow_name","currentAttempt","current_attempt","triggerProvider","trigger_provider","triggerSource","trigger_source","triggerEvent","trigger_event","triggerDisplayLabel","triggerLabel","triggerPayload","trigger_payload","triggerReference","trigger_reference","inputs","sourceSnapshot","source_snapshot","content","format","createdAt","created_at","updatedAt","updated_at","isTemporary","startsWith","toWorkflowRunAttempt","workflowRunId","workflow_run_id","attempt","status","startedAt","started_at","finishedAt","finished_at","rerunMode","rerun_mode","toWorkflowRunRecord","latestAttempt","latest_attempt","runAttempt","toWorkflowRunListItem","statusCounts","job_status_counts","map","count","jobs","preview","job","key","position","total","reduce","sum","entry","toWorkflowRunListPage","runs","nextCursor","next_cursor","filteredTotalCount","filtered_total_count","toWorkflowRunDetail","run_attempt","toJob","runAttemptId","run_attempt_id","mode","statusReason","status_reason","carriedOver","carried_over","outputs","success","runner","evaluationTrace","toEvaluationTrace","evaluation_trace","listening","toJobListening","listenerStatus","listener_status","resolutionReason","resolution_reason","dependencies","jobExecutions","job_executions","toJobExecution","jobId","job_id","sequence","triggerEvents","trigger_events","toWorkflowExecutionEvent","queuedAt","queued_at","timedOutAt","timed_out_at","steps","toStep","jobExecutionId","job_execution_id","sourceLocation","source_location","startLine","start_line","endLine","end_line","type","config","agentConfig","toAgentStepConfig","error","message","exitCode","exit_code","signal","reason","agentConfigIssue","agent_config_issue","category","attempts","toStepAttempt","stepId","step_id","executionOrder","execution_order","output","response","gateResult","toStepGateResult","gate_result","restartFeedback","restart_feedback","toStepAttemptDetail","authoredConfig","authored_config","on","until","timeoutMs","timeout_ms","maxExecutions","max_executions","batch","debounceMs","debounce_ms","maxSize","max_size","maxWaitMs","max_wait_ms","onResolve","on_resolve","executionTimeoutMs","execution_timeout_ms","source","event","deliveryId","delivery_id","receivedAt","received_at","project","repository","ref","commit","data","kind","trace","expression","roots","fillTarget","fill_target","evaluatedAt","evaluated_at","field","value","undefined","truncated","expr_truncated","exprTruncated","reference","degraded","env_key","envKey","provider","stringConfigValue","model","thinking","trim"],"mappings":"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"}
|
|
@@ -49,10 +49,10 @@ function ProjectWorkflowsPageInner({ projectId }) {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
return /*#__PURE__*/ _jsxs("div", {
|
|
52
|
-
className: "flex w-full flex-col gap-
|
|
52
|
+
className: "flex w-full flex-col gap-section",
|
|
53
53
|
children: [
|
|
54
54
|
projectQuery.isPending ? /*#__PURE__*/ _jsxs("div", {
|
|
55
|
-
className: "flex flex-col gap-
|
|
55
|
+
className: "flex flex-col gap-cluster",
|
|
56
56
|
children: [
|
|
57
57
|
/*#__PURE__*/ _jsx(Skeleton, {
|
|
58
58
|
className: "h-28 w-1/3"
|
|
@@ -73,7 +73,7 @@ function ProjectWorkflowsPageInner({ projectId }) {
|
|
|
73
73
|
projectQuery.data ? /*#__PURE__*/ _jsxs(_Fragment, {
|
|
74
74
|
children: [
|
|
75
75
|
/*#__PURE__*/ _jsxs("header", {
|
|
76
|
-
className: "flex flex-col gap-
|
|
76
|
+
className: "flex flex-col gap-tight",
|
|
77
77
|
children: [
|
|
78
78
|
/*#__PURE__*/ _jsx(Header, {
|
|
79
79
|
variant: "h2",
|
|
@@ -129,7 +129,7 @@ function ProjectWorkflowsPageInner({ projectId }) {
|
|
|
129
129
|
function WorkflowDefinitionsList({ definitions, isPending, isError, sync, runError, runningDefinitionId, hasNextPage, isFetchingNextPage, isFetchNextPageError, onRetry, onLoadMore, onOpenDefinition, onRun }) {
|
|
130
130
|
if (isPending) {
|
|
131
131
|
return /*#__PURE__*/ _jsxs("div", {
|
|
132
|
-
className: "flex flex-col gap-
|
|
132
|
+
className: "flex flex-col gap-inline",
|
|
133
133
|
children: [
|
|
134
134
|
/*#__PURE__*/ _jsx(Skeleton, {
|
|
135
135
|
className: "h-40 w-full"
|
|
@@ -205,12 +205,12 @@ function WorkflowDefinitionsList({ definitions, isPending, isError, sync, runErr
|
|
|
205
205
|
/*#__PURE__*/ _jsx(TableCell, {
|
|
206
206
|
className: "max-w-260",
|
|
207
207
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
208
|
-
className: "flex min-w-0 flex-col gap-
|
|
208
|
+
className: "flex min-w-0 flex-col gap-tight",
|
|
209
209
|
children: [
|
|
210
210
|
/*#__PURE__*/ _jsxs("button", {
|
|
211
211
|
type: "button",
|
|
212
212
|
onClick: ()=>onOpenDefinition(definition),
|
|
213
|
-
className: "flex min-w-0 flex-col gap-
|
|
213
|
+
className: "flex min-w-0 flex-col gap-tight text-left outline-none focus-visible:shadow-border-interactive-with-active rounded-4",
|
|
214
214
|
children: [
|
|
215
215
|
/*#__PURE__*/ _jsx(Text, {
|
|
216
216
|
size: "sm",
|
|
@@ -262,11 +262,11 @@ function WorkflowDefinitionsList({ definitions, isPending, isError, sync, runErr
|
|
|
262
262
|
const runErrorMessage = runError?.definitionId === definition.id ? runError.message : null;
|
|
263
263
|
const isRunning = runningDefinitionId === definition.id;
|
|
264
264
|
return /*#__PURE__*/ _jsxs("div", {
|
|
265
|
-
className: "flex flex-col gap-
|
|
265
|
+
className: "flex flex-col gap-inline border-b border-border-neutral-base p-panel-compact last:border-b-0",
|
|
266
266
|
children: [
|
|
267
267
|
/*#__PURE__*/ _jsxs("button", {
|
|
268
268
|
type: "button",
|
|
269
|
-
className: "flex min-w-0 items-start gap-
|
|
269
|
+
className: "flex min-w-0 items-start gap-inline text-left",
|
|
270
270
|
onClick: ()=>onOpenDefinition(definition),
|
|
271
271
|
children: [
|
|
272
272
|
/*#__PURE__*/ _jsx(Icon, {
|
|
@@ -275,7 +275,7 @@ function WorkflowDefinitionsList({ definitions, isPending, isError, sync, runErr
|
|
|
275
275
|
"aria-hidden": "true"
|
|
276
276
|
}),
|
|
277
277
|
/*#__PURE__*/ _jsxs("div", {
|
|
278
|
-
className: "flex min-w-0 flex-col gap-
|
|
278
|
+
className: "flex min-w-0 flex-col gap-tight",
|
|
279
279
|
children: [
|
|
280
280
|
/*#__PURE__*/ _jsx(Text, {
|
|
281
281
|
size: "sm",
|
|
@@ -292,7 +292,7 @@ function WorkflowDefinitionsList({ definitions, isPending, isError, sync, runErr
|
|
|
292
292
|
]
|
|
293
293
|
}),
|
|
294
294
|
/*#__PURE__*/ _jsxs("div", {
|
|
295
|
-
className: "flex items-center justify-between gap-
|
|
295
|
+
className: "flex items-center justify-between gap-inline",
|
|
296
296
|
children: [
|
|
297
297
|
/*#__PURE__*/ _jsxs(Text, {
|
|
298
298
|
size: "xs",
|
|
@@ -325,7 +325,7 @@ function WorkflowDefinitionsList({ definitions, isPending, isError, sync, runErr
|
|
|
325
325
|
role: "alert",
|
|
326
326
|
type: "error",
|
|
327
327
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
328
|
-
className: "flex items-center justify-between gap-
|
|
328
|
+
className: "flex items-center justify-between gap-cluster",
|
|
329
329
|
children: [
|
|
330
330
|
/*#__PURE__*/ _jsx(Text, {
|
|
331
331
|
size: "sm",
|
|
@@ -370,7 +370,7 @@ function WorkflowSyncAlert({ sync }) {
|
|
|
370
370
|
role: "alert",
|
|
371
371
|
type: "error",
|
|
372
372
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
373
|
-
className: "flex flex-col gap-
|
|
373
|
+
className: "flex flex-col gap-tight",
|
|
374
374
|
children: [
|
|
375
375
|
/*#__PURE__*/ _jsx(Text, {
|
|
376
376
|
size: "sm",
|
|
@@ -401,7 +401,7 @@ function WorkflowSyncWarnings({ sync }) {
|
|
|
401
401
|
role: "status",
|
|
402
402
|
type: "warning",
|
|
403
403
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
404
|
-
className: "flex flex-col gap-
|
|
404
|
+
className: "flex flex-col gap-inline",
|
|
405
405
|
children: [
|
|
406
406
|
/*#__PURE__*/ _jsx(Text, {
|
|
407
407
|
size: "sm",
|
|
@@ -409,7 +409,7 @@ function WorkflowSyncWarnings({ sync }) {
|
|
|
409
409
|
children: "Workflow definition warnings"
|
|
410
410
|
}),
|
|
411
411
|
/*#__PURE__*/ _jsx("ul", {
|
|
412
|
-
className: "flex flex-col gap-
|
|
412
|
+
className: "flex flex-col gap-tight",
|
|
413
413
|
children: warningItems.map(({ key, warning })=>/*#__PURE__*/ _jsxs("li", {
|
|
414
414
|
children: [
|
|
415
415
|
/*#__PURE__*/ _jsx(Text, {
|
|
@@ -450,10 +450,10 @@ function DefinitionSheet({ definition, onOpenChange }) {
|
|
|
450
450
|
]
|
|
451
451
|
}),
|
|
452
452
|
/*#__PURE__*/ _jsxs(SheetBody, {
|
|
453
|
-
className: "gap-
|
|
453
|
+
className: "gap-group",
|
|
454
454
|
children: [
|
|
455
455
|
/*#__PURE__*/ _jsxs("div", {
|
|
456
|
-
className: "grid w-full gap-
|
|
456
|
+
className: "grid w-full gap-inline",
|
|
457
457
|
children: [
|
|
458
458
|
/*#__PURE__*/ _jsx(Metadata, {
|
|
459
459
|
label: "Definition id",
|
|
@@ -474,7 +474,7 @@ function DefinitionSheet({ definition, onOpenChange }) {
|
|
|
474
474
|
]
|
|
475
475
|
}),
|
|
476
476
|
/*#__PURE__*/ _jsxs("div", {
|
|
477
|
-
className: "flex w-full flex-col gap-
|
|
477
|
+
className: "flex w-full flex-col gap-inline",
|
|
478
478
|
children: [
|
|
479
479
|
/*#__PURE__*/ _jsx(Text, {
|
|
480
480
|
size: "sm",
|
|
@@ -482,7 +482,7 @@ function DefinitionSheet({ definition, onOpenChange }) {
|
|
|
482
482
|
children: "Normalized definition"
|
|
483
483
|
}),
|
|
484
484
|
/*#__PURE__*/ _jsx("pre", {
|
|
485
|
-
className: "max-h-[52vh] w-full overflow-auto rounded-8 border border-border-neutral-base bg-background-neutral-subtle p-
|
|
485
|
+
className: "max-h-[52vh] w-full overflow-auto rounded-8 border border-border-neutral-base bg-background-neutral-subtle p-panel-compact scrollbar",
|
|
486
486
|
children: /*#__PURE__*/ _jsx(Code, {
|
|
487
487
|
as: "code",
|
|
488
488
|
className: "whitespace-pre text-foreground-neutral-base",
|
|
@@ -500,7 +500,7 @@ function DefinitionSheet({ definition, onOpenChange }) {
|
|
|
500
500
|
}
|
|
501
501
|
function Metadata({ label, value }) {
|
|
502
502
|
return /*#__PURE__*/ _jsxs("div", {
|
|
503
|
-
className: "min-w-0 py-
|
|
503
|
+
className: "min-w-0 py-row first:pt-0 last:pb-0",
|
|
504
504
|
children: [
|
|
505
505
|
/*#__PURE__*/ _jsx(Text, {
|
|
506
506
|
size: "xs",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/pages/project-workflows-page.tsx"],"sourcesContent":["import {ApiError} from '@shipfox/client-api';\nimport {\n type Definition,\n type DefinitionSyncSummary,\n SourceStrip,\n useDefinitionsInfiniteQuery,\n useProjectQuery,\n} from '@shipfox/client-projects';\nimport {QueryLoadError} from '@shipfox/client-ui';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {EmptyState} from '@shipfox/react-ui/empty-state';\nimport {Icon, type IconName} from '@shipfox/react-ui/icon';\nimport {LoadErrorState} from '@shipfox/react-ui/load-error-state';\nimport {RelativeTime, RelativeTimeProvider} from '@shipfox/react-ui/relative-time';\nimport {\n Sheet,\n SheetBody,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from '@shipfox/react-ui/sheet';\nimport {Skeleton} from '@shipfox/react-ui/skeleton';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@shipfox/react-ui/table';\nimport {toast} from '@shipfox/react-ui/toast';\nimport {Code, Header, Text} from '@shipfox/react-ui/typography';\nimport {useState} from 'react';\nimport {useFireManualWorkflowMutation} from '#hooks/api/workflow-runs.js';\n\nexport function ProjectWorkflowsPage({projectId}: {projectId: string}) {\n return (\n <RelativeTimeProvider>\n <ProjectWorkflowsPageInner projectId={projectId} />\n </RelativeTimeProvider>\n );\n}\n\nfunction ProjectWorkflowsPageInner({projectId}: {projectId: string}) {\n const projectQuery = useProjectQuery(projectId);\n const definitionsQuery = useDefinitionsInfiniteQuery(projectId);\n const fireManual = useFireManualWorkflowMutation();\n const [selectedDefinition, setSelectedDefinition] = useState<Definition | null>(null);\n const [runError, setRunError] = useState<{definitionId: string; message: string} | null>(null);\n const definitions = definitionsQuery.data?.pages.flatMap((page) => page.definitions) ?? [];\n const sync = definitionsQuery.data?.pages[0]?.sync;\n\n async function handleRun(definition: Definition) {\n setRunError(null);\n if (!definition.manualTrigger) return;\n try {\n await fireManual.mutateAsync({projectId, definitionId: definition.id});\n toast.success('Run queued');\n } catch (error) {\n const message = errorMessage(error, 'Could not queue run.');\n setRunError({definitionId: definition.id, message});\n toast.error(message);\n }\n }\n\n return (\n <div className=\"flex w-full flex-col gap-24\">\n {projectQuery.isPending ? (\n <div className=\"flex flex-col gap-12\">\n <Skeleton className=\"h-28 w-1/3\" />\n <Skeleton className=\"h-18 w-1/2\" />\n </div>\n ) : null}\n\n {projectQuery.isError && projectQuery.data === undefined ? (\n projectQuery.error instanceof ApiError && projectQuery.error.status === 404 ? (\n <EmptyState\n icon=\"errorWarningLine\"\n title=\"Project not found\"\n description=\"This project doesn't exist, or you don't have access to it.\"\n />\n ) : (\n <QueryLoadError query={projectQuery} subject=\"project\" />\n )\n ) : null}\n\n {projectQuery.data ? (\n <>\n <header className=\"flex flex-col gap-4\">\n <Header variant=\"h2\">Workflows</Header>\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n Synced workflow definitions for this project source.\n </Text>\n </header>\n\n <SourceStrip\n connectionId={projectQuery.data.source.connectionId}\n externalRepositoryId={projectQuery.data.source.externalRepositoryId}\n sync={sync}\n isPending={definitionsQuery.isPending}\n />\n\n <WorkflowSyncAlert sync={sync} />\n <WorkflowSyncWarnings sync={sync} />\n\n <WorkflowDefinitionsList\n definitions={definitions}\n isPending={definitionsQuery.isPending}\n isError={definitionsQuery.isError}\n sync={sync ?? null}\n runError={runError}\n runningDefinitionId={\n fireManual.isPending && fireManual.variables\n ? fireManual.variables.definitionId\n : null\n }\n hasNextPage={definitionsQuery.hasNextPage}\n isFetchingNextPage={definitionsQuery.isFetchingNextPage}\n isFetchNextPageError={definitionsQuery.isFetchNextPageError}\n onRetry={() => definitionsQuery.refetch()}\n onLoadMore={() => definitionsQuery.fetchNextPage()}\n onOpenDefinition={setSelectedDefinition}\n onRun={(definition) => {\n void handleRun(definition);\n }}\n />\n </>\n ) : null}\n\n <DefinitionSheet\n definition={selectedDefinition}\n onOpenChange={(open) => {\n if (!open) setSelectedDefinition(null);\n }}\n />\n </div>\n );\n}\n\nfunction WorkflowDefinitionsList({\n definitions,\n isPending,\n isError,\n sync,\n runError,\n runningDefinitionId,\n hasNextPage,\n isFetchingNextPage,\n isFetchNextPageError,\n onRetry,\n onLoadMore,\n onOpenDefinition,\n onRun,\n}: {\n definitions: Definition[];\n isPending: boolean;\n isError: boolean;\n sync: DefinitionSyncSummary | null;\n runError: {definitionId: string; message: string} | null;\n runningDefinitionId: string | null;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n isFetchNextPageError: boolean;\n onRetry: () => void;\n onLoadMore: () => void;\n onOpenDefinition: (definition: Definition) => void;\n onRun: (definition: Definition) => void;\n}) {\n if (isPending) {\n return (\n <div className=\"flex flex-col gap-8\">\n <Skeleton className=\"h-40 w-full\" />\n <Skeleton className=\"h-40 w-full\" />\n <Skeleton className=\"h-40 w-full\" />\n </div>\n );\n }\n\n if (isError && definitions.length === 0) {\n return (\n <LoadErrorState\n title=\"Couldn't load workflows\"\n description=\"Definitions could not be loaded. Source metadata remains visible.\"\n onRetry={onRetry}\n retryLabel=\"Retry loading workflows\"\n />\n );\n }\n\n if (definitions.length === 0) {\n return <WorkflowEmptyState sync={sync} />;\n }\n\n return (\n <>\n <div className=\"hidden rounded-8 border border-border-neutral-base md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-40\"></TableHead>\n <TableHead>Workflow</TableHead>\n <TableHead className=\"w-180\">Updated</TableHead>\n <TableHead className=\"w-80 text-right\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {definitions.map((definition) => {\n const runErrorMessage =\n runError?.definitionId === definition.id ? runError.message : null;\n const isRunning = runningDefinitionId === definition.id;\n\n return (\n // The workflow-name cell holds a `<button>` so the row is\n // keyboard-reachable (Tab focuses, Enter/Space activates\n // via native button semantics). The TableRow itself is no\n // longer clickable: a row-level onClick would be invisible\n // to keyboard users and require custom keydown handling.\n // The `group` class on the row still drives the Run button\n // reveal on hover or focus-within.\n <TableRow key={definition.id} className=\"group\">\n <TableCell>\n <Icon\n name={sourceIcon(definition.source)}\n className=\"size-16 text-foreground-neutral-muted\"\n aria-hidden=\"true\"\n />\n </TableCell>\n <TableCell className=\"max-w-260\">\n <div className=\"flex min-w-0 flex-col gap-2\">\n <button\n type=\"button\"\n onClick={() => onOpenDefinition(definition)}\n className=\"flex min-w-0 flex-col gap-2 text-left outline-none focus-visible:shadow-border-interactive-with-active rounded-4\"\n >\n <Text size=\"sm\" bold className=\"truncate\">\n {definition.name}\n </Text>\n <Code className=\"truncate text-foreground-neutral-muted\">\n {definition.configPath ?? 'Manual definition'}\n </Code>\n </button>\n {runErrorMessage ? (\n <Text size=\"xs\" className=\"text-tag-error-text\">\n {runErrorMessage}\n </Text>\n ) : null}\n </div>\n </TableCell>\n <TableCell className=\"text-foreground-neutral-muted\">\n <RelativeTime value={definition.updatedAt} />\n </TableCell>\n <TableCell>\n {definition.manualTrigger ? (\n <div className=\"flex justify-end opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100\">\n <Button size=\"xs\" isLoading={isRunning} onClick={() => onRun(definition)}>\n Run\n </Button>\n </div>\n ) : null}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n\n <div className=\"flex flex-col rounded-8 border border-border-neutral-base md:hidden\">\n {definitions.map((definition) => {\n const runErrorMessage =\n runError?.definitionId === definition.id ? runError.message : null;\n const isRunning = runningDefinitionId === definition.id;\n\n return (\n <div\n key={definition.id}\n className=\"flex flex-col gap-10 border-b border-border-neutral-base p-12 last:border-b-0\"\n >\n <button\n type=\"button\"\n className=\"flex min-w-0 items-start gap-10 text-left\"\n onClick={() => onOpenDefinition(definition)}\n >\n <Icon\n name={sourceIcon(definition.source)}\n className=\"size-16 shrink-0 text-foreground-neutral-muted\"\n aria-hidden=\"true\"\n />\n <div className=\"flex min-w-0 flex-col gap-4\">\n <Text size=\"sm\" bold className=\"break-words\">\n {definition.name}\n </Text>\n <Code className=\"break-words text-foreground-neutral-muted\">\n {definition.configPath ?? 'Manual definition'}\n </Code>\n </div>\n </button>\n <div className=\"flex items-center justify-between gap-8\">\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n Updated <RelativeTime value={definition.updatedAt} />\n </Text>\n {definition.manualTrigger ? (\n <Button size=\"sm\" isLoading={isRunning} onClick={() => onRun(definition)}>\n Run\n </Button>\n ) : null}\n </div>\n {runErrorMessage ? (\n <Text size=\"xs\" className=\"text-tag-error-text\">\n {runErrorMessage}\n </Text>\n ) : null}\n </div>\n );\n })}\n </div>\n\n {isFetchNextPageError ? (\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex items-center justify-between gap-12\">\n <Text size=\"sm\">Could not load more workflows.</Text>\n <Button size=\"sm\" variant=\"secondary\" onClick={onLoadMore}>\n Retry\n </Button>\n </div>\n </Callout>\n ) : null}\n\n {hasNextPage ? (\n <div className=\"flex justify-center\">\n <Button size=\"sm\" variant=\"secondary\" isLoading={isFetchingNextPage} onClick={onLoadMore}>\n Load more\n </Button>\n </div>\n ) : null}\n </>\n );\n}\n\nfunction sourceIcon(source: 'manual' | 'vcs'): IconName {\n return source === 'vcs' ? ('gitBranchLine' as IconName) : ('terminalLine' as IconName);\n}\n\nfunction WorkflowEmptyState({sync}: {sync: DefinitionSyncSummary | null}) {\n const message =\n sync?.status === 'failed' && sync.lastErrorCode === 'no-workflow-files'\n ? 'No workflow files found under .shipfox/workflows/.'\n : sync?.status === 'failed'\n ? (sync.lastErrorMessage ?? 'Workflow definitions could not be synced.')\n : sync?.status === 'syncing'\n ? 'Workflow definitions are being discovered.'\n : sync?.status === 'succeeded'\n ? 'No workflow definitions found.'\n : 'Workflow sync has not reported yet.';\n\n return <EmptyState icon=\"flowChart\" title=\"No workflows\" description={message} />;\n}\n\nfunction WorkflowSyncAlert({sync}: {sync: DefinitionSyncSummary | null | undefined}) {\n if (sync?.status !== 'failed') return null;\n\n return (\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex flex-col gap-4\">\n <Text size=\"sm\" bold>\n Workflow sync failed\n </Text>\n <Text size=\"sm\">\n {sync.lastErrorMessage ?? 'The latest workflow sync failed before definitions updated.'}\n </Text>\n </div>\n </Callout>\n );\n}\n\nfunction WorkflowSyncWarnings({sync}: {sync: DefinitionSyncSummary | null | undefined}) {\n if (sync?.status !== 'succeeded' || sync.warnings.length === 0) return null;\n\n const seenKeys = new Map<string, number>();\n const warningItems = sync.warnings.map((warning) => {\n const baseKey = `${warning.code}-${warning.path ?? 'workflow'}-${warning.message}`;\n const occurrence = seenKeys.get(baseKey) ?? 0;\n seenKeys.set(baseKey, occurrence + 1);\n return {key: `${baseKey}-${occurrence}`, warning};\n });\n\n return (\n <Callout role=\"status\" type=\"warning\">\n <div className=\"flex flex-col gap-6\">\n <Text size=\"sm\" bold>\n Workflow definition warnings\n </Text>\n <ul className=\"flex flex-col gap-4\">\n {warningItems.map(({key, warning}) => (\n <li key={key}>\n <Text size=\"sm\">{warning.message}</Text>\n {warning.path ? (\n <Code className=\"text-foreground-neutral-muted\">{warning.path}</Code>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n </Callout>\n );\n}\n\nfunction DefinitionSheet({\n definition,\n onOpenChange,\n}: {\n definition: Definition | null;\n onOpenChange: (open: boolean) => void;\n}) {\n const normalizedJson = definition\n ? JSON.stringify(\n {\n workflow_document: definition.workflowDocument,\n workflow_model: definition.workflowModel,\n },\n null,\n 2,\n )\n : '';\n\n return (\n <Sheet open={Boolean(definition)} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-[560px]\">\n {definition ? (\n <>\n <SheetHeader>\n <SheetTitle>{definition.name}</SheetTitle>\n <SheetDescription>\n {definition.configPath ?? 'Manual workflow definition'}\n </SheetDescription>\n </SheetHeader>\n <SheetBody className=\"gap-18\">\n <div className=\"grid w-full gap-10\">\n <Metadata label=\"Definition id\" value={definition.id} />\n <Metadata label=\"Source\" value={definition.source} />\n <Metadata label=\"Ref\" value={definition.ref ?? 'Not set'} />\n <Metadata label=\"SHA\" value={definition.sha ?? 'Not set'} />\n </div>\n <div className=\"flex w-full flex-col gap-8\">\n <Text size=\"sm\" bold>\n Normalized definition\n </Text>\n <pre className=\"max-h-[52vh] w-full overflow-auto rounded-8 border border-border-neutral-base bg-background-neutral-subtle p-12 scrollbar\">\n <Code as=\"code\" className=\"whitespace-pre text-foreground-neutral-base\">\n {normalizedJson}\n </Code>\n </pre>\n </div>\n </SheetBody>\n </>\n ) : null}\n </SheetContent>\n </Sheet>\n );\n}\n\nfunction Metadata({label, value}: {label: string; value: string}) {\n return (\n <div className=\"min-w-0 py-12 first:pt-0 last:pb-0\">\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n {label}\n </Text>\n <Text size=\"sm\" className=\"break-words\">\n {value}\n </Text>\n </div>\n );\n}\n\nfunction errorMessage(error: unknown, fallback: string) {\n if (error instanceof ApiError && error.message) return error.message;\n if (error instanceof Error && error.message) return error.message;\n return fallback;\n}\n"],"names":["ApiError","SourceStrip","useDefinitionsInfiniteQuery","useProjectQuery","QueryLoadError","Button","Callout","EmptyState","Icon","LoadErrorState","RelativeTime","RelativeTimeProvider","Sheet","SheetBody","SheetContent","SheetDescription","SheetHeader","SheetTitle","Skeleton","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","toast","Code","Header","Text","useState","useFireManualWorkflowMutation","ProjectWorkflowsPage","projectId","ProjectWorkflowsPageInner","projectQuery","definitionsQuery","fireManual","selectedDefinition","setSelectedDefinition","runError","setRunError","definitions","data","pages","flatMap","page","sync","handleRun","definition","manualTrigger","mutateAsync","definitionId","id","success","error","message","errorMessage","div","className","isPending","isError","undefined","status","icon","title","description","query","subject","header","variant","size","connectionId","source","externalRepositoryId","WorkflowSyncAlert","WorkflowSyncWarnings","WorkflowDefinitionsList","runningDefinitionId","variables","hasNextPage","isFetchingNextPage","isFetchNextPageError","onRetry","refetch","onLoadMore","fetchNextPage","onOpenDefinition","onRun","DefinitionSheet","onOpenChange","open","length","retryLabel","WorkflowEmptyState","map","runErrorMessage","isRunning","name","sourceIcon","aria-hidden","button","type","onClick","bold","configPath","value","updatedAt","isLoading","role","lastErrorCode","lastErrorMessage","warnings","seenKeys","Map","warningItems","warning","baseKey","code","path","occurrence","get","set","key","ul","li","normalizedJson","JSON","stringify","workflow_document","workflowDocument","workflow_model","workflowModel","Boolean","Metadata","label","ref","sha","pre","as","fallback","Error"],"mappings":";AAAA,SAAQA,QAAQ,QAAO,sBAAsB;AAC7C,SAGEC,WAAW,EACXC,2BAA2B,EAC3BC,eAAe,QACV,2BAA2B;AAClC,SAAQC,cAAc,QAAO,qBAAqB;AAClD,SAAQC,MAAM,QAAO,2BAA2B;AAChD,SAAQC,OAAO,QAAO,4BAA4B;AAClD,SAAQC,UAAU,QAAO,gCAAgC;AACzD,SAAQC,IAAI,QAAsB,yBAAyB;AAC3D,SAAQC,cAAc,QAAO,qCAAqC;AAClE,SAAQC,YAAY,EAAEC,oBAAoB,QAAO,kCAAkC;AACnF,SACEC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,WAAW,EACXC,UAAU,QACL,0BAA0B;AACjC,SAAQC,QAAQ,QAAO,6BAA6B;AACpD,SACEC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,QAAQ,QACH,0BAA0B;AACjC,SAAQC,KAAK,QAAO,0BAA0B;AAC9C,SAAQC,IAAI,EAAEC,MAAM,EAAEC,IAAI,QAAO,+BAA+B;AAChE,SAAQC,QAAQ,QAAO,QAAQ;AAC/B,SAAQC,6BAA6B,QAAO,8BAA8B;AAE1E,OAAO,SAASC,qBAAqB,EAACC,SAAS,EAAsB;IACnE,qBACE,KAACrB;kBACC,cAAA,KAACsB;YAA0BD,WAAWA;;;AAG5C;AAEA,SAASC,0BAA0B,EAACD,SAAS,EAAsB;IACjE,MAAME,eAAe/B,gBAAgB6B;IACrC,MAAMG,mBAAmBjC,4BAA4B8B;IACrD,MAAMI,aAAaN;IACnB,MAAM,CAACO,oBAAoBC,sBAAsB,GAAGT,SAA4B;IAChF,MAAM,CAACU,UAAUC,YAAY,GAAGX,SAAyD;IACzF,MAAMY,cAAcN,iBAAiBO,IAAI,EAAEC,MAAMC,QAAQ,CAACC,OAASA,KAAKJ,WAAW,KAAK,EAAE;IAC1F,MAAMK,OAAOX,iBAAiBO,IAAI,EAAEC,KAAK,CAAC,EAAE,EAAEG;IAE9C,eAAeC,UAAUC,UAAsB;QAC7CR,YAAY;QACZ,IAAI,CAACQ,WAAWC,aAAa,EAAE;QAC/B,IAAI;YACF,MAAMb,WAAWc,WAAW,CAAC;gBAAClB;gBAAWmB,cAAcH,WAAWI,EAAE;YAAA;YACpE3B,MAAM4B,OAAO,CAAC;QAChB,EAAE,OAAOC,OAAO;YACd,MAAMC,UAAUC,aAAaF,OAAO;YACpCd,YAAY;gBAACW,cAAcH,WAAWI,EAAE;gBAAEG;YAAO;YACjD9B,MAAM6B,KAAK,CAACC;QACd;IACF;IAEA,qBACE,MAACE;QAAIC,WAAU;;YACZxB,aAAayB,SAAS,iBACrB,MAACF;gBAAIC,WAAU;;kCACb,KAACxC;wBAASwC,WAAU;;kCACpB,KAACxC;wBAASwC,WAAU;;;iBAEpB;YAEHxB,aAAa0B,OAAO,IAAI1B,aAAaQ,IAAI,KAAKmB,YAC7C3B,aAAaoB,KAAK,YAAYtD,YAAYkC,aAAaoB,KAAK,CAACQ,MAAM,KAAK,oBACtE,KAACvD;gBACCwD,MAAK;gBACLC,OAAM;gBACNC,aAAY;+BAGd,KAAC7D;gBAAe8D,OAAOhC;gBAAciC,SAAQ;iBAE7C;YAEHjC,aAAaQ,IAAI,iBAChB;;kCACE,MAAC0B;wBAAOV,WAAU;;0CAChB,KAAC/B;gCAAO0C,SAAQ;0CAAK;;0CACrB,KAACzC;gCAAK0C,MAAK;gCAAKZ,WAAU;0CAAgC;;;;kCAK5D,KAACzD;wBACCsE,cAAcrC,aAAaQ,IAAI,CAAC8B,MAAM,CAACD,YAAY;wBACnDE,sBAAsBvC,aAAaQ,IAAI,CAAC8B,MAAM,CAACC,oBAAoB;wBACnE3B,MAAMA;wBACNa,WAAWxB,iBAAiBwB,SAAS;;kCAGvC,KAACe;wBAAkB5B,MAAMA;;kCACzB,KAAC6B;wBAAqB7B,MAAMA;;kCAE5B,KAAC8B;wBACCnC,aAAaA;wBACbkB,WAAWxB,iBAAiBwB,SAAS;wBACrCC,SAASzB,iBAAiByB,OAAO;wBACjCd,MAAMA,QAAQ;wBACdP,UAAUA;wBACVsC,qBACEzC,WAAWuB,SAAS,IAAIvB,WAAW0C,SAAS,GACxC1C,WAAW0C,SAAS,CAAC3B,YAAY,GACjC;wBAEN4B,aAAa5C,iBAAiB4C,WAAW;wBACzCC,oBAAoB7C,iBAAiB6C,kBAAkB;wBACvDC,sBAAsB9C,iBAAiB8C,oBAAoB;wBAC3DC,SAAS,IAAM/C,iBAAiBgD,OAAO;wBACvCC,YAAY,IAAMjD,iBAAiBkD,aAAa;wBAChDC,kBAAkBhD;wBAClBiD,OAAO,CAACvC;4BACN,KAAKD,UAAUC;wBACjB;;;iBAGF;0BAEJ,KAACwC;gBACCxC,YAAYX;gBACZoD,cAAc,CAACC;oBACb,IAAI,CAACA,MAAMpD,sBAAsB;gBACnC;;;;AAIR;AAEA,SAASsC,wBAAwB,EAC/BnC,WAAW,EACXkB,SAAS,EACTC,OAAO,EACPd,IAAI,EACJP,QAAQ,EACRsC,mBAAmB,EACnBE,WAAW,EACXC,kBAAkB,EAClBC,oBAAoB,EACpBC,OAAO,EACPE,UAAU,EACVE,gBAAgB,EAChBC,KAAK,EAeN;IACC,IAAI5B,WAAW;QACb,qBACE,MAACF;YAAIC,WAAU;;8BACb,KAACxC;oBAASwC,WAAU;;8BACpB,KAACxC;oBAASwC,WAAU;;8BACpB,KAACxC;oBAASwC,WAAU;;;;IAG1B;IAEA,IAAIE,WAAWnB,YAAYkD,MAAM,KAAK,GAAG;QACvC,qBACE,KAAClF;YACCuD,OAAM;YACNC,aAAY;YACZiB,SAASA;YACTU,YAAW;;IAGjB;IAEA,IAAInD,YAAYkD,MAAM,KAAK,GAAG;QAC5B,qBAAO,KAACE;YAAmB/C,MAAMA;;IACnC;IAEA,qBACE;;0BACE,KAACW;gBAAIC,WAAU;0BACb,cAAA,MAACvC;;sCACC,KAACI;sCACC,cAAA,MAACC;;kDACC,KAACF;wCAAUoC,WAAU;;kDACrB,KAACpC;kDAAU;;kDACX,KAACA;wCAAUoC,WAAU;kDAAQ;;kDAC7B,KAACpC;wCAAUoC,WAAU;;;;;sCAGzB,KAACtC;sCACEqB,YAAYqD,GAAG,CAAC,CAAC9C;gCAChB,MAAM+C,kBACJxD,UAAUY,iBAAiBH,WAAWI,EAAE,GAAGb,SAASgB,OAAO,GAAG;gCAChE,MAAMyC,YAAYnB,wBAAwB7B,WAAWI,EAAE;gCAEvD,OACE,0DAA0D;gCAC1D,yDAAyD;gCACzD,0DAA0D;gCAC1D,2DAA2D;gCAC3D,yDAAyD;gCACzD,2DAA2D;gCAC3D,mCAAmC;8CACnC,MAAC5B;oCAA6BkC,WAAU;;sDACtC,KAACrC;sDACC,cAAA,KAACb;gDACCyF,MAAMC,WAAWlD,WAAWwB,MAAM;gDAClCd,WAAU;gDACVyC,eAAY;;;sDAGhB,KAAC9E;4CAAUqC,WAAU;sDACnB,cAAA,MAACD;gDAAIC,WAAU;;kEACb,MAAC0C;wDACCC,MAAK;wDACLC,SAAS,IAAMhB,iBAAiBtC;wDAChCU,WAAU;;0EAEV,KAAC9B;gEAAK0C,MAAK;gEAAKiC,IAAI;gEAAC7C,WAAU;0EAC5BV,WAAWiD,IAAI;;0EAElB,KAACvE;gEAAKgC,WAAU;0EACbV,WAAWwD,UAAU,IAAI;;;;oDAG7BT,gCACC,KAACnE;wDAAK0C,MAAK;wDAAKZ,WAAU;kEACvBqC;yDAED;;;;sDAGR,KAAC1E;4CAAUqC,WAAU;sDACnB,cAAA,KAAChD;gDAAa+F,OAAOzD,WAAW0D,SAAS;;;sDAE3C,KAACrF;sDACE2B,WAAWC,aAAa,iBACvB,KAACQ;gDAAIC,WAAU;0DACb,cAAA,KAACrD;oDAAOiE,MAAK;oDAAKqC,WAAWX;oDAAWM,SAAS,IAAMf,MAAMvC;8DAAa;;iDAI1E;;;mCAvCOA,WAAWI,EAAE;4BA2ChC;;;;;0BAKN,KAACK;gBAAIC,WAAU;0BACZjB,YAAYqD,GAAG,CAAC,CAAC9C;oBAChB,MAAM+C,kBACJxD,UAAUY,iBAAiBH,WAAWI,EAAE,GAAGb,SAASgB,OAAO,GAAG;oBAChE,MAAMyC,YAAYnB,wBAAwB7B,WAAWI,EAAE;oBAEvD,qBACE,MAACK;wBAECC,WAAU;;0CAEV,MAAC0C;gCACCC,MAAK;gCACL3C,WAAU;gCACV4C,SAAS,IAAMhB,iBAAiBtC;;kDAEhC,KAACxC;wCACCyF,MAAMC,WAAWlD,WAAWwB,MAAM;wCAClCd,WAAU;wCACVyC,eAAY;;kDAEd,MAAC1C;wCAAIC,WAAU;;0DACb,KAAC9B;gDAAK0C,MAAK;gDAAKiC,IAAI;gDAAC7C,WAAU;0DAC5BV,WAAWiD,IAAI;;0DAElB,KAACvE;gDAAKgC,WAAU;0DACbV,WAAWwD,UAAU,IAAI;;;;;;0CAIhC,MAAC/C;gCAAIC,WAAU;;kDACb,MAAC9B;wCAAK0C,MAAK;wCAAKZ,WAAU;;4CAAgC;0DAChD,KAAChD;gDAAa+F,OAAOzD,WAAW0D,SAAS;;;;oCAElD1D,WAAWC,aAAa,iBACvB,KAAC5C;wCAAOiE,MAAK;wCAAKqC,WAAWX;wCAAWM,SAAS,IAAMf,MAAMvC;kDAAa;yCAGxE;;;4BAEL+C,gCACC,KAACnE;gCAAK0C,MAAK;gCAAKZ,WAAU;0CACvBqC;iCAED;;uBApCC/C,WAAWI,EAAE;gBAuCxB;;YAGD6B,qCACC,KAAC3E;gBAAQsG,MAAK;gBAAQP,MAAK;0BACzB,cAAA,MAAC5C;oBAAIC,WAAU;;sCACb,KAAC9B;4BAAK0C,MAAK;sCAAK;;sCAChB,KAACjE;4BAAOiE,MAAK;4BAAKD,SAAQ;4BAAYiC,SAASlB;sCAAY;;;;iBAK7D;YAEHL,4BACC,KAACtB;gBAAIC,WAAU;0BACb,cAAA,KAACrD;oBAAOiE,MAAK;oBAAKD,SAAQ;oBAAYsC,WAAW3B;oBAAoBsB,SAASlB;8BAAY;;iBAI1F;;;AAGV;AAEA,SAASc,WAAW1B,MAAwB;IAC1C,OAAOA,WAAW,QAAS,kBAAgC;AAC7D;AAEA,SAASqB,mBAAmB,EAAC/C,IAAI,EAAuC;IACtE,MAAMS,UACJT,MAAMgB,WAAW,YAAYhB,KAAK+D,aAAa,KAAK,sBAChD,uDACA/D,MAAMgB,WAAW,WACdhB,KAAKgE,gBAAgB,IAAI,8CAC1BhE,MAAMgB,WAAW,YACf,+CACAhB,MAAMgB,WAAW,cACf,mCACA;IAEZ,qBAAO,KAACvD;QAAWwD,MAAK;QAAYC,OAAM;QAAeC,aAAaV;;AACxE;AAEA,SAASmB,kBAAkB,EAAC5B,IAAI,EAAmD;IACjF,IAAIA,MAAMgB,WAAW,UAAU,OAAO;IAEtC,qBACE,KAACxD;QAAQsG,MAAK;QAAQP,MAAK;kBACzB,cAAA,MAAC5C;YAAIC,WAAU;;8BACb,KAAC9B;oBAAK0C,MAAK;oBAAKiC,IAAI;8BAAC;;8BAGrB,KAAC3E;oBAAK0C,MAAK;8BACRxB,KAAKgE,gBAAgB,IAAI;;;;;AAKpC;AAEA,SAASnC,qBAAqB,EAAC7B,IAAI,EAAmD;IACpF,IAAIA,MAAMgB,WAAW,eAAehB,KAAKiE,QAAQ,CAACpB,MAAM,KAAK,GAAG,OAAO;IAEvE,MAAMqB,WAAW,IAAIC;IACrB,MAAMC,eAAepE,KAAKiE,QAAQ,CAACjB,GAAG,CAAC,CAACqB;QACtC,MAAMC,UAAU,GAAGD,QAAQE,IAAI,CAAC,CAAC,EAAEF,QAAQG,IAAI,IAAI,WAAW,CAAC,EAAEH,QAAQ5D,OAAO,EAAE;QAClF,MAAMgE,aAAaP,SAASQ,GAAG,CAACJ,YAAY;QAC5CJ,SAASS,GAAG,CAACL,SAASG,aAAa;QACnC,OAAO;YAACG,KAAK,GAAGN,QAAQ,CAAC,EAAEG,YAAY;YAAEJ;QAAO;IAClD;IAEA,qBACE,KAAC7G;QAAQsG,MAAK;QAASP,MAAK;kBAC1B,cAAA,MAAC5C;YAAIC,WAAU;;8BACb,KAAC9B;oBAAK0C,MAAK;oBAAKiC,IAAI;8BAAC;;8BAGrB,KAACoB;oBAAGjE,WAAU;8BACXwD,aAAapB,GAAG,CAAC,CAAC,EAAC4B,GAAG,EAAEP,OAAO,EAAC,iBAC/B,MAACS;;8CACC,KAAChG;oCAAK0C,MAAK;8CAAM6C,QAAQ5D,OAAO;;gCAC/B4D,QAAQG,IAAI,iBACX,KAAC5F;oCAAKgC,WAAU;8CAAiCyD,QAAQG,IAAI;qCAC3D;;2BAJGI;;;;;AAWrB;AAEA,SAASlC,gBAAgB,EACvBxC,UAAU,EACVyC,YAAY,EAIb;IACC,MAAMoC,iBAAiB7E,aACnB8E,KAAKC,SAAS,CACZ;QACEC,mBAAmBhF,WAAWiF,gBAAgB;QAC9CC,gBAAgBlF,WAAWmF,aAAa;IAC1C,GACA,MACA,KAEF;IAEJ,qBACE,KAACvH;QAAM8E,MAAM0C,QAAQpF;QAAayC,cAAcA;kBAC9C,cAAA,KAAC3E;YAAa4C,WAAU;sBACrBV,2BACC;;kCACE,MAAChC;;0CACC,KAACC;0CAAY+B,WAAWiD,IAAI;;0CAC5B,KAAClF;0CACEiC,WAAWwD,UAAU,IAAI;;;;kCAG9B,MAAC3F;wBAAU6C,WAAU;;0CACnB,MAACD;gCAAIC,WAAU;;kDACb,KAAC2E;wCAASC,OAAM;wCAAgB7B,OAAOzD,WAAWI,EAAE;;kDACpD,KAACiF;wCAASC,OAAM;wCAAS7B,OAAOzD,WAAWwB,MAAM;;kDACjD,KAAC6D;wCAASC,OAAM;wCAAM7B,OAAOzD,WAAWuF,GAAG,IAAI;;kDAC/C,KAACF;wCAASC,OAAM;wCAAM7B,OAAOzD,WAAWwF,GAAG,IAAI;;;;0CAEjD,MAAC/E;gCAAIC,WAAU;;kDACb,KAAC9B;wCAAK0C,MAAK;wCAAKiC,IAAI;kDAAC;;kDAGrB,KAACkC;wCAAI/E,WAAU;kDACb,cAAA,KAAChC;4CAAKgH,IAAG;4CAAOhF,WAAU;sDACvBmE;;;;;;;;iBAMT;;;AAIZ;AAEA,SAASQ,SAAS,EAACC,KAAK,EAAE7B,KAAK,EAAiC;IAC9D,qBACE,MAAChD;QAAIC,WAAU;;0BACb,KAAC9B;gBAAK0C,MAAK;gBAAKZ,WAAU;0BACvB4E;;0BAEH,KAAC1G;gBAAK0C,MAAK;gBAAKZ,WAAU;0BACvB+C;;;;AAIT;AAEA,SAASjD,aAAaF,KAAc,EAAEqF,QAAgB;IACpD,IAAIrF,iBAAiBtD,YAAYsD,MAAMC,OAAO,EAAE,OAAOD,MAAMC,OAAO;IACpE,IAAID,iBAAiBsF,SAAStF,MAAMC,OAAO,EAAE,OAAOD,MAAMC,OAAO;IACjE,OAAOoF;AACT"}
|
|
1
|
+
{"version":3,"sources":["../../src/pages/project-workflows-page.tsx"],"sourcesContent":["import {ApiError} from '@shipfox/client-api';\nimport {\n type Definition,\n type DefinitionSyncSummary,\n SourceStrip,\n useDefinitionsInfiniteQuery,\n useProjectQuery,\n} from '@shipfox/client-projects';\nimport {QueryLoadError} from '@shipfox/client-ui';\nimport {Button} from '@shipfox/react-ui/button';\nimport {Callout} from '@shipfox/react-ui/callout';\nimport {EmptyState} from '@shipfox/react-ui/empty-state';\nimport {Icon, type IconName} from '@shipfox/react-ui/icon';\nimport {LoadErrorState} from '@shipfox/react-ui/load-error-state';\nimport {RelativeTime, RelativeTimeProvider} from '@shipfox/react-ui/relative-time';\nimport {\n Sheet,\n SheetBody,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from '@shipfox/react-ui/sheet';\nimport {Skeleton} from '@shipfox/react-ui/skeleton';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@shipfox/react-ui/table';\nimport {toast} from '@shipfox/react-ui/toast';\nimport {Code, Header, Text} from '@shipfox/react-ui/typography';\nimport {useState} from 'react';\nimport {useFireManualWorkflowMutation} from '#hooks/api/workflow-runs.js';\n\nexport function ProjectWorkflowsPage({projectId}: {projectId: string}) {\n return (\n <RelativeTimeProvider>\n <ProjectWorkflowsPageInner projectId={projectId} />\n </RelativeTimeProvider>\n );\n}\n\nfunction ProjectWorkflowsPageInner({projectId}: {projectId: string}) {\n const projectQuery = useProjectQuery(projectId);\n const definitionsQuery = useDefinitionsInfiniteQuery(projectId);\n const fireManual = useFireManualWorkflowMutation();\n const [selectedDefinition, setSelectedDefinition] = useState<Definition | null>(null);\n const [runError, setRunError] = useState<{definitionId: string; message: string} | null>(null);\n const definitions = definitionsQuery.data?.pages.flatMap((page) => page.definitions) ?? [];\n const sync = definitionsQuery.data?.pages[0]?.sync;\n\n async function handleRun(definition: Definition) {\n setRunError(null);\n if (!definition.manualTrigger) return;\n try {\n await fireManual.mutateAsync({projectId, definitionId: definition.id});\n toast.success('Run queued');\n } catch (error) {\n const message = errorMessage(error, 'Could not queue run.');\n setRunError({definitionId: definition.id, message});\n toast.error(message);\n }\n }\n\n return (\n <div className=\"flex w-full flex-col gap-section\">\n {projectQuery.isPending ? (\n <div className=\"flex flex-col gap-cluster\">\n <Skeleton className=\"h-28 w-1/3\" />\n <Skeleton className=\"h-18 w-1/2\" />\n </div>\n ) : null}\n\n {projectQuery.isError && projectQuery.data === undefined ? (\n projectQuery.error instanceof ApiError && projectQuery.error.status === 404 ? (\n <EmptyState\n icon=\"errorWarningLine\"\n title=\"Project not found\"\n description=\"This project doesn't exist, or you don't have access to it.\"\n />\n ) : (\n <QueryLoadError query={projectQuery} subject=\"project\" />\n )\n ) : null}\n\n {projectQuery.data ? (\n <>\n <header className=\"flex flex-col gap-tight\">\n <Header variant=\"h2\">Workflows</Header>\n <Text size=\"sm\" className=\"text-foreground-neutral-muted\">\n Synced workflow definitions for this project source.\n </Text>\n </header>\n\n <SourceStrip\n connectionId={projectQuery.data.source.connectionId}\n externalRepositoryId={projectQuery.data.source.externalRepositoryId}\n sync={sync}\n isPending={definitionsQuery.isPending}\n />\n\n <WorkflowSyncAlert sync={sync} />\n <WorkflowSyncWarnings sync={sync} />\n\n <WorkflowDefinitionsList\n definitions={definitions}\n isPending={definitionsQuery.isPending}\n isError={definitionsQuery.isError}\n sync={sync ?? null}\n runError={runError}\n runningDefinitionId={\n fireManual.isPending && fireManual.variables\n ? fireManual.variables.definitionId\n : null\n }\n hasNextPage={definitionsQuery.hasNextPage}\n isFetchingNextPage={definitionsQuery.isFetchingNextPage}\n isFetchNextPageError={definitionsQuery.isFetchNextPageError}\n onRetry={() => definitionsQuery.refetch()}\n onLoadMore={() => definitionsQuery.fetchNextPage()}\n onOpenDefinition={setSelectedDefinition}\n onRun={(definition) => {\n void handleRun(definition);\n }}\n />\n </>\n ) : null}\n\n <DefinitionSheet\n definition={selectedDefinition}\n onOpenChange={(open) => {\n if (!open) setSelectedDefinition(null);\n }}\n />\n </div>\n );\n}\n\nfunction WorkflowDefinitionsList({\n definitions,\n isPending,\n isError,\n sync,\n runError,\n runningDefinitionId,\n hasNextPage,\n isFetchingNextPage,\n isFetchNextPageError,\n onRetry,\n onLoadMore,\n onOpenDefinition,\n onRun,\n}: {\n definitions: Definition[];\n isPending: boolean;\n isError: boolean;\n sync: DefinitionSyncSummary | null;\n runError: {definitionId: string; message: string} | null;\n runningDefinitionId: string | null;\n hasNextPage: boolean;\n isFetchingNextPage: boolean;\n isFetchNextPageError: boolean;\n onRetry: () => void;\n onLoadMore: () => void;\n onOpenDefinition: (definition: Definition) => void;\n onRun: (definition: Definition) => void;\n}) {\n if (isPending) {\n return (\n <div className=\"flex flex-col gap-inline\">\n <Skeleton className=\"h-40 w-full\" />\n <Skeleton className=\"h-40 w-full\" />\n <Skeleton className=\"h-40 w-full\" />\n </div>\n );\n }\n\n if (isError && definitions.length === 0) {\n return (\n <LoadErrorState\n title=\"Couldn't load workflows\"\n description=\"Definitions could not be loaded. Source metadata remains visible.\"\n onRetry={onRetry}\n retryLabel=\"Retry loading workflows\"\n />\n );\n }\n\n if (definitions.length === 0) {\n return <WorkflowEmptyState sync={sync} />;\n }\n\n return (\n <>\n <div className=\"hidden rounded-8 border border-border-neutral-base md:block\">\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead className=\"w-40\"></TableHead>\n <TableHead>Workflow</TableHead>\n <TableHead className=\"w-180\">Updated</TableHead>\n <TableHead className=\"w-80 text-right\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {definitions.map((definition) => {\n const runErrorMessage =\n runError?.definitionId === definition.id ? runError.message : null;\n const isRunning = runningDefinitionId === definition.id;\n\n return (\n // The workflow-name cell holds a `<button>` so the row is\n // keyboard-reachable (Tab focuses, Enter/Space activates\n // via native button semantics). The TableRow itself is no\n // longer clickable: a row-level onClick would be invisible\n // to keyboard users and require custom keydown handling.\n // The `group` class on the row still drives the Run button\n // reveal on hover or focus-within.\n <TableRow key={definition.id} className=\"group\">\n <TableCell>\n <Icon\n name={sourceIcon(definition.source)}\n className=\"size-16 text-foreground-neutral-muted\"\n aria-hidden=\"true\"\n />\n </TableCell>\n <TableCell className=\"max-w-260\">\n <div className=\"flex min-w-0 flex-col gap-tight\">\n <button\n type=\"button\"\n onClick={() => onOpenDefinition(definition)}\n className=\"flex min-w-0 flex-col gap-tight text-left outline-none focus-visible:shadow-border-interactive-with-active rounded-4\"\n >\n <Text size=\"sm\" bold className=\"truncate\">\n {definition.name}\n </Text>\n <Code className=\"truncate text-foreground-neutral-muted\">\n {definition.configPath ?? 'Manual definition'}\n </Code>\n </button>\n {runErrorMessage ? (\n <Text size=\"xs\" className=\"text-tag-error-text\">\n {runErrorMessage}\n </Text>\n ) : null}\n </div>\n </TableCell>\n <TableCell className=\"text-foreground-neutral-muted\">\n <RelativeTime value={definition.updatedAt} />\n </TableCell>\n <TableCell>\n {definition.manualTrigger ? (\n <div className=\"flex justify-end opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100\">\n <Button size=\"xs\" isLoading={isRunning} onClick={() => onRun(definition)}>\n Run\n </Button>\n </div>\n ) : null}\n </TableCell>\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </div>\n\n <div className=\"flex flex-col rounded-8 border border-border-neutral-base md:hidden\">\n {definitions.map((definition) => {\n const runErrorMessage =\n runError?.definitionId === definition.id ? runError.message : null;\n const isRunning = runningDefinitionId === definition.id;\n\n return (\n <div\n key={definition.id}\n className=\"flex flex-col gap-inline border-b border-border-neutral-base p-panel-compact last:border-b-0\"\n >\n <button\n type=\"button\"\n className=\"flex min-w-0 items-start gap-inline text-left\"\n onClick={() => onOpenDefinition(definition)}\n >\n <Icon\n name={sourceIcon(definition.source)}\n className=\"size-16 shrink-0 text-foreground-neutral-muted\"\n aria-hidden=\"true\"\n />\n <div className=\"flex min-w-0 flex-col gap-tight\">\n <Text size=\"sm\" bold className=\"break-words\">\n {definition.name}\n </Text>\n <Code className=\"break-words text-foreground-neutral-muted\">\n {definition.configPath ?? 'Manual definition'}\n </Code>\n </div>\n </button>\n <div className=\"flex items-center justify-between gap-inline\">\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n Updated <RelativeTime value={definition.updatedAt} />\n </Text>\n {definition.manualTrigger ? (\n <Button size=\"sm\" isLoading={isRunning} onClick={() => onRun(definition)}>\n Run\n </Button>\n ) : null}\n </div>\n {runErrorMessage ? (\n <Text size=\"xs\" className=\"text-tag-error-text\">\n {runErrorMessage}\n </Text>\n ) : null}\n </div>\n );\n })}\n </div>\n\n {isFetchNextPageError ? (\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex items-center justify-between gap-cluster\">\n <Text size=\"sm\">Could not load more workflows.</Text>\n <Button size=\"sm\" variant=\"secondary\" onClick={onLoadMore}>\n Retry\n </Button>\n </div>\n </Callout>\n ) : null}\n\n {hasNextPage ? (\n <div className=\"flex justify-center\">\n <Button size=\"sm\" variant=\"secondary\" isLoading={isFetchingNextPage} onClick={onLoadMore}>\n Load more\n </Button>\n </div>\n ) : null}\n </>\n );\n}\n\nfunction sourceIcon(source: 'manual' | 'vcs'): IconName {\n return source === 'vcs' ? ('gitBranchLine' as IconName) : ('terminalLine' as IconName);\n}\n\nfunction WorkflowEmptyState({sync}: {sync: DefinitionSyncSummary | null}) {\n const message =\n sync?.status === 'failed' && sync.lastErrorCode === 'no-workflow-files'\n ? 'No workflow files found under .shipfox/workflows/.'\n : sync?.status === 'failed'\n ? (sync.lastErrorMessage ?? 'Workflow definitions could not be synced.')\n : sync?.status === 'syncing'\n ? 'Workflow definitions are being discovered.'\n : sync?.status === 'succeeded'\n ? 'No workflow definitions found.'\n : 'Workflow sync has not reported yet.';\n\n return <EmptyState icon=\"flowChart\" title=\"No workflows\" description={message} />;\n}\n\nfunction WorkflowSyncAlert({sync}: {sync: DefinitionSyncSummary | null | undefined}) {\n if (sync?.status !== 'failed') return null;\n\n return (\n <Callout role=\"alert\" type=\"error\">\n <div className=\"flex flex-col gap-tight\">\n <Text size=\"sm\" bold>\n Workflow sync failed\n </Text>\n <Text size=\"sm\">\n {sync.lastErrorMessage ?? 'The latest workflow sync failed before definitions updated.'}\n </Text>\n </div>\n </Callout>\n );\n}\n\nfunction WorkflowSyncWarnings({sync}: {sync: DefinitionSyncSummary | null | undefined}) {\n if (sync?.status !== 'succeeded' || sync.warnings.length === 0) return null;\n\n const seenKeys = new Map<string, number>();\n const warningItems = sync.warnings.map((warning) => {\n const baseKey = `${warning.code}-${warning.path ?? 'workflow'}-${warning.message}`;\n const occurrence = seenKeys.get(baseKey) ?? 0;\n seenKeys.set(baseKey, occurrence + 1);\n return {key: `${baseKey}-${occurrence}`, warning};\n });\n\n return (\n <Callout role=\"status\" type=\"warning\">\n <div className=\"flex flex-col gap-inline\">\n <Text size=\"sm\" bold>\n Workflow definition warnings\n </Text>\n <ul className=\"flex flex-col gap-tight\">\n {warningItems.map(({key, warning}) => (\n <li key={key}>\n <Text size=\"sm\">{warning.message}</Text>\n {warning.path ? (\n <Code className=\"text-foreground-neutral-muted\">{warning.path}</Code>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n </Callout>\n );\n}\n\nfunction DefinitionSheet({\n definition,\n onOpenChange,\n}: {\n definition: Definition | null;\n onOpenChange: (open: boolean) => void;\n}) {\n const normalizedJson = definition\n ? JSON.stringify(\n {\n workflow_document: definition.workflowDocument,\n workflow_model: definition.workflowModel,\n },\n null,\n 2,\n )\n : '';\n\n return (\n <Sheet open={Boolean(definition)} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-[560px]\">\n {definition ? (\n <>\n <SheetHeader>\n <SheetTitle>{definition.name}</SheetTitle>\n <SheetDescription>\n {definition.configPath ?? 'Manual workflow definition'}\n </SheetDescription>\n </SheetHeader>\n <SheetBody className=\"gap-group\">\n <div className=\"grid w-full gap-inline\">\n <Metadata label=\"Definition id\" value={definition.id} />\n <Metadata label=\"Source\" value={definition.source} />\n <Metadata label=\"Ref\" value={definition.ref ?? 'Not set'} />\n <Metadata label=\"SHA\" value={definition.sha ?? 'Not set'} />\n </div>\n <div className=\"flex w-full flex-col gap-inline\">\n <Text size=\"sm\" bold>\n Normalized definition\n </Text>\n <pre className=\"max-h-[52vh] w-full overflow-auto rounded-8 border border-border-neutral-base bg-background-neutral-subtle p-panel-compact scrollbar\">\n <Code as=\"code\" className=\"whitespace-pre text-foreground-neutral-base\">\n {normalizedJson}\n </Code>\n </pre>\n </div>\n </SheetBody>\n </>\n ) : null}\n </SheetContent>\n </Sheet>\n );\n}\n\nfunction Metadata({label, value}: {label: string; value: string}) {\n return (\n <div className=\"min-w-0 py-row first:pt-0 last:pb-0\">\n <Text size=\"xs\" className=\"text-foreground-neutral-muted\">\n {label}\n </Text>\n <Text size=\"sm\" className=\"break-words\">\n {value}\n </Text>\n </div>\n );\n}\n\nfunction errorMessage(error: unknown, fallback: string) {\n if (error instanceof ApiError && error.message) return error.message;\n if (error instanceof Error && error.message) return error.message;\n return fallback;\n}\n"],"names":["ApiError","SourceStrip","useDefinitionsInfiniteQuery","useProjectQuery","QueryLoadError","Button","Callout","EmptyState","Icon","LoadErrorState","RelativeTime","RelativeTimeProvider","Sheet","SheetBody","SheetContent","SheetDescription","SheetHeader","SheetTitle","Skeleton","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","toast","Code","Header","Text","useState","useFireManualWorkflowMutation","ProjectWorkflowsPage","projectId","ProjectWorkflowsPageInner","projectQuery","definitionsQuery","fireManual","selectedDefinition","setSelectedDefinition","runError","setRunError","definitions","data","pages","flatMap","page","sync","handleRun","definition","manualTrigger","mutateAsync","definitionId","id","success","error","message","errorMessage","div","className","isPending","isError","undefined","status","icon","title","description","query","subject","header","variant","size","connectionId","source","externalRepositoryId","WorkflowSyncAlert","WorkflowSyncWarnings","WorkflowDefinitionsList","runningDefinitionId","variables","hasNextPage","isFetchingNextPage","isFetchNextPageError","onRetry","refetch","onLoadMore","fetchNextPage","onOpenDefinition","onRun","DefinitionSheet","onOpenChange","open","length","retryLabel","WorkflowEmptyState","map","runErrorMessage","isRunning","name","sourceIcon","aria-hidden","button","type","onClick","bold","configPath","value","updatedAt","isLoading","role","lastErrorCode","lastErrorMessage","warnings","seenKeys","Map","warningItems","warning","baseKey","code","path","occurrence","get","set","key","ul","li","normalizedJson","JSON","stringify","workflow_document","workflowDocument","workflow_model","workflowModel","Boolean","Metadata","label","ref","sha","pre","as","fallback","Error"],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ export function WorkflowRunsPage({ projectId, workspaceSlug, projectSlug, search
|
|
|
27
27
|
return /*#__PURE__*/ _jsx("div", {
|
|
28
28
|
className: "flex min-h-0 flex-1 overflow-hidden bg-background-neutral-base",
|
|
29
29
|
children: /*#__PURE__*/ _jsx("div", {
|
|
30
|
-
className: "mx-auto flex min-h-0 w-full max-w-[1120px] flex-1 flex-col px-
|
|
30
|
+
className: "mx-auto flex min-h-0 w-full max-w-[1120px] flex-1 flex-col px-frame py-frame",
|
|
31
31
|
children: /*#__PURE__*/ _jsx(WorkflowRunList, {
|
|
32
32
|
projectId: projectId,
|
|
33
33
|
workspaceSlug: workspaceSlug,
|