@shepai/cli 1.112.0-pr309.afbf5cb → 1.112.0-pr347.4de2f90

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.
Files changed (157) hide show
  1. package/dist/packages/core/src/infrastructure/persistence/sqlite/sqlite-migration-storage.d.ts +13 -0
  2. package/dist/packages/core/src/infrastructure/persistence/sqlite/sqlite-migration-storage.d.ts.map +1 -1
  3. package/dist/packages/core/src/infrastructure/persistence/sqlite/sqlite-migration-storage.js +37 -0
  4. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +1 -1
  5. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +2 -10
  6. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +3 -5
  7. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -1
  8. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +9 -92
  9. package/dist/tsconfig.build.tsbuildinfo +1 -1
  10. package/package.json +1 -1
  11. package/web/.next/BUILD_ID +1 -1
  12. package/web/.next/build-manifest.json +2 -2
  13. package/web/.next/fallback-build-manifest.json +2 -2
  14. package/web/.next/prerender-manifest.json +3 -3
  15. package/web/.next/required-server-files.js +1 -1
  16. package/web/.next/required-server-files.json +1 -1
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  18. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  19. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +26 -26
  24. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  26. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  27. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  29. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  30. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  33. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  34. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  35. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +26 -26
  36. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  37. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  38. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  39. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  40. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  42. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/_global-error.html +2 -2
  45. package/web/.next/server/app/_global-error.rsc +1 -1
  46. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  47. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  48. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  49. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  50. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  51. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  52. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  54. package/web/.next/server/app/api/cli-upgrade/route.js +2 -2
  55. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  56. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  57. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  58. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  59. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  60. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  61. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  63. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  64. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  66. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  68. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +2 -2
  69. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  70. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  71. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
  72. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
  73. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
  74. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__845a9d2a._.js.map +1 -1
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js +3 -0
  92. package/web/.next/server/chunks/ssr/{[root-of-the-server]__b1e68e34._.js.map → [root-of-the-server]__d91fdd51._.js.map} +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
  94. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
  95. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  97. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  98. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/{_c4a42f23._.js → _89ca7b11._.js} +2 -2
  100. package/web/.next/server/chunks/ssr/{_c4a42f23._.js.map → _89ca7b11._.js.map} +1 -1
  101. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  102. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/{_4a4a2439._.js → _964fde4f._.js} +2 -2
  104. package/web/.next/server/chunks/ssr/{_4a4a2439._.js.map → _964fde4f._.js.map} +1 -1
  105. package/web/.next/server/chunks/ssr/{_1222306e._.js → _9b69f7eb._.js} +2 -2
  106. package/web/.next/server/chunks/ssr/{_1222306e._.js.map → _9b69f7eb._.js.map} +1 -1
  107. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  108. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  109. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  110. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  111. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
  112. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  114. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  116. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
  118. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
  119. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  120. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  124. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
  126. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +1 -1
  127. package/web/.next/server/pages/500.html +2 -2
  128. package/web/.next/server/server-reference-manifest.js +1 -1
  129. package/web/.next/server/server-reference-manifest.json +31 -31
  130. package/web/.next/static/chunks/07b853e29af1e5f2.js +1 -0
  131. package/web/.next/static/chunks/{f7078ad2ada6de3f.js → 1ccd220d2965e1ae.js} +1 -1
  132. package/web/.next/static/chunks/364b7d1a1fab7225.js +1 -0
  133. package/web/.next/static/chunks/5558a658fa82a01f.css +1 -0
  134. package/web/.next/static/chunks/{98119860f5aaeb55.js → 57e9c292cf8794f6.js} +1 -1
  135. package/web/.next/static/chunks/{72bece914300fb60.js → 6a6b2d3ece1ec56c.js} +1 -1
  136. package/web/.next/static/chunks/{557089320d21f13c.js → 714b32c61d44bc38.js} +1 -1
  137. package/web/.next/static/chunks/{c6d6d8f134385460.js → 863d291348316eb2.js} +1 -1
  138. package/web/.next/static/chunks/{7ec52f2e58c8a8da.js → 88713365233058c7.js} +2 -2
  139. package/web/.next/static/chunks/{15e74d2df9f57109.js → c9092a153ce132ca.js} +2 -2
  140. package/web/.next/static/chunks/{1f3c7bc887739ba8.js → d85ceb56d0dcc2e0.js} +1 -1
  141. package/web/.next/static/chunks/{84eccb62ced72e3c.js → e1329b21c551c6a3.js} +1 -1
  142. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.d.ts +0 -5
  143. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.d.ts.map +0 -1
  144. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.js +0 -118
  145. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts +0 -18
  146. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts.map +0 -1
  147. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.js +0 -88
  148. package/dist/src/presentation/web/lib/parse-log-line.d.ts +0 -51
  149. package/dist/src/presentation/web/lib/parse-log-line.d.ts.map +0 -1
  150. package/dist/src/presentation/web/lib/parse-log-line.js +0 -132
  151. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +0 -3
  152. package/web/.next/static/chunks/4231e7dc69e82f22.css +0 -1
  153. package/web/.next/static/chunks/44dc9b173486e5e3.js +0 -1
  154. package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +0 -1
  155. /package/web/.next/static/{FuSsGPDsyoIxo9siqXUUj → 6_jMMSHd9S51AIOqtPNZV}/_buildManifest.js +0 -0
  156. /package/web/.next/static/{FuSsGPDsyoIxo9siqXUUj → 6_jMMSHd9S51AIOqtPNZV}/_clientMiddlewareManifest.json +0 -0
  157. /package/web/.next/static/{FuSsGPDsyoIxo9siqXUUj → 6_jMMSHd9S51AIOqtPNZV}/_ssgManifest.js +0 -0
@@ -27,6 +27,12 @@ export declare class SQLiteMigrationStorage implements UmzugStorage<Database.Dat
27
27
  * PRAGMA user_version tracking and seeds the umzug_migrations table accordingly.
28
28
  */
29
29
  constructor(db: Database.Database, legacyMigrationNames?: string[]);
30
+ /**
31
+ * Mapping of legacy migration names to the tables they create.
32
+ * Used by verifyBootstrappedMigrations to detect migrations that were
33
+ * marked as executed by the bootstrap seeder but never actually ran.
34
+ */
35
+ private static readonly MIGRATION_TABLE_MAP;
30
36
  /**
31
37
  * Returns the names of all executed migrations, sorted lexicographically.
32
38
  */
@@ -55,5 +61,12 @@ export declare class SQLiteMigrationStorage implements UmzugStorage<Database.Dat
55
61
  * user_version using the provided legacy migration names.
56
62
  */
57
63
  private bootstrapLegacyMigrations;
64
+ /**
65
+ * Checks that each bootstrapped migration's expected table actually exists.
66
+ * Only checks migrations that were seeded (present in seededNames).
67
+ * If a table is missing, removes the migration record from umzug_migrations
68
+ * so that umzug will re-run it on the next up() call.
69
+ */
70
+ private verifyBootstrappedMigrations;
58
71
  }
59
72
  //# sourceMappingURL=sqlite-migration-storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-migration-storage.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/sqlite-migration-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE3D;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IAEvC;;;;;;OAMG;gBACS,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE;IAQlE;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO7F;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7E;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/E;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;CA+BlC"}
1
+ {"version":3,"file":"sqlite-migration-storage.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/infrastructure/persistence/sqlite/sqlite-migration-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAE3D;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IAEvC;;;;;;OAMG;gBACS,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,MAAM,EAAE;IAQlE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAOzC;IAEF;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO7F;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7E;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/E;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAuCjC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CAiBrC"}
@@ -31,6 +31,19 @@ export class SQLiteMigrationStorage {
31
31
  this.bootstrapLegacyMigrations(legacyMigrationNames);
32
32
  }
33
33
  }
34
+ /**
35
+ * Mapping of legacy migration names to the tables they create.
36
+ * Used by verifyBootstrappedMigrations to detect migrations that were
37
+ * marked as executed by the bootstrap seeder but never actually ran.
38
+ */
39
+ static MIGRATION_TABLE_MAP = {
40
+ '001-create-settings-table': 'settings',
41
+ '003-create-agent-runs': 'agent_runs',
42
+ '004-create-features': 'features',
43
+ '008-add-approval-gates-and-phase-timings': 'phase_timings',
44
+ '015-create-repositories-and-backfill': 'repositories',
45
+ '033-create-pr-sync-lock': 'pr_sync_lock',
46
+ };
34
47
  /**
35
48
  * Returns the names of all executed migrations, sorted lexicographically.
36
49
  */
@@ -94,5 +107,29 @@ export class SQLiteMigrationStorage {
94
107
  }
95
108
  });
96
109
  seedAll();
110
+ // After seeding, verify that expected schema artifacts actually exist.
111
+ // If a migration was inserted into the legacy list after the DB was already
112
+ // at a higher user_version, its DDL never ran but the seeder marked it done.
113
+ const seededCount = Math.min(userVersion, legacyMigrationNames.length);
114
+ const seededNames = legacyMigrationNames.slice(0, seededCount);
115
+ this.verifyBootstrappedMigrations(seededNames);
116
+ }
117
+ /**
118
+ * Checks that each bootstrapped migration's expected table actually exists.
119
+ * Only checks migrations that were seeded (present in seededNames).
120
+ * If a table is missing, removes the migration record from umzug_migrations
121
+ * so that umzug will re-run it on the next up() call.
122
+ */
123
+ verifyBootstrappedMigrations(seededNames) {
124
+ const seededSet = new Set(seededNames);
125
+ const tableCheck = this.db.prepare("SELECT COUNT(*) as count FROM sqlite_master WHERE type='table' AND name=?");
126
+ for (const [migrationName, tableName] of Object.entries(SQLiteMigrationStorage.MIGRATION_TABLE_MAP)) {
127
+ if (!seededSet.has(migrationName))
128
+ continue;
129
+ const result = tableCheck.get(tableName);
130
+ if (result.count === 0) {
131
+ this.db.prepare('DELETE FROM umzug_migrations WHERE name = ?').run(migrationName);
132
+ }
133
+ }
97
134
  }
98
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"log-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/log-tab.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAID,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,WAAW,2CAgHlE"}
1
+ {"version":3,"file":"log-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/log-tab.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,WAAW,2CA6ElE"}
@@ -1,12 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useRef, useEffect, useState, useCallback } from 'react';
4
- import { AlertCircle, Terminal, ArrowDown, Code, FileText } from 'lucide-react';
5
- import { EventLogViewer } from './event-log-viewer.js';
4
+ import { AlertCircle, Terminal, ArrowDown } from 'lucide-react';
6
5
  export function LogTab({ content, isConnected, error }) {
7
6
  const containerRef = useRef(null);
8
7
  const [autoScroll, setAutoScroll] = useState(true);
9
- const [viewMode, setViewMode] = useState('structured');
10
8
  const handleScroll = useCallback(() => {
11
9
  const el = containerRef.current;
12
10
  if (!el)
@@ -33,11 +31,5 @@ export function LogTab({ content, isConnected, error }) {
33
31
  if (!content) {
34
32
  return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8", children: [_jsx(Terminal, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "No log output yet" }), isConnected ? (_jsx("p", { className: "text-muted-foreground text-xs", children: "Waiting for log data..." })) : null] }));
35
33
  }
36
- return (_jsxs("div", { className: "flex h-full flex-col", "data-testid": "log-tab", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-3 py-1.5", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${isConnected ? 'bg-emerald-500' : 'bg-zinc-400'}` }), _jsx("span", { className: "text-muted-foreground text-xs", children: isConnected ? 'Live' : 'Disconnected' }), _jsxs("div", { className: "ml-auto flex items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => setViewMode('structured'), className: `rounded p-1 transition-colors ${viewMode === 'structured'
37
- ? 'bg-muted text-foreground'
38
- : 'text-muted-foreground hover:text-foreground'}`, title: "Structured view", children: _jsx(FileText, { className: "h-3.5 w-3.5" }) }), _jsx("button", { type: "button", onClick: () => setViewMode('raw'), className: `rounded p-1 transition-colors ${viewMode === 'raw'
39
- ? 'bg-muted text-foreground'
40
- : 'text-muted-foreground hover:text-foreground'}`, title: "Raw view", children: _jsx(Code, { className: "h-3.5 w-3.5" }) }), !autoScroll ? (_jsxs("button", { type: "button", onClick: jumpToBottom, className: "text-muted-foreground hover:text-foreground ml-1 flex items-center gap-1 text-xs", children: [_jsx(ArrowDown, { className: "h-3 w-3" }), "Jump to bottom"] })) : null] })] }), _jsx("div", { ref: containerRef, onScroll: handleScroll, className: `flex-1 overflow-y-auto ${viewMode === 'raw'
41
- ? 'bg-zinc-950 p-3 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap text-zinc-300'
42
- : 'bg-background'}`, children: viewMode === 'structured' ? _jsx(EventLogViewer, { content: content }) : content })] }));
34
+ return (_jsxs("div", { className: "flex h-full flex-col", "data-testid": "log-tab", children: [_jsxs("div", { className: "flex items-center gap-2 border-b px-3 py-1.5", children: [_jsx("span", { className: `h-2 w-2 rounded-full ${isConnected ? 'bg-emerald-500' : 'bg-zinc-400'}` }), _jsx("span", { className: "text-muted-foreground text-xs", children: isConnected ? 'Live' : 'Disconnected' }), !autoScroll ? (_jsxs("button", { type: "button", onClick: jumpToBottom, className: "text-muted-foreground hover:text-foreground ml-auto flex items-center gap-1 text-xs", children: [_jsx(ArrowDown, { className: "h-3 w-3" }), "Jump to bottom"] })) : null] }), _jsx("div", { ref: containerRef, onScroll: handleScroll, className: "flex-1 overflow-y-auto bg-zinc-950 p-3 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap text-zinc-300", children: content })] }));
43
35
  }
@@ -3,12 +3,10 @@ import { LogTab } from './log-tab.js';
3
3
  declare const meta: Meta<typeof LogTab>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof LogTab>;
6
- /** Default — structured agent log output with live connection (claude-code). */
6
+ /** Default — typical agent log output with live connection. */
7
7
  export declare const Default: Story;
8
- /** LongStructured100 structured events to test scrolling behavior. */
9
- export declare const LongStructured: Story;
10
- /** RawFallback — unstructured log content falls back gracefully. */
11
- export declare const RawFallback: Story;
8
+ /** LongLog200 lines of log output to test scrolling behavior. */
9
+ export declare const LongLog: Story;
12
10
  /** Disconnected — log content present but connection is lost. */
13
11
  export declare const Disconnected: Story;
14
12
  /** Empty — no log content yet, connected and waiting. */
@@ -1 +1 @@
1
- {"version":3,"file":"log-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAc7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,MAAM,CAAC,CAAC;AA6GrC,gFAAgF;AAChF,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
1
+ {"version":3,"file":"log-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,MAAM,CAc7B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,MAAM,CAAC,CAAC;AAqCrC,+DAA+D;AAC/D,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
@@ -8,61 +8,14 @@ const meta = {
8
8
  layout: 'fullscreen',
9
9
  },
10
10
  decorators: [
11
- (Story) => (_jsx("div", { style: { height: '600px', width: '480px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
11
+ (Story) => (_jsx("div", { style: { height: '600px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
12
12
  ],
13
13
  };
14
14
  export default meta;
15
15
  /* ---------------------------------------------------------------------------
16
16
  * Data fixtures
17
17
  * ------------------------------------------------------------------------- */
18
- const structuredLogContent = `[2026-03-08T10:00:01.000Z] [claude-code|claude-sonnet-4-6] [WORKER] Starting worker full command:
19
- [2026-03-08T10:00:01.001Z] [claude-code|claude-sonnet-4-6] [WORKER] feature-agent-worker --feature-id auth-module --run-id run-123 --repo /home/user/myproject --agent-type claude-code --model claude-sonnet-4-6
20
- [2026-03-08T10:00:01.010Z] [claude-code|claude-sonnet-4-6] [WORKER] Initializing container...
21
- [2026-03-08T10:00:01.050Z] [claude-code|claude-sonnet-4-6] [WORKER] Creating executor from pinned agent type: claude-code
22
- [2026-03-08T10:00:01.100Z] [claude-code|claude-sonnet-4-6] [WORKER] Updating status to running (PID 54321)...
23
- [2026-03-08T10:00:01.110Z] [claude-code|claude-sonnet-4-6] [WORKER] Starting graph invocation...
24
- [2026-03-08T10:00:05.000Z] [requirements] [claude-code|claude-sonnet-4-6] Starting...
25
- [2026-03-08T10:00:05.010Z] [requirements] [claude-code|claude-sonnet-4-6] Executing agent at cwd=/home/user/myproject
26
- [2026-03-08T10:00:05.020Z] [requirements] [claude-code|claude-sonnet-4-6] Prompt length: 2847 chars
27
- [2026-03-08T10:00:05.100Z] [requirements] [claude-code|claude-sonnet-4-6] Spawning: claude -p "Analyze this project..." --output-format stream-json --verbose
28
- [2026-03-08T10:00:05.102Z] [requirements] [claude-code|claude-sonnet-4-6] Subprocess PID: 54322
29
- [2026-03-08T10:00:08.234Z] [requirements] [claude-code|claude-sonnet-4-6] [tool] Read {"file_path": "src/main.ts"}
30
- [2026-03-08T10:00:10.345Z] [requirements] [claude-code|claude-sonnet-4-6] [text] Analyzing the codebase structure and identifying key entry points for the authentication module
31
- [2026-03-08T10:00:12.567Z] [requirements] [claude-code|claude-sonnet-4-6] [tool] Glob {"pattern": "src/**/*.ts"}
32
- [2026-03-08T10:00:14.789Z] [requirements] [claude-code|claude-sonnet-4-6] [tool] Read {"file_path": "src/auth/providers.ts"}
33
- [2026-03-08T10:00:16.012Z] [requirements] [claude-code|claude-sonnet-4-6] [tool] Grep {"pattern": "interface.*Auth", "path": "src/"}
34
- [2026-03-08T10:00:18.234Z] [requirements] [claude-code|claude-sonnet-4-6] [text] The project uses a clean architecture pattern with dependency injection. I can see the auth interfaces are defined in the domain layer
35
- [2026-03-08T10:00:20.456Z] [requirements] [claude-code|claude-sonnet-4-6] [tool] Bash {"command": "find src -name '*.test.ts' | wc -l"}
36
- [2026-03-08T10:00:45.789Z] [requirements] [claude-code|claude-sonnet-4-6] [result] 8920 chars, session=sess-abc123def456
37
- [2026-03-08T10:00:45.790Z] [requirements] [claude-code|claude-sonnet-4-6] [tokens] 2450 in / 4560 out
38
- [2026-03-08T10:00:45.791Z] [requirements] [claude-code|claude-sonnet-4-6] Process closed with code 0, result=8920 chars
39
- [2026-03-08T10:00:45.800Z] [requirements] [claude-code|claude-sonnet-4-6] Complete (8920 chars, 40.8s)
40
- [2026-03-08T10:00:45.900Z] [requirements] [claude-code|claude-sonnet-4-6] Interrupting for human approval
41
- [2026-03-08T10:02:30.000Z] [requirements] [claude-code|claude-sonnet-4-6] Phase approved, skipping re-execution
42
- [2026-03-08T10:02:30.100Z] [plan] [claude-code|claude-sonnet-4-6] Starting...
43
- [2026-03-08T10:02:30.110Z] [plan] [claude-code|claude-sonnet-4-6] Executing agent at cwd=/home/user/myproject
44
- [2026-03-08T10:02:30.120Z] [plan] [claude-code|claude-sonnet-4-6] Prompt length: 15234 chars
45
- [2026-03-08T10:02:35.100Z] [plan] [claude-code|claude-sonnet-4-6] [tool] Read {"file_path": "CLAUDE.md"}
46
- [2026-03-08T10:02:38.200Z] [plan] [claude-code|claude-sonnet-4-6] [text] Creating implementation plan with TDD approach as required by project conventions
47
- [2026-03-08T10:02:42.300Z] [plan] [claude-code|claude-sonnet-4-6] [tool] Write {"file_path": "specs/001-auth/plan.yaml"}
48
- [2026-03-08T10:02:45.400Z] [plan] [claude-code|claude-sonnet-4-6] [text] Plan includes 3 phases: scaffold auth module, implement OAuth2 providers, add tests and documentation
49
- [2026-03-08T10:03:15.234Z] [plan] [claude-code|claude-sonnet-4-6] [result] 12345 chars, session=sess-abc123def456
50
- [2026-03-08T10:03:15.235Z] [plan] [claude-code|claude-sonnet-4-6] [tokens] 8900 in / 3456 out
51
- [2026-03-08T10:03:15.300Z] [plan] [claude-code|claude-sonnet-4-6] Complete (12345 chars, 45.1s)
52
- [2026-03-08T10:05:00.000Z] [implement] [claude-code|claude-sonnet-4-6] Starting...
53
- [2026-03-08T10:05:01.000Z] [implement] [claude-code|claude-sonnet-4-6] [tool] Write {"file_path": "src/auth/oauth-provider.ts"}
54
- [2026-03-08T10:05:03.000Z] [implement] [claude-code|claude-sonnet-4-6] [tool] Write {"file_path": "src/auth/token-manager.ts"}
55
- [2026-03-08T10:05:05.000Z] [implement] [claude-code|claude-sonnet-4-6] [tool] Edit {"file_path": "src/auth/index.ts"}
56
- [2026-03-08T10:05:07.000Z] [implement] [claude-code|claude-sonnet-4-6] [tool] Bash {"command": "pnpm test:unit"}
57
- [2026-03-08T10:05:30.000Z] [implement] [claude-code|claude-sonnet-4-6] [text] All 14 unit tests passing. Moving to integration tests
58
- [2026-03-08T10:05:35.000Z] [implement] [claude-code|claude-sonnet-4-6] [tool] Bash {"command": "pnpm test:int"}
59
- [2026-03-08T10:05:55.000Z] [implement] [claude-code|claude-sonnet-4-6] [result] 24560 chars, session=sess-abc123def456
60
- [2026-03-08T10:05:55.001Z] [implement] [claude-code|claude-sonnet-4-6] [tokens] 15200 in / 9360 out
61
- [2026-03-08T10:05:55.100Z] [implement] [claude-code|claude-sonnet-4-6] Complete (24560 chars, 54.1s)
62
- [2026-03-08T10:06:00.000Z] [claude-code|claude-sonnet-4-6] [WORKER] Graph invocation completed. Error: none
63
- [2026-03-08T10:06:00.100Z] [claude-code|claude-sonnet-4-6] [WORKER] Run marked as completed
64
- [2026-03-08T10:06:00.200Z] [claude-code|claude-sonnet-4-6] [WORKER] Worker completed successfully, exiting.`;
65
- const rawLogContent = `[2026-03-08T10:00:01.123Z] Starting agent run for feature "auth-module"
18
+ const typicalLogContent = `[2026-03-08T10:00:01.123Z] Starting agent run for feature "auth-module"
66
19
  [2026-03-08T10:00:02.789Z] Agent started — analyzing codebase
67
20
  [2026-03-08T10:00:03.456Z] Scanning repository structure...
68
21
  [2026-03-08T10:00:04.012Z] Found 127 source files across 14 packages
@@ -82,58 +35,22 @@ const rawLogContent = `[2026-03-08T10:00:01.123Z] Starting agent run for feature
82
35
  [2026-03-08T10:00:24.789Z] Phase 3: add tests and documentation
83
36
  [2026-03-08T10:00:26.456Z] Generating test suite...
84
37
  [2026-03-08T10:00:28.012Z] All phases complete — feature "auth-module" ready for review`;
85
- const longStructuredContent = Array.from({ length: 100 }, (_, i) => {
86
- const min = String(Math.floor(i / 60)).padStart(2, '0');
87
- const sec = String(i % 60).padStart(2, '0');
88
- const ms = String((i * 7) % 1000).padStart(3, '0');
89
- const ts = `2026-03-08T10:${min}:${sec}.${ms}Z`;
90
- const phase = ['requirements', 'research', 'plan', 'implement'][i % 4];
91
- const tags = ['[tool]', '[text]', '[tool]', '[text]', '[result]', '[tokens]'];
92
- const tag = tags[i % tags.length];
93
- const messages = {
94
- '[tool]': [
95
- 'Read {"file_path": "src/components/button.tsx"}',
96
- 'Bash {"command": "pnpm test:unit"}',
97
- 'Grep {"pattern": "export function", "path": "src/"}',
98
- 'Write {"file_path": "src/new-file.ts"}',
99
- 'Glob {"pattern": "**/*.test.ts"}',
100
- ],
101
- '[text]': [
102
- 'Analyzing the component structure for potential improvements',
103
- 'The test suite is comprehensive with good coverage',
104
- 'Implementing the authentication flow with OAuth2 providers',
105
- 'Refactoring to use dependency injection pattern',
106
- ],
107
- '[result]': ['4520 chars, session=sess-xyz789'],
108
- '[tokens]': ['3200 in / 1800 out'],
109
- };
110
- const msgList = messages[tag] ?? messages['[text]'];
111
- const msg = msgList[i % msgList.length];
112
- return `[${ts}] [${phase}] [claude-code|claude-sonnet-4-6] ${tag} ${msg}`;
113
- }).join('\n');
38
+ const longLogContent = Array.from({ length: 200 }, (_, i) => `[2026-03-08T10:${String(Math.floor(i / 60)).padStart(2, '0')}:${String(i % 60).padStart(2, '0')}.${String((i * 7) % 1000).padStart(3, '0')}Z] Step ${i + 1}: processing task batch ${Math.floor(i / 10) + 1} — file ${i + 1} of 200`).join('\n');
114
39
  /* ---------------------------------------------------------------------------
115
40
  * Stories
116
41
  * ------------------------------------------------------------------------- */
117
- /** Default — structured agent log output with live connection (claude-code). */
42
+ /** Default — typical agent log output with live connection. */
118
43
  export const Default = {
119
44
  args: {
120
- content: structuredLogContent,
45
+ content: typicalLogContent,
121
46
  isConnected: true,
122
47
  error: null,
123
48
  },
124
49
  };
125
- /** LongStructured100 structured events to test scrolling behavior. */
126
- export const LongStructured = {
50
+ /** LongLog200 lines of log output to test scrolling behavior. */
51
+ export const LongLog = {
127
52
  args: {
128
- content: longStructuredContent,
129
- isConnected: true,
130
- error: null,
131
- },
132
- };
133
- /** RawFallback — unstructured log content falls back gracefully. */
134
- export const RawFallback = {
135
- args: {
136
- content: rawLogContent,
53
+ content: longLogContent,
137
54
  isConnected: true,
138
55
  error: null,
139
56
  },
@@ -141,7 +58,7 @@ export const RawFallback = {
141
58
  /** Disconnected — log content present but connection is lost. */
142
59
  export const Disconnected = {
143
60
  args: {
144
- content: structuredLogContent,
61
+ content: typicalLogContent,
145
62
  isConnected: false,
146
63
  error: null,
147
64
  },