@shepai/cli 1.91.2-pr271.a8e0a3b → 1.91.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +0 -29
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +37 -79
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +0 -13
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +0 -213
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +21 -21
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17143953._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45aad79d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5cc4752a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9de266fa._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e630cc47._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e630cc47._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
- package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_21c75883._.js +1 -1
- package/web/.next/server/chunks/ssr/_21c75883._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_33abfe62._.js → _c7cbaa5a._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_33abfe62._.js.map → _c7cbaa5a._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
- package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +28 -28
- package/web/.next/static/chunks/{4e57abbfab95085f.js → 0f3c293f02cc43ad.js} +1 -1
- package/web/.next/static/chunks/{f793a67775dbba14.js → 21fe7847d6102a65.js} +1 -1
- package/web/.next/static/chunks/{5f3a20f1611d5ea3.js → 28c4e60c725c5bb6.js} +1 -1
- package/web/.next/static/chunks/{c709e93f88d99d99.js → 2b9e733e68c3f0ba.js} +1 -1
- package/web/.next/static/chunks/{318a0e046b0f95f5.js → 49af1c74082ce7a2.js} +1 -1
- package/web/.next/static/chunks/{aeaaf802ea1f5182.js → 84792270363aa69b.js} +1 -1
- package/web/.next/static/chunks/{a65724da790fb232.js → b42c95e09eda7e6c.js} +1 -1
- package/web/.next/static/chunks/{fd9756b6b7c2ae9d.js → d363ed7ca4c4c725.js} +1 -1
- package/web/.next/static/chunks/{1dedaadce86fde03.js → dae134b822779271.js} +1 -1
- package/web/.next/static/chunks/{09144b0b13be0b40.js → e3d4ce99231716c7.js} +1 -1
- /package/web/.next/static/{0FO2SUJynXKUH2bAn1Chm → T5VYcM75qy8yhPRrfIQ8R}/_buildManifest.js +0 -0
- /package/web/.next/static/{0FO2SUJynXKUH2bAn1Chm → T5VYcM75qy8yhPRrfIQ8R}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{0FO2SUJynXKUH2bAn1Chm → T5VYcM75qy8yhPRrfIQ8R}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,
|
|
1
|
+
{"version":3,"file":"get-feature-phase-timings.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-feature-phase-timings.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,KAAK,qBAAqB,GACtB;IAAE,OAAO,EAAE,eAAe,EAAE,CAAC;IAAC,iBAAiB,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAC1E;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA2B9F"}
|
|
@@ -42,7 +42,6 @@ async function readRejectionFeedback(featureId) {
|
|
|
42
42
|
iteration: Number(entry.iteration ?? 1),
|
|
43
43
|
message: String(entry.message ?? ''),
|
|
44
44
|
phase: entry.phase ? String(entry.phase) : undefined,
|
|
45
|
-
timestamp: entry.timestamp ? String(entry.timestamp) : undefined,
|
|
46
45
|
attachments: Array.isArray(entry.attachments)
|
|
47
46
|
? entry.attachments.map(String)
|
|
48
47
|
: undefined,
|
|
@@ -5,34 +5,5 @@ export interface ActivityTabProps {
|
|
|
5
5
|
error: string | null;
|
|
6
6
|
rejectionFeedback?: RejectionFeedbackData[];
|
|
7
7
|
}
|
|
8
|
-
/**
|
|
9
|
-
* A single iteration in the lifecycle timeline.
|
|
10
|
-
*
|
|
11
|
-
* An iteration represents one cycle of work:
|
|
12
|
-
* started/resumed → phase work → rejected/completed/failed
|
|
13
|
-
*
|
|
14
|
-
* Each rejected iteration has associated rejection feedback.
|
|
15
|
-
*/
|
|
16
|
-
export interface TimelineIteration {
|
|
17
|
-
/** 1-based iteration number */
|
|
18
|
-
number: number;
|
|
19
|
-
/** The timing events in this iteration */
|
|
20
|
-
timings: PhaseTimingData[];
|
|
21
|
-
/** If this iteration ended with rejection, the feedback message */
|
|
22
|
-
rejectionMessage?: string;
|
|
23
|
-
/** If this iteration ended with rejection, any attachments */
|
|
24
|
-
rejectionAttachments?: string[];
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Build a lifecycle-aware timeline from flat timing events and rejection feedback.
|
|
28
|
-
*
|
|
29
|
-
* Splits the timing stream at run:rejected boundaries to produce iterations.
|
|
30
|
-
* Each rejection feedback entry is matched to its iteration by index.
|
|
31
|
-
*
|
|
32
|
-
* When there are more feedback entries than run:rejected events in the timings,
|
|
33
|
-
* synthetic run:rejected + run:resumed events are appended to ensure every
|
|
34
|
-
* feedback entry is represented.
|
|
35
|
-
*/
|
|
36
|
-
export declare function buildLifecycleTimeline(timings: PhaseTimingData[], feedback?: RejectionFeedbackData[]): TimelineIteration[];
|
|
37
8
|
export declare function ActivityTab({ timings, loading, error, rejectionFeedback }: ActivityTabProps): import("react/jsx-runtime").JSX.Element;
|
|
38
9
|
//# sourceMappingURL=activity-tab.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;
|
|
1
|
+
{"version":3,"file":"activity-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACtB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC7C;AA4ED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,gBAAgB,2CA8D3F"}
|
|
@@ -25,76 +25,38 @@ function isLifecycleEvent(phase) {
|
|
|
25
25
|
function formatDuration(ms) {
|
|
26
26
|
return `${(ms / 1000).toFixed(1)}s`;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
* When there are more feedback entries than run:rejected events in the timings,
|
|
35
|
-
* synthetic run:rejected + run:resumed events are appended to ensure every
|
|
36
|
-
* feedback entry is represented.
|
|
37
|
-
*/
|
|
38
|
-
export function buildLifecycleTimeline(timings, feedback) {
|
|
39
|
-
if (!timings.length)
|
|
40
|
-
return [];
|
|
41
|
-
// Count existing run:rejected events
|
|
42
|
-
const existingRejectionCount = timings.filter((t) => t.phase === 'run:rejected').length;
|
|
43
|
-
const feedbackCount = feedback?.length ?? 0;
|
|
44
|
-
// Augment timings with synthetic rejection/resumed cycles for unmatched feedback
|
|
45
|
-
let augmented = timings;
|
|
46
|
-
if (feedbackCount > existingRejectionCount) {
|
|
47
|
-
augmented = [...timings];
|
|
48
|
-
// Use last timing's agentRunId as template
|
|
49
|
-
const templateRunId = timings[timings.length - 1].agentRunId;
|
|
50
|
-
for (let i = existingRejectionCount; i < feedbackCount; i++) {
|
|
51
|
-
const fb = feedback[i];
|
|
52
|
-
// Add run:resumed before work (except for the first synthetic, which continues from existing)
|
|
53
|
-
if (i > existingRejectionCount) {
|
|
54
|
-
augmented.push({
|
|
55
|
-
agentRunId: templateRunId,
|
|
56
|
-
phase: 'run:resumed',
|
|
57
|
-
startedAt: fb.timestamp ?? `synthetic-resumed-${i}`,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
// Add run:rejected
|
|
61
|
-
augmented.push({
|
|
62
|
-
agentRunId: templateRunId,
|
|
63
|
-
phase: 'run:rejected',
|
|
64
|
-
startedAt: fb.timestamp ?? `synthetic-${i}`,
|
|
65
|
-
});
|
|
28
|
+
function groupTimingsByRun(timings) {
|
|
29
|
+
const groups = [];
|
|
30
|
+
for (const t of timings) {
|
|
31
|
+
const last = groups[groups.length - 1];
|
|
32
|
+
if (last?.runId === t.agentRunId) {
|
|
33
|
+
last.timings.push(t);
|
|
66
34
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const iterations = [];
|
|
70
|
-
let currentEvents = [];
|
|
71
|
-
let rejectionIndex = 0;
|
|
72
|
-
for (const t of augmented) {
|
|
73
|
-
currentEvents.push(t);
|
|
74
|
-
if (t.phase === 'run:rejected') {
|
|
75
|
-
const fb = feedback?.[rejectionIndex];
|
|
76
|
-
iterations.push({
|
|
77
|
-
number: iterations.length + 1,
|
|
78
|
-
timings: currentEvents,
|
|
79
|
-
rejectionMessage: fb?.message,
|
|
80
|
-
rejectionAttachments: fb?.attachments,
|
|
81
|
-
});
|
|
82
|
-
currentEvents = [];
|
|
83
|
-
rejectionIndex++;
|
|
35
|
+
else {
|
|
36
|
+
groups.push({ runId: t.agentRunId, timings: [t] });
|
|
84
37
|
}
|
|
85
38
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
39
|
+
return groups;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Map each run:rejected timing entry to its rejection feedback message and attachments.
|
|
43
|
+
* Matches by sequential order: 1st rejected event → 1st feedback entry, etc.
|
|
44
|
+
*/
|
|
45
|
+
function buildRejectionMessageMap(timings, feedback) {
|
|
46
|
+
const map = new Map();
|
|
47
|
+
if (!feedback?.length)
|
|
48
|
+
return map;
|
|
49
|
+
let rejectionIdx = 0;
|
|
50
|
+
for (const t of timings) {
|
|
51
|
+
if (t.phase === 'run:rejected' && rejectionIdx < feedback.length) {
|
|
52
|
+
const key = `${t.agentRunId}-${t.phase}-${t.startedAt}`;
|
|
53
|
+
const entry = feedback[rejectionIdx];
|
|
54
|
+
map.set(key, { message: entry.message, attachments: entry.attachments });
|
|
55
|
+
rejectionIdx++;
|
|
56
|
+
}
|
|
92
57
|
}
|
|
93
|
-
return
|
|
58
|
+
return map;
|
|
94
59
|
}
|
|
95
|
-
/* ---------------------------------------------------------------------------
|
|
96
|
-
* Component
|
|
97
|
-
* ------------------------------------------------------------------------- */
|
|
98
60
|
export function ActivityTab({ timings, loading, error, rejectionFeedback }) {
|
|
99
61
|
if (loading) {
|
|
100
62
|
return (_jsx("div", { "data-testid": "activity-tab-loading", className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
|
|
@@ -107,28 +69,24 @@ export function ActivityTab({ timings, loading, error, rejectionFeedback }) {
|
|
|
107
69
|
}
|
|
108
70
|
const nodeTimings = timings.filter((t) => !isLifecycleEvent(t.phase));
|
|
109
71
|
const maxDurationMs = Math.max(...nodeTimings.map((t) => t.durationMs ?? 0), ...nodeTimings.map((t) => t.approvalWaitMs ?? 0), 0);
|
|
110
|
-
|
|
111
|
-
const
|
|
72
|
+
// Build a map from rejection index to feedback message
|
|
73
|
+
const rejectionMessages = buildRejectionMessageMap(timings, rejectionFeedback);
|
|
74
|
+
const groups = groupTimingsByRun(timings);
|
|
75
|
+
const multiRun = groups.length > 1;
|
|
112
76
|
const totalExecMs = nodeTimings.reduce((sum, t) => sum + (t.durationMs ?? 0), 0);
|
|
113
77
|
const totalWaitMs = nodeTimings.reduce((sum, t) => sum + (t.approvalWaitMs ?? 0), 0);
|
|
114
|
-
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx("div", { "data-testid": "activity-timings", className: "flex flex-col gap-3", children:
|
|
78
|
+
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx("div", { "data-testid": "activity-timings", className: "flex flex-col gap-3", children: groups.map((group, groupIdx) => (_jsx(RunGroup, { group: group, groupIdx: groupIdx, multiRun: multiRun, maxDurationMs: maxDurationMs, rejectionMessages: rejectionMessages }, group.runId))) }), totalExecMs > 0 ? (_jsx(SummaryTotals, { totalExecMs: totalExecMs, totalWaitMs: totalWaitMs })) : null] }));
|
|
115
79
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
* ------------------------------------------------------------------------- */
|
|
119
|
-
function IterationGroup({ iteration, showHeader, maxDurationMs, }) {
|
|
120
|
-
return (_jsxs("div", { "data-testid": `iteration-${iteration.number}`, className: "flex flex-col gap-1.5", children: [showHeader ? (_jsxs("div", { className: "text-muted-foreground text-xs font-medium", children: ["Iteration ", iteration.number] })) : null, iteration.timings.map((t) => {
|
|
80
|
+
function RunGroup({ group, groupIdx, multiRun, maxDurationMs, rejectionMessages, }) {
|
|
81
|
+
return (_jsxs("div", { className: "flex flex-col gap-1.5", children: [multiRun ? (_jsxs("div", { className: "text-muted-foreground text-xs font-medium", children: ["Run #", groupIdx + 1] })) : null, group.timings.map((t) => {
|
|
121
82
|
if (isLifecycleEvent(t.phase)) {
|
|
122
|
-
|
|
123
|
-
const
|
|
124
|
-
return (_jsx(LifecycleEventRow, { timing: t, message:
|
|
83
|
+
const key = `${t.agentRunId}-${t.phase}-${t.startedAt}`;
|
|
84
|
+
const rejection = t.phase === 'run:rejected' ? rejectionMessages.get(key) : undefined;
|
|
85
|
+
return (_jsx(LifecycleEventRow, { timing: t, message: rejection?.message, attachments: rejection?.attachments }, key));
|
|
125
86
|
}
|
|
126
87
|
return (_jsx(NodeTimingRow, { timing: t, maxDurationMs: maxDurationMs }, `${t.agentRunId}-${t.phase}-${t.startedAt}`));
|
|
127
88
|
})] }));
|
|
128
89
|
}
|
|
129
|
-
/* ---------------------------------------------------------------------------
|
|
130
|
-
* Row components
|
|
131
|
-
* ------------------------------------------------------------------------- */
|
|
132
90
|
function LifecycleEventRow({ timing, message, attachments, }) {
|
|
133
91
|
const event = LIFECYCLE_EVENTS[timing.phase];
|
|
134
92
|
if (!event)
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts
CHANGED
|
@@ -17,19 +17,6 @@ export declare const Empty: Story;
|
|
|
17
17
|
export declare const Error: Story;
|
|
18
18
|
/** Rejection — shows rejected lifecycle event with user feedback text. */
|
|
19
19
|
export declare const WithRejection: Story;
|
|
20
|
-
/**
|
|
21
|
-
* Multiple rejection/resume cycles — realistic lifecycle showing:
|
|
22
|
-
* Iteration 1: work → rejected("rebase on main")
|
|
23
|
-
* Iteration 2: resumed → work → rejected("rebase on main")
|
|
24
|
-
* Iteration 3: rejected("add support for evidence agent...") — synthetic
|
|
25
|
-
* Iteration 4: rejected("screenshots broken...") — synthetic
|
|
26
|
-
*/
|
|
27
|
-
export declare const MultipleRejections: Story;
|
|
28
20
|
/** Approval wait indicators — phases with approval wait sub-rows. */
|
|
29
21
|
export declare const WithApprovalWaits: Story;
|
|
30
|
-
/**
|
|
31
|
-
* Full lifecycle — realistic multi-iteration rejection/resume cycle.
|
|
32
|
-
* Shows the full pattern: start → work → rejected → resumed → work → rejected → resumed → completed
|
|
33
|
-
*/
|
|
34
|
-
export declare const FullLifecycle: Story;
|
|
35
22
|
//# sourceMappingURL=activity-tab.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAmK1C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"activity-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAmK1C,2EAA2E;AAC3E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,aAAa,EAAE,KAsE3B,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAE,KAgC/B,CAAC"}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js
CHANGED
|
@@ -288,85 +288,6 @@ export const WithRejection = {
|
|
|
288
288
|
error: null,
|
|
289
289
|
},
|
|
290
290
|
};
|
|
291
|
-
/**
|
|
292
|
-
* Multiple rejection/resume cycles — realistic lifecycle showing:
|
|
293
|
-
* Iteration 1: work → rejected("rebase on main")
|
|
294
|
-
* Iteration 2: resumed → work → rejected("rebase on main")
|
|
295
|
-
* Iteration 3: rejected("add support for evidence agent...") — synthetic
|
|
296
|
-
* Iteration 4: rejected("screenshots broken...") — synthetic
|
|
297
|
-
*/
|
|
298
|
-
export const MultipleRejections = {
|
|
299
|
-
args: {
|
|
300
|
-
timings: [
|
|
301
|
-
{
|
|
302
|
-
agentRunId: 'run-1',
|
|
303
|
-
phase: 'run:started',
|
|
304
|
-
startedAt: '2025-01-15T10:00:00Z',
|
|
305
|
-
durationMs: 0,
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
agentRunId: 'run-1',
|
|
309
|
-
phase: 'plan',
|
|
310
|
-
startedAt: '2025-01-15T10:00:01Z',
|
|
311
|
-
completedAt: '2025-01-15T10:05:00Z',
|
|
312
|
-
durationMs: 300000,
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
agentRunId: 'run-1',
|
|
316
|
-
phase: 'run:rejected',
|
|
317
|
-
startedAt: '2025-01-15T10:05:00Z',
|
|
318
|
-
durationMs: 0,
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
agentRunId: 'run-1',
|
|
322
|
-
phase: 'run:resumed',
|
|
323
|
-
startedAt: '2025-01-15T10:10:00Z',
|
|
324
|
-
durationMs: 0,
|
|
325
|
-
},
|
|
326
|
-
{
|
|
327
|
-
agentRunId: 'run-1',
|
|
328
|
-
phase: 'merge',
|
|
329
|
-
startedAt: '2025-01-15T10:10:01Z',
|
|
330
|
-
completedAt: '2025-01-15T10:15:00Z',
|
|
331
|
-
durationMs: 299000,
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
agentRunId: 'run-1',
|
|
335
|
-
phase: 'run:rejected',
|
|
336
|
-
startedAt: '2025-01-15T10:15:00Z',
|
|
337
|
-
durationMs: 0,
|
|
338
|
-
},
|
|
339
|
-
],
|
|
340
|
-
rejectionFeedback: [
|
|
341
|
-
{
|
|
342
|
-
iteration: 1,
|
|
343
|
-
message: 'rebase on main',
|
|
344
|
-
phase: 'plan',
|
|
345
|
-
timestamp: '2025-01-15T10:05:00Z',
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
iteration: 2,
|
|
349
|
-
message: 'rebase on main',
|
|
350
|
-
phase: 'merge',
|
|
351
|
-
timestamp: '2025-01-15T10:15:00Z',
|
|
352
|
-
},
|
|
353
|
-
{
|
|
354
|
-
iteration: 3,
|
|
355
|
-
message: 'add support for evidence agent into fast mode as well',
|
|
356
|
-
phase: 'merge',
|
|
357
|
-
timestamp: '2025-01-15T10:20:00Z',
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
iteration: 4,
|
|
361
|
-
message: "I've test and created a feature but the screenshots seems to be broken https://github.com/shep-ai/cli/pull/258 fix",
|
|
362
|
-
phase: 'merge',
|
|
363
|
-
timestamp: '2025-01-15T10:25:00Z',
|
|
364
|
-
},
|
|
365
|
-
],
|
|
366
|
-
loading: false,
|
|
367
|
-
error: null,
|
|
368
|
-
},
|
|
369
|
-
};
|
|
370
291
|
/** Approval wait indicators — phases with approval wait sub-rows. */
|
|
371
292
|
export const WithApprovalWaits = {
|
|
372
293
|
args: {
|
|
@@ -401,137 +322,3 @@ export const WithApprovalWaits = {
|
|
|
401
322
|
error: null,
|
|
402
323
|
},
|
|
403
324
|
};
|
|
404
|
-
/**
|
|
405
|
-
* Full lifecycle — realistic multi-iteration rejection/resume cycle.
|
|
406
|
-
* Shows the full pattern: start → work → rejected → resumed → work → rejected → resumed → completed
|
|
407
|
-
*/
|
|
408
|
-
export const FullLifecycle = {
|
|
409
|
-
args: {
|
|
410
|
-
timings: [
|
|
411
|
-
// Iteration 1
|
|
412
|
-
{
|
|
413
|
-
agentRunId: 'run-1',
|
|
414
|
-
phase: 'run:started',
|
|
415
|
-
startedAt: '2025-01-15T10:00:00Z',
|
|
416
|
-
durationMs: 0,
|
|
417
|
-
},
|
|
418
|
-
{
|
|
419
|
-
agentRunId: 'run-1',
|
|
420
|
-
phase: 'analyze',
|
|
421
|
-
startedAt: '2025-01-15T10:00:01Z',
|
|
422
|
-
completedAt: '2025-01-15T10:00:15Z',
|
|
423
|
-
durationMs: 14000,
|
|
424
|
-
},
|
|
425
|
-
{
|
|
426
|
-
agentRunId: 'run-1',
|
|
427
|
-
phase: 'requirements',
|
|
428
|
-
startedAt: '2025-01-15T10:00:15Z',
|
|
429
|
-
completedAt: '2025-01-15T10:02:00Z',
|
|
430
|
-
durationMs: 105000,
|
|
431
|
-
waitingApprovalAt: '2025-01-15T10:01:30Z',
|
|
432
|
-
approvalWaitMs: 20000,
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
agentRunId: 'run-1',
|
|
436
|
-
phase: 'plan',
|
|
437
|
-
startedAt: '2025-01-15T10:02:00Z',
|
|
438
|
-
completedAt: '2025-01-15T10:04:00Z',
|
|
439
|
-
durationMs: 120000,
|
|
440
|
-
},
|
|
441
|
-
{
|
|
442
|
-
agentRunId: 'run-1',
|
|
443
|
-
phase: 'implement',
|
|
444
|
-
startedAt: '2025-01-15T10:04:00Z',
|
|
445
|
-
completedAt: '2025-01-15T10:14:00Z',
|
|
446
|
-
durationMs: 600000,
|
|
447
|
-
},
|
|
448
|
-
{
|
|
449
|
-
agentRunId: 'run-1',
|
|
450
|
-
phase: 'merge',
|
|
451
|
-
startedAt: '2025-01-15T10:14:00Z',
|
|
452
|
-
completedAt: '2025-01-15T10:15:00Z',
|
|
453
|
-
durationMs: 60000,
|
|
454
|
-
waitingApprovalAt: '2025-01-15T10:14:30Z',
|
|
455
|
-
approvalWaitMs: 25000,
|
|
456
|
-
},
|
|
457
|
-
{
|
|
458
|
-
agentRunId: 'run-1',
|
|
459
|
-
phase: 'run:rejected',
|
|
460
|
-
startedAt: '2025-01-15T10:15:00Z',
|
|
461
|
-
durationMs: 0,
|
|
462
|
-
},
|
|
463
|
-
// Iteration 2
|
|
464
|
-
{
|
|
465
|
-
agentRunId: 'run-1',
|
|
466
|
-
phase: 'run:resumed',
|
|
467
|
-
startedAt: '2025-01-15T10:20:00Z',
|
|
468
|
-
durationMs: 0,
|
|
469
|
-
},
|
|
470
|
-
{
|
|
471
|
-
agentRunId: 'run-1',
|
|
472
|
-
phase: 'implement',
|
|
473
|
-
startedAt: '2025-01-15T10:20:01Z',
|
|
474
|
-
completedAt: '2025-01-15T10:28:00Z',
|
|
475
|
-
durationMs: 479000,
|
|
476
|
-
},
|
|
477
|
-
{
|
|
478
|
-
agentRunId: 'run-1',
|
|
479
|
-
phase: 'merge',
|
|
480
|
-
startedAt: '2025-01-15T10:28:00Z',
|
|
481
|
-
completedAt: '2025-01-15T10:29:00Z',
|
|
482
|
-
durationMs: 60000,
|
|
483
|
-
waitingApprovalAt: '2025-01-15T10:28:30Z',
|
|
484
|
-
approvalWaitMs: 20000,
|
|
485
|
-
},
|
|
486
|
-
{
|
|
487
|
-
agentRunId: 'run-1',
|
|
488
|
-
phase: 'run:rejected',
|
|
489
|
-
startedAt: '2025-01-15T10:29:00Z',
|
|
490
|
-
durationMs: 0,
|
|
491
|
-
},
|
|
492
|
-
// Iteration 3
|
|
493
|
-
{
|
|
494
|
-
agentRunId: 'run-1',
|
|
495
|
-
phase: 'run:resumed',
|
|
496
|
-
startedAt: '2025-01-15T10:35:00Z',
|
|
497
|
-
durationMs: 0,
|
|
498
|
-
},
|
|
499
|
-
{
|
|
500
|
-
agentRunId: 'run-1',
|
|
501
|
-
phase: 'implement',
|
|
502
|
-
startedAt: '2025-01-15T10:35:01Z',
|
|
503
|
-
completedAt: '2025-01-15T10:40:00Z',
|
|
504
|
-
durationMs: 299000,
|
|
505
|
-
},
|
|
506
|
-
{
|
|
507
|
-
agentRunId: 'run-1',
|
|
508
|
-
phase: 'merge',
|
|
509
|
-
startedAt: '2025-01-15T10:40:00Z',
|
|
510
|
-
completedAt: '2025-01-15T10:41:00Z',
|
|
511
|
-
durationMs: 60000,
|
|
512
|
-
},
|
|
513
|
-
{
|
|
514
|
-
agentRunId: 'run-1',
|
|
515
|
-
phase: 'run:completed',
|
|
516
|
-
startedAt: '2025-01-15T10:41:00Z',
|
|
517
|
-
durationMs: 0,
|
|
518
|
-
},
|
|
519
|
-
],
|
|
520
|
-
rejectionFeedback: [
|
|
521
|
-
{
|
|
522
|
-
iteration: 1,
|
|
523
|
-
message: 'The PR has merge conflicts — rebase on main first',
|
|
524
|
-
phase: 'merge',
|
|
525
|
-
timestamp: '2025-01-15T10:15:00Z',
|
|
526
|
-
},
|
|
527
|
-
{
|
|
528
|
-
iteration: 2,
|
|
529
|
-
message: 'Tests are failing in the CI pipeline — fix the snapshot tests',
|
|
530
|
-
phase: 'merge',
|
|
531
|
-
timestamp: '2025-01-15T10:29:00Z',
|
|
532
|
-
},
|
|
533
|
-
],
|
|
534
|
-
loading: false,
|
|
535
|
-
error: null,
|
|
536
|
-
},
|
|
537
|
-
};
|