@shepai/cli 1.113.0 → 1.114.0-pr360.d483d29

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 (156) hide show
  1. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/services/tool-installer/tool-installer.service.js +10 -3
  3. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/claude-code.json +11 -6
  4. package/dist/src/presentation/cli/commands/install.command.js +8 -1
  5. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.d.ts +5 -0
  6. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.d.ts.map +1 -0
  7. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.js +115 -0
  8. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts +18 -0
  9. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.d.ts.map +1 -0
  10. package/dist/src/presentation/web/components/common/feature-drawer-tabs/event-log-viewer.stories.js +88 -0
  11. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +1 -1
  12. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +10 -2
  13. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +5 -3
  14. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +1 -1
  15. package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +92 -9
  16. package/dist/src/presentation/web/lib/parse-log-line.d.ts +49 -0
  17. package/dist/src/presentation/web/lib/parse-log-line.d.ts.map +1 -0
  18. package/dist/src/presentation/web/lib/parse-log-line.js +126 -0
  19. package/dist/tsconfig.build.tsbuildinfo +1 -1
  20. package/package.json +1 -1
  21. package/web/.next/BUILD_ID +1 -1
  22. package/web/.next/build-manifest.json +2 -2
  23. package/web/.next/fallback-build-manifest.json +2 -2
  24. package/web/.next/prerender-manifest.json +3 -3
  25. package/web/.next/required-server-files.js +3 -3
  26. package/web/.next/required-server-files.json +3 -3
  27. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +20 -20
  28. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  31. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +26 -26
  34. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  37. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +20 -20
  40. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +26 -26
  43. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  44. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +26 -26
  46. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +18 -18
  49. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  50. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  51. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +18 -18
  52. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  53. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/_global-error.html +2 -2
  55. package/web/.next/server/app/_global-error.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  58. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  59. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  60. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  61. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  62. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  63. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  64. package/web/.next/server/app/api/cli-upgrade/route.js +2 -2
  65. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  66. package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
  67. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  68. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  70. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  71. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  73. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  74. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  75. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  76. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  78. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js +2 -2
  79. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  80. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  81. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js +1 -1
  82. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_a1104008.js.map +1 -1
  83. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js +1 -1
  84. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_92642200.js.map +1 -1
  85. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js +1 -1
  86. package/web/.next/server/chunks/ssr/[root-of-the-server]__039967e3._.js.map +1 -1
  87. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js +1 -1
  88. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
  89. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
  90. package/web/.next/server/chunks/ssr/[root-of-the-server]__24dd0927._.js +2 -2
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js +1 -1
  92. package/web/.next/server/chunks/ssr/[root-of-the-server]__2773312c._.js.map +1 -1
  93. package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
  94. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js +1 -1
  95. package/web/.next/server/chunks/ssr/[root-of-the-server]__6367aea0._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__89e8a5cc._.js +2 -2
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__b1e68e34._.js +3 -0
  100. package/web/.next/server/chunks/ssr/{[root-of-the-server]__d91fdd51._.js.map → [root-of-the-server]__b1e68e34._.js.map} +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js +1 -1
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__cbd8062c._.js.map +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__e70c5627._.js.map +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
  107. package/web/.next/server/chunks/ssr/_135edb9c._.js +1 -1
  108. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +1 -1
  109. package/web/.next/server/chunks/ssr/{_fcfc1141._.js → _43770eb2._.js} +2 -2
  110. package/web/.next/server/chunks/ssr/{_fcfc1141._.js.map → _43770eb2._.js.map} +1 -1
  111. package/web/.next/server/chunks/ssr/{_88e359a0._.js → _48c829f1._.js} +2 -2
  112. package/web/.next/server/chunks/ssr/{_88e359a0._.js.map → _48c829f1._.js.map} +1 -1
  113. package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
  114. package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/_cc77a143._.js +1 -1
  116. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/{_e6b5ebbd._.js → _f3c59b1f._.js} +2 -2
  118. package/web/.next/server/chunks/ssr/{_e6b5ebbd._.js.map → _f3c59b1f._.js.map} +1 -1
  119. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  120. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  121. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js +1 -1
  122. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_888633e1.js.map +1 -1
  123. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  124. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  125. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  126. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  127. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js +2 -2
  128. package/web/.next/server/chunks/ssr/src_presentation_web_ce7cbc3c._.js.map +1 -1
  129. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  130. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  131. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  132. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  133. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js +2 -2
  134. package/web/.next/server/chunks/ssr/src_presentation_web_e2604413._.js.map +1 -1
  135. package/web/.next/server/pages/500.html +2 -2
  136. package/web/.next/server/server-reference-manifest.js +1 -1
  137. package/web/.next/server/server-reference-manifest.json +31 -31
  138. package/web/.next/static/chunks/{d3ae2e0768e0361a.js → 09a74264e5ed304f.js} +1 -1
  139. package/web/.next/static/chunks/{e870d8454835338c.js → 300cd5f76cc1144a.js} +1 -1
  140. package/web/.next/static/chunks/33ccbc18b3e012a9.js +1 -0
  141. package/web/.next/static/chunks/{45687d169255cd7a.js → 3eb1e79b22bf051a.js} +1 -1
  142. package/web/.next/static/chunks/{ebf7b7a1414b813f.js → 421c707530b44f35.js} +1 -1
  143. package/web/.next/static/chunks/57b45edf86522369.css +1 -0
  144. package/web/.next/static/chunks/{0e3793f87c0d2be4.js → 9638ec87d5c2c118.js} +1 -1
  145. package/web/.next/static/chunks/b1f3c0e8e9872ef8.js +1 -0
  146. package/web/.next/static/chunks/{9bfafbbd2d362548.js → b6d8a6171c303fec.js} +2 -2
  147. package/web/.next/static/chunks/{7249bab754695c9b.js → c3cad609d7f01af9.js} +2 -2
  148. package/web/.next/static/chunks/{af4d18c173729fc0.js → cf1fbc1964ad0a7b.js} +1 -1
  149. package/web/.next/static/chunks/{1213d5af738d8e44.js → e13524c537ba83f4.js} +1 -1
  150. package/web/.next/server/chunks/ssr/[root-of-the-server]__d91fdd51._.js +0 -3
  151. package/web/.next/static/chunks/07b853e29af1e5f2.js +0 -1
  152. package/web/.next/static/chunks/694fc9a1173043d8.css +0 -1
  153. package/web/.next/static/chunks/e7d33f2288fea0d0.js +0 -1
  154. /package/web/.next/static/{f-Ju5FEgjPPi1hAjRWRoZ → TjpT2DsAHrsnldHKzuinM}/_buildManifest.js +0 -0
  155. /package/web/.next/static/{f-Ju5FEgjPPi1hAjRWRoZ → TjpT2DsAHrsnldHKzuinM}/_clientMiddlewareManifest.json +0 -0
  156. /package/web/.next/static/{f-Ju5FEgjPPi1hAjRWRoZ → TjpT2DsAHrsnldHKzuinM}/_ssgManifest.js +0 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Parses structured log lines from the feature agent worker process.
3
+ *
4
+ * Log format: [timestamp] [phase] [agent|model] [tag] message
5
+ * Worker format: [timestamp] [agent|model] [WORKER] message
6
+ * Fallback: raw string lines
7
+ */
8
+ /**
9
+ * Regex to match structured log lines.
10
+ * Captures: timestamp, optional phase, optional agent|model, rest of message
11
+ *
12
+ * Examples:
13
+ * [2026-03-08T10:00:01.123Z] [requirements] [claude-code|claude-haiku-4-5] [tool] Read {"path":"f.ts"}
14
+ * [2026-03-08T10:00:01.123Z] [claude-code|claude-haiku-4-5] [WORKER] Starting worker
15
+ * [2026-03-08T10:00:01.123Z] [requirements] [claude-code|claude-haiku-4-5] Starting...
16
+ */
17
+ const LOG_LINE_REGEX = /^\[(\d{4}-\d{2}-\d{2}T[\d:.]+Z?)\]\s+(?:\[([^\]]+)\]\s+)?(?:\[([^\]|]+)(?:\|([^\]]+))?\]\s+)?(.*)$/;
18
+ const TAG_REGEX = /^\[(tool|text|result|tokens|raw|WORKER)\]\s*(.*)/;
19
+ export function parseLogLine(raw) {
20
+ const match = raw.match(LOG_LINE_REGEX);
21
+ if (!match) {
22
+ return {
23
+ timestamp: null,
24
+ phase: null,
25
+ agent: null,
26
+ model: null,
27
+ tag: 'raw',
28
+ message: raw,
29
+ raw,
30
+ };
31
+ }
32
+ const [, timestamp, group1, group2, group3, rest] = match;
33
+ // Determine phase, agent, model from the captured groups.
34
+ // The log format can be:
35
+ // [ts] [phase] [agent|model] message → group1=phase, group2=agent, group3=model
36
+ // [ts] [agent|model] [WORKER] message → group1="agent|model", group2=WORKER
37
+ // [ts] [phase] [agent] message → group1=phase, group2=agent
38
+ // [ts] [phase] message → group1=phase only
39
+ let phase = null;
40
+ let agent = null;
41
+ let model = null;
42
+ let message = rest ?? '';
43
+ if (group2 != null && group1 != null) {
44
+ // Two bracket groups captured
45
+ if (group1.includes('|')) {
46
+ // group1 is [agent|model], group2 is next tag (e.g. WORKER)
47
+ const [agentPart, modelPart] = group1.split('|');
48
+ agent = agentPart;
49
+ model = modelPart ?? null;
50
+ // group2 becomes part of the message to be parsed as a tag
51
+ message = `[${group2}] ${rest ?? ''}`;
52
+ }
53
+ else {
54
+ // group1 is [phase], group2|group3 is [agent|model]
55
+ phase = group1;
56
+ agent = group2;
57
+ model = group3 ?? null;
58
+ }
59
+ }
60
+ else if (group1 != null) {
61
+ // Only one bracket group
62
+ if (group1.includes('|')) {
63
+ const [agentPart, modelPart] = group1.split('|');
64
+ agent = agentPart;
65
+ model = modelPart ?? null;
66
+ }
67
+ else {
68
+ phase = group1;
69
+ }
70
+ }
71
+ // Parse tag from message
72
+ const tagMatch = message.match(TAG_REGEX);
73
+ let tag = 'info';
74
+ if (tagMatch) {
75
+ tag = tagMatch[1].toLowerCase();
76
+ message = tagMatch[2];
77
+ }
78
+ return {
79
+ timestamp: timestamp ?? null,
80
+ phase,
81
+ agent,
82
+ model,
83
+ tag,
84
+ message: message.trim(),
85
+ raw,
86
+ };
87
+ }
88
+ /** Parse a [tool] message into tool name and args */
89
+ export function parseToolCall(message) {
90
+ const spaceIdx = message.indexOf(' ');
91
+ if (spaceIdx === -1) {
92
+ return { toolName: message, args: '' };
93
+ }
94
+ return {
95
+ toolName: message.slice(0, spaceIdx),
96
+ args: message.slice(spaceIdx + 1),
97
+ };
98
+ }
99
+ /** Parse a [result] message */
100
+ export function parseResultMessage(message) {
101
+ const charsMatch = message.match(/^(\d+)\s+chars/);
102
+ const sessionMatch = message.match(/session=(\S+)/);
103
+ return {
104
+ chars: charsMatch ? parseInt(charsMatch[1], 10) : 0,
105
+ sessionId: sessionMatch ? sessionMatch[1] : null,
106
+ };
107
+ }
108
+ /** Parse a [tokens] message */
109
+ export function parseTokensMessage(message) {
110
+ const match = message.match(/^(\d+)\s+in\s*\/\s*(\d+)\s+out/);
111
+ if (!match)
112
+ return { inputTokens: 0, outputTokens: 0 };
113
+ return {
114
+ inputTokens: parseInt(match[1], 10),
115
+ outputTokens: parseInt(match[2], 10),
116
+ };
117
+ }
118
+ /** Parse all lines from raw content string */
119
+ export function parseLogContent(content) {
120
+ if (!content)
121
+ return [];
122
+ return content
123
+ .split('\n')
124
+ .filter((line) => line.trim().length > 0)
125
+ .map(parseLogLine);
126
+ }