@n1k1t/pipelain 0.4.14 → 1.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/.claude/settings.local.json +7 -0
- package/AGENTS.md +20 -0
- package/README.md +185 -12
- package/assets/report/index.hbs +201 -79
- package/assets/report/main.css +135 -3
- package/cli/index.ts +77 -0
- package/lib/src/index.d.ts +2 -0
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -0
- package/lib/src/index.js.map +1 -1
- package/lib/src/models/content/factory.d.ts +7 -1
- package/lib/src/models/content/factory.d.ts.map +1 -1
- package/lib/src/models/content/factory.js +15 -0
- package/lib/src/models/content/factory.js.map +1 -1
- package/lib/src/models/content/kinds/article.d.ts +3 -1
- package/lib/src/models/content/kinds/article.d.ts.map +1 -1
- package/lib/src/models/content/kinds/article.js +7 -0
- package/lib/src/models/content/kinds/article.js.map +1 -1
- package/lib/src/models/content/kinds/attachment.d.ts +3 -1
- package/lib/src/models/content/kinds/attachment.d.ts.map +1 -1
- package/lib/src/models/content/kinds/attachment.js +7 -0
- package/lib/src/models/content/kinds/attachment.js.map +1 -1
- package/lib/src/models/content/kinds/group.d.ts +3 -1
- package/lib/src/models/content/kinds/group.d.ts.map +1 -1
- package/lib/src/models/content/kinds/group.js +7 -0
- package/lib/src/models/content/kinds/group.js.map +1 -1
- package/lib/src/models/content/kinds/model.d.ts +5 -0
- package/lib/src/models/content/kinds/model.d.ts.map +1 -1
- package/lib/src/models/content/kinds/model.js +6 -0
- package/lib/src/models/content/kinds/model.js.map +1 -1
- package/lib/src/models/content/kinds/plain.d.ts +3 -1
- package/lib/src/models/content/kinds/plain.d.ts.map +1 -1
- package/lib/src/models/content/kinds/plain.js +7 -0
- package/lib/src/models/content/kinds/plain.js.map +1 -1
- package/lib/src/models/content/kinds/rules.d.ts +3 -1
- package/lib/src/models/content/kinds/rules.d.ts.map +1 -1
- package/lib/src/models/content/kinds/rules.js +7 -0
- package/lib/src/models/content/kinds/rules.js.map +1 -1
- package/lib/src/models/content/kinds/sources.d.ts +3 -1
- package/lib/src/models/content/kinds/sources.d.ts.map +1 -1
- package/lib/src/models/content/kinds/sources.js +7 -0
- package/lib/src/models/content/kinds/sources.js.map +1 -1
- package/lib/src/models/content/kinds/tasks.d.ts +3 -1
- package/lib/src/models/content/kinds/tasks.d.ts.map +1 -1
- package/lib/src/models/content/kinds/tasks.js +7 -0
- package/lib/src/models/content/kinds/tasks.js.map +1 -1
- package/lib/src/models/index.d.ts +1 -0
- package/lib/src/models/index.d.ts.map +1 -1
- package/lib/src/models/index.js +1 -0
- package/lib/src/models/index.js.map +1 -1
- package/lib/src/models/llm/hook.d.ts +128 -0
- package/lib/src/models/llm/hook.d.ts.map +1 -0
- package/lib/src/models/llm/hook.js +129 -0
- package/lib/src/models/llm/hook.js.map +1 -0
- package/lib/src/models/llm/index.d.ts +1 -0
- package/lib/src/models/llm/index.d.ts.map +1 -1
- package/lib/src/models/llm/index.js +1 -0
- package/lib/src/models/llm/index.js.map +1 -1
- package/lib/src/models/llm/mcp.d.ts +4 -0
- package/lib/src/models/llm/mcp.d.ts.map +1 -1
- package/lib/src/models/llm/mcp.js +5 -2
- package/lib/src/models/llm/mcp.js.map +1 -1
- package/lib/src/models/llm/providers/model.d.ts +1 -1
- package/lib/src/models/llm/providers/model.d.ts.map +1 -1
- package/lib/src/models/llm/providers/proxy.d.ts +6 -0
- package/lib/src/models/llm/providers/proxy.d.ts.map +1 -1
- package/lib/src/models/llm/providers/proxy.js +5 -3
- package/lib/src/models/llm/providers/proxy.js.map +1 -1
- package/lib/src/models/llm/router.d.ts +6 -0
- package/lib/src/models/llm/router.d.ts.map +1 -1
- package/lib/src/models/llm/router.js +12 -0
- package/lib/src/models/llm/router.js.map +1 -1
- package/lib/src/models/llm/tools/attachment.js +2 -2
- package/lib/src/models/llm/tools/attachment.js.map +1 -1
- package/lib/src/models/llm/tools/edit.js +3 -3
- package/lib/src/models/llm/tools/edit.js.map +1 -1
- package/lib/src/models/llm/tools/fetch.js +4 -4
- package/lib/src/models/llm/tools/fetch.js.map +1 -1
- package/lib/src/models/llm/tools/grep.js +2 -2
- package/lib/src/models/llm/tools/grep.js.map +1 -1
- package/lib/src/models/llm/tools/ls.js +2 -2
- package/lib/src/models/llm/tools/ls.js.map +1 -1
- package/lib/src/models/llm/tools/mkdir.js +2 -2
- package/lib/src/models/llm/tools/mkdir.js.map +1 -1
- package/lib/src/models/llm/tools/model.d.ts +4 -4
- package/lib/src/models/llm/tools/model.d.ts.map +1 -1
- package/lib/src/models/llm/tools/model.js +19 -10
- package/lib/src/models/llm/tools/model.js.map +1 -1
- package/lib/src/models/llm/tools/npm.js +1 -1
- package/lib/src/models/llm/tools/npm.js.map +1 -1
- package/lib/src/models/llm/tools/npx.js +1 -1
- package/lib/src/models/llm/tools/npx.js.map +1 -1
- package/lib/src/models/llm/tools/read.js +3 -3
- package/lib/src/models/llm/tools/read.js.map +1 -1
- package/lib/src/models/llm/tools/rm.js +4 -4
- package/lib/src/models/llm/tools/rm.js.map +1 -1
- package/lib/src/models/llm/tools/search.js +2 -2
- package/lib/src/models/llm/tools/search.js.map +1 -1
- package/lib/src/models/llm/tools/skill.js +2 -2
- package/lib/src/models/llm/tools/skill.js.map +1 -1
- package/lib/src/models/llm/tools/write.js +3 -3
- package/lib/src/models/llm/tools/write.js.map +1 -1
- package/lib/src/models/meta.d.ts +12 -0
- package/lib/src/models/meta.d.ts.map +1 -0
- package/lib/src/models/meta.js +32 -0
- package/lib/src/models/meta.js.map +1 -0
- package/lib/src/models/pipeline/model.d.ts +2 -0
- package/lib/src/models/pipeline/model.d.ts.map +1 -1
- package/lib/src/models/pipeline/model.js +8 -4
- package/lib/src/models/pipeline/model.js.map +1 -1
- package/lib/src/models/pipeline/parameters.d.ts.map +1 -1
- package/lib/src/models/pipeline/parameters.js +5 -1
- package/lib/src/models/pipeline/parameters.js.map +1 -1
- package/lib/src/models/pipeline/report/index.d.ts.map +1 -1
- package/lib/src/models/pipeline/report/index.js +28 -10
- package/lib/src/models/pipeline/report/index.js.map +1 -1
- package/lib/src/models/pipeline/report/types.d.ts +15 -7
- package/lib/src/models/pipeline/report/types.d.ts.map +1 -1
- package/lib/src/models/pipeline/session.d.ts +16 -36
- package/lib/src/models/pipeline/session.d.ts.map +1 -1
- package/lib/src/models/pipeline/session.js +15 -10
- package/lib/src/models/pipeline/session.js.map +1 -1
- package/lib/src/models/pipeline/stdout/compiled/console.js +16 -13
- package/lib/src/models/pipeline/stdout/compiled/console.js.map +1 -1
- package/lib/src/models/pipeline/stdout/model.d.ts +1 -1
- package/lib/src/models/pipeline/stdout/model.d.ts.map +1 -1
- package/lib/src/models/pipeline/stdout/model.js +12 -7
- package/lib/src/models/pipeline/stdout/model.js.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/fallback.d.ts +31 -0
- package/lib/src/models/pipeline/steps/ai/actions/fallback.d.ts.map +1 -0
- package/lib/src/models/pipeline/steps/ai/actions/fallback.js +51 -0
- package/lib/src/models/pipeline/steps/ai/actions/fallback.js.map +1 -0
- package/lib/src/models/pipeline/steps/ai/actions/index.d.ts +1 -0
- package/lib/src/models/pipeline/steps/ai/actions/index.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/index.js +1 -0
- package/lib/src/models/pipeline/steps/ai/actions/index.js.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/model.d.ts +3 -6
- package/lib/src/models/pipeline/steps/ai/actions/model.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/model.js +3 -11
- package/lib/src/models/pipeline/steps/ai/actions/model.js.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/reasoning.d.ts +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/reasoning.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/reasoning.js +6 -4
- package/lib/src/models/pipeline/steps/ai/actions/reasoning.js.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/tool.d.ts +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/tool.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/ai/actions/tool.js +4 -3
- package/lib/src/models/pipeline/steps/ai/actions/tool.js.map +1 -1
- package/lib/src/models/pipeline/steps/ai/index.d.ts +5 -1
- package/lib/src/models/pipeline/steps/ai/index.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/ai/index.js +134 -97
- package/lib/src/models/pipeline/steps/ai/index.js.map +1 -1
- package/lib/src/models/pipeline/steps/ai/types.d.ts +5 -1
- package/lib/src/models/pipeline/steps/ai/types.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/ai/utils.js +1 -1
- package/lib/src/models/pipeline/steps/ai/utils.js.map +1 -1
- package/lib/src/models/pipeline/steps/loop.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/loop.js +10 -7
- package/lib/src/models/pipeline/steps/loop.js.map +1 -1
- package/lib/src/models/pipeline/steps/model.d.ts +2 -0
- package/lib/src/models/pipeline/steps/model.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/model.js +2 -0
- package/lib/src/models/pipeline/steps/model.js.map +1 -1
- package/lib/src/models/pipeline/steps/self.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/self.js +6 -5
- package/lib/src/models/pipeline/steps/self.js.map +1 -1
- package/lib/src/models/pipeline/steps/swarm.d.ts +13 -6
- package/lib/src/models/pipeline/steps/swarm.d.ts.map +1 -1
- package/lib/src/models/pipeline/steps/swarm.js +46 -23
- package/lib/src/models/pipeline/steps/swarm.js.map +1 -1
- package/lib/src/models/pipeline/types.d.ts +1 -0
- package/lib/src/models/pipeline/types.d.ts.map +1 -1
- package/lib/src/setup.js +30 -3
- package/lib/src/setup.js.map +1 -1
- package/lib/src/utils/common.d.ts +8 -0
- package/lib/src/utils/common.d.ts.map +1 -1
- package/lib/src/utils/common.js +14 -1
- package/lib/src/utils/common.js.map +1 -1
- package/lib/src/utils/index.d.ts +0 -1
- package/lib/src/utils/index.d.ts.map +1 -1
- package/lib/src/utils/index.js +0 -1
- package/lib/src/utils/index.js.map +1 -1
- package/package.json +13 -12
- package/lib/src/utils/meta.d.ts +0 -9
- package/lib/src/utils/meta.d.ts.map +0 -1
- package/lib/src/utils/meta.js +0 -15
- package/lib/src/utils/meta.js.map +0 -1
package/assets/report/index.hbs
CHANGED
|
@@ -22,13 +22,21 @@
|
|
|
22
22
|
PipelAIn Report
|
|
23
23
|
</h1>
|
|
24
24
|
<div class="session-info">
|
|
25
|
-
<div class="info-
|
|
26
|
-
<
|
|
27
|
-
|
|
25
|
+
<div class="info-column">
|
|
26
|
+
<div class="info-item">
|
|
27
|
+
<span class="info-label">Session ID:</span>
|
|
28
|
+
<span class="info-value text-mono">{{session.id}}</span>
|
|
29
|
+
</div>
|
|
28
30
|
</div>
|
|
29
|
-
<div class="info-
|
|
30
|
-
<
|
|
31
|
-
|
|
31
|
+
<div class="info-column">
|
|
32
|
+
<div class="info-item">
|
|
33
|
+
<span class="info-label">Timestamp:</span>
|
|
34
|
+
<span class="info-value">{{formatDate session.timestamp}} {{formatTime session.timestamp}}</span>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="info-item">
|
|
37
|
+
<span class="info-label">Spent:</span>
|
|
38
|
+
<span class="info-value">{{formatDuration session.spent}}</span>
|
|
39
|
+
</div>
|
|
32
40
|
</div>
|
|
33
41
|
</div>
|
|
34
42
|
</div>
|
|
@@ -37,12 +45,16 @@
|
|
|
37
45
|
<div class="metrics-grid">
|
|
38
46
|
<div class="metric-card">
|
|
39
47
|
<div class="metric-label">Total Tokens</div>
|
|
40
|
-
<div class="metric-value">{{sum usage.llm.total.prompt usage.llm.total.completion}}</div>
|
|
48
|
+
<div class="metric-value">{{sum (sum usage.llm.total.prompt usage.llm.total.cached) usage.llm.total.completion}}</div>
|
|
41
49
|
</div>
|
|
42
50
|
<div class="metric-card">
|
|
43
51
|
<div class="metric-label">Prompt Tokens</div>
|
|
44
52
|
<div class="metric-value">{{usage.llm.total.prompt}}</div>
|
|
45
53
|
</div>
|
|
54
|
+
<div class="metric-card">
|
|
55
|
+
<div class="metric-label">Cached Tokens</div>
|
|
56
|
+
<div class="metric-value">{{usage.llm.total.cached}}</div>
|
|
57
|
+
</div>
|
|
46
58
|
<div class="metric-card">
|
|
47
59
|
<div class="metric-label">Completion Tokens</div>
|
|
48
60
|
<div class="metric-value">{{usage.llm.total.completion}}</div>
|
|
@@ -52,31 +64,69 @@
|
|
|
52
64
|
|
|
53
65
|
<!-- Snapshots -->
|
|
54
66
|
<main class="snapshots-section">
|
|
55
|
-
<h2 class="section-title">
|
|
67
|
+
<h2 class="section-title">Snapshots <span class="text-muted">({{snapshots.length}})</span></h2>
|
|
56
68
|
|
|
57
69
|
<div class="snapshots-list">
|
|
58
70
|
{{#each snapshots}}
|
|
59
|
-
|
|
71
|
+
{{#if (eq type "log")}}
|
|
72
|
+
<!-- Log -->
|
|
73
|
+
<details class="snapshot-card state-log log-{{level}}">
|
|
74
|
+
<summary class="snapshot-summary">
|
|
75
|
+
<div class="summary-left">
|
|
76
|
+
<span class="expand-arrow">▶</span>
|
|
77
|
+
<span class="action-type-badge badge-log-{{level}}">{{level}}</span>
|
|
78
|
+
<span class="log-preview text-mono">{{message}}</span>
|
|
79
|
+
</div>
|
|
80
|
+
</summary>
|
|
81
|
+
|
|
82
|
+
<div class="snapshot-content">
|
|
83
|
+
<pre class="log-message"><code>{{message}}</code></pre>
|
|
84
|
+
</div>
|
|
85
|
+
</details>
|
|
86
|
+
{{else}}
|
|
87
|
+
<details class="snapshot-card {{#if (eq type "step:error")}}state-error{{else}}state-done{{/if}}">
|
|
60
88
|
<summary class="snapshot-summary">
|
|
61
89
|
<div class="summary-left">
|
|
62
90
|
<span class="expand-arrow">▶</span>
|
|
91
|
+
{{#if (eq type "step:error")}}
|
|
92
|
+
<span class="action-type-badge badge-error">ERROR</span>
|
|
93
|
+
{{else}}
|
|
94
|
+
<span class="action-type-badge badge-success">DONE</span>
|
|
95
|
+
{{/if}}
|
|
63
96
|
<span class="step-title">{{step.title}}</span>
|
|
64
97
|
</div>
|
|
65
98
|
<div class="summary-right">
|
|
66
99
|
<span class="llm-tag text-muted">{{llm.name}}/{{llm.model}}</span>
|
|
67
|
-
{{#if
|
|
68
|
-
<span class="
|
|
69
|
-
{{else}}
|
|
70
|
-
{{#if usage.totalTokens}}
|
|
71
|
-
<span class="usage-tag">{{usage.totalTokens}} tokens</span>
|
|
72
|
-
{{/if}}
|
|
73
|
-
<span class="badge badge-success">DONE</span>
|
|
100
|
+
{{#if (tokens usage "total")}}
|
|
101
|
+
<span class="usage-tag">{{tokens usage "total"}} tokens</span>
|
|
74
102
|
{{/if}}
|
|
75
|
-
<span class="time-tag text-muted">{{
|
|
103
|
+
<span class="time-tag text-muted">{{formatDuration meta.spent}}</span>
|
|
76
104
|
</div>
|
|
77
105
|
</summary>
|
|
78
106
|
|
|
79
107
|
<div class="snapshot-content">
|
|
108
|
+
{{#if usage}}
|
|
109
|
+
<!-- Step Tokens -->
|
|
110
|
+
<div class="tokens-grid">
|
|
111
|
+
<div class="token-cell">
|
|
112
|
+
<span class="token-label">Total Tokens</span>
|
|
113
|
+
<span class="token-value text-mono">{{tokens usage "total"}}</span>
|
|
114
|
+
</div>
|
|
115
|
+
<div class="token-cell">
|
|
116
|
+
<span class="token-label">Prompt Tokens</span>
|
|
117
|
+
<span class="token-value text-mono">{{tokens usage "prompt"}}</span>
|
|
118
|
+
</div>
|
|
119
|
+
<div class="token-cell">
|
|
120
|
+
<span class="token-label">Cached Tokens</span>
|
|
121
|
+
<span class="token-value text-mono">{{tokens usage "cached"}}</span>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="token-cell">
|
|
124
|
+
<span class="token-label">Completion Tokens</span>
|
|
125
|
+
<span class="token-value text-mono">{{tokens usage "completion"}}</span>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
{{/if}}
|
|
129
|
+
|
|
80
130
|
<!-- Step Metrics -->
|
|
81
131
|
<div class="step-meta">
|
|
82
132
|
<div class="meta-row">
|
|
@@ -84,15 +134,14 @@
|
|
|
84
134
|
<span class="meta-value text-mono">{{llm.name}}/{{llm.model}}</span>
|
|
85
135
|
</div>
|
|
86
136
|
|
|
87
|
-
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
</div>
|
|
92
|
-
{{/if}}
|
|
137
|
+
<div class="meta-row">
|
|
138
|
+
<span class="meta-label">Started:</span>
|
|
139
|
+
<span class="meta-value text-mono">{{formatTime meta.timestamp}}</span>
|
|
140
|
+
</div>
|
|
93
141
|
</div>
|
|
94
142
|
|
|
95
|
-
|
|
143
|
+
|
|
144
|
+
{{#if (eq type "step:error")}}
|
|
96
145
|
<div class="error-box">
|
|
97
146
|
<div class="error-header">
|
|
98
147
|
<svg class="error-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -167,85 +216,157 @@
|
|
|
167
216
|
{{#if (eq type "ai:tool")}}
|
|
168
217
|
<span class="action-type-badge badge-tool">TOOL</span>
|
|
169
218
|
<span class="action-name text-mono">{{name}}</span>
|
|
219
|
+
{{#if (previewInput input)}}
|
|
220
|
+
<span class="action-preview text-mono">{{previewInput input}}</span>
|
|
221
|
+
{{/if}}
|
|
222
|
+
{{else if (eq type "ai:fallback")}}
|
|
223
|
+
<span class="action-type-badge badge-fallback">FALLBACK</span>
|
|
224
|
+
<span class="action-name text-mono">{{llm.old.model}}</span>
|
|
170
225
|
{{else}}
|
|
171
226
|
<span class="action-type-badge badge-reasoning">REASONING</span>
|
|
172
227
|
{{/if}}
|
|
173
228
|
</div>
|
|
174
229
|
<div class="summary-right">
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
230
|
+
{{#if (eq type "ai:fallback")}}
|
|
231
|
+
<span class="badge badge-error">{{error.type}}</span>
|
|
232
|
+
<span class="time-tag">{{formatDuration meta.spent}}</span>
|
|
233
|
+
{{else}}
|
|
234
|
+
<span class="llm-tag text-muted">{{llm.name}}/{{llm.model}}</span>
|
|
235
|
+
<span class="badge badge-{{meta.state}}">{{meta.state}}</span>
|
|
236
|
+
<span class="time-tag">{{formatDuration meta.spent}}</span>
|
|
237
|
+
{{/if}}
|
|
178
238
|
</div>
|
|
179
239
|
</summary>
|
|
180
240
|
|
|
181
241
|
<div class="action-content">
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
<div class="meta-
|
|
186
|
-
<span class="meta-label">Model:</span>
|
|
187
|
-
<span class="meta-value text-mono">{{llm.name}}/{{llm.model}}</span>
|
|
188
|
-
</div>
|
|
189
|
-
{{#if id}}
|
|
242
|
+
{{#if (eq type "ai:fallback")}}
|
|
243
|
+
<!-- Fallback LLM Info -->
|
|
244
|
+
<div class="io-title">Transition</div>
|
|
245
|
+
<div class="action-meta-grid">
|
|
190
246
|
<div class="meta-row">
|
|
191
|
-
<span class="meta-label">
|
|
192
|
-
<span class="meta-value text-mono">{{
|
|
247
|
+
<span class="meta-label">From:</span>
|
|
248
|
+
<span class="meta-value text-mono">{{llm.old.name}}/{{llm.old.model}}</span>
|
|
193
249
|
</div>
|
|
194
|
-
|
|
195
|
-
|
|
250
|
+
<div class="meta-row">
|
|
251
|
+
<span class="meta-label">To:</span>
|
|
252
|
+
<span class="meta-value text-mono">{{llm.new.name}}/{{llm.new.model}}</span>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
196
255
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
<div class="
|
|
200
|
-
<div class="
|
|
201
|
-
<
|
|
202
|
-
|
|
256
|
+
<!-- Fallback Reason -->
|
|
257
|
+
<div class="io-title">Reason</div>
|
|
258
|
+
<div class="error-box error-box-fallback">
|
|
259
|
+
<div class="error-header">
|
|
260
|
+
<svg class="error-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
261
|
+
<circle cx="12" cy="12" r="10" />
|
|
262
|
+
<line x1="12" y1="8" x2="12" y2="12" />
|
|
263
|
+
<line x1="12" y1="16" x2="12.01" y2="16" />
|
|
264
|
+
</svg>
|
|
265
|
+
<span class="error-type">{{error.type}}</span>
|
|
203
266
|
</div>
|
|
267
|
+
<div class="error-message">{{error.reason}}</div>
|
|
268
|
+
</div>
|
|
204
269
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
270
|
+
<div class="io-title">Previous Provider</div>
|
|
271
|
+
<div class="action-meta-grid">
|
|
272
|
+
{{#if llm.old.parameters}}
|
|
273
|
+
<div class="span-all">
|
|
274
|
+
<span class="meta-label">Parameters:</span>
|
|
275
|
+
<pre><code class="language-json">{{json llm.old.parameters}}</code></pre>
|
|
276
|
+
</div>
|
|
277
|
+
{{/if}}
|
|
278
|
+
{{#if llm.old.options}}
|
|
279
|
+
<div class="span-all">
|
|
280
|
+
<span class="meta-label">Options:</span>
|
|
281
|
+
<pre><code class="language-json">{{json llm.old.options}}</code></pre>
|
|
282
|
+
</div>
|
|
283
|
+
{{/if}}
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
<div class="io-title">fallback Provider</div>
|
|
287
|
+
<div class="action-meta-grid">
|
|
288
|
+
{{#if llm.new.parameters}}
|
|
289
|
+
<div class="span-all">
|
|
290
|
+
<span class="meta-label">Parameters:</span>
|
|
291
|
+
<pre><code class="language-json">{{json llm.new.parameters}}</code></pre>
|
|
292
|
+
</div>
|
|
293
|
+
{{/if}}
|
|
294
|
+
{{#if llm.new.options}}
|
|
295
|
+
<div class="span-all">
|
|
296
|
+
<span class="meta-label">Options:</span>
|
|
297
|
+
<pre><code class="language-json">{{json llm.new.options}}</code></pre>
|
|
215
298
|
</div>
|
|
216
299
|
{{/if}}
|
|
217
300
|
</div>
|
|
218
301
|
{{else}}
|
|
219
|
-
<!--
|
|
220
|
-
<div class="
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
<
|
|
302
|
+
<!-- Action LLM & Details -->
|
|
303
|
+
<div class="io-title">Info</div>
|
|
304
|
+
<div class="action-meta-grid">
|
|
305
|
+
<div class="meta-row">
|
|
306
|
+
<span class="meta-label">Model:</span>
|
|
307
|
+
<span class="meta-value text-mono">{{llm.name}}/{{llm.model}}</span>
|
|
224
308
|
</div>
|
|
309
|
+
{{#if id}}
|
|
310
|
+
<div class="meta-row">
|
|
311
|
+
<span class="meta-label">Action ID:</span>
|
|
312
|
+
<span class="meta-value text-mono">{{id}}</span>
|
|
313
|
+
</div>
|
|
314
|
+
{{/if}}
|
|
225
315
|
</div>
|
|
226
|
-
{{/if}}
|
|
227
316
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
317
|
+
<!-- Tool Input/Output -->
|
|
318
|
+
{{#if (eq type "ai:tool")}}
|
|
319
|
+
<div class="action-io">
|
|
320
|
+
<div class="io-block">
|
|
321
|
+
<div class="io-title">Input ({{input.type}})</div>
|
|
322
|
+
<pre><code class="{{#if (eq input.type "json")}}language-json{{/if}}">{{#if (eq input.type "json")}}{{json input.value}}{{else}}{{input.value}}{{/if}}</code></pre>
|
|
323
|
+
</div>
|
|
324
|
+
|
|
325
|
+
{{#if output}}
|
|
326
|
+
<div class="io-block {{#if (eq output.type "error")}}io-error{{/if}}">
|
|
327
|
+
<div class="io-title">Output ({{output.type}})</div>
|
|
328
|
+
{{#if (eq output.type "error")}}
|
|
329
|
+
<div class="error-output">
|
|
330
|
+
<pre><code>{{#if (eq output.value.type "json")}}{{json output.value.payload}}{{else}}{{output.value.payload}}{{/if}}</code></pre>
|
|
331
|
+
</div>
|
|
332
|
+
{{else}}
|
|
333
|
+
<pre><code class="{{#if (eq output.type "json")}}language-json{{/if}}">{{#if (eq output.type "json")}}{{json output.value}}{{else}}{{output.value}}{{/if}}</code></pre>
|
|
334
|
+
{{/if}}
|
|
335
|
+
</div>
|
|
336
|
+
{{/if}}
|
|
240
337
|
</div>
|
|
241
|
-
{{
|
|
242
|
-
|
|
243
|
-
<div class="
|
|
244
|
-
<
|
|
245
|
-
|
|
338
|
+
{{else}}
|
|
339
|
+
<!-- Reasoning Output -->
|
|
340
|
+
<div class="action-io">
|
|
341
|
+
<div class="io-block">
|
|
342
|
+
<div class="io-title">Reasoning Output</div>
|
|
343
|
+
<pre class="reasoning-output"><code>{{output}}</code></pre>
|
|
344
|
+
</div>
|
|
246
345
|
</div>
|
|
247
346
|
{{/if}}
|
|
248
|
-
|
|
347
|
+
|
|
348
|
+
<div class="io-title">Provider</div>
|
|
349
|
+
<div class="action-meta-grid">
|
|
350
|
+
{{#if llm.parameters}}
|
|
351
|
+
<div class="span-all">
|
|
352
|
+
<span class="meta-label">Parameters:</span>
|
|
353
|
+
<pre><code class="language-json">{{json llm.parameters}}</code></pre>
|
|
354
|
+
</div>
|
|
355
|
+
{{/if}}
|
|
356
|
+
{{#if llm.options}}
|
|
357
|
+
<div class="span-all">
|
|
358
|
+
<span class="meta-label">Options:</span>
|
|
359
|
+
<pre><code class="language-json">{{json llm.options}}</code></pre>
|
|
360
|
+
</div>
|
|
361
|
+
{{/if}}
|
|
362
|
+
{{#if trace}}
|
|
363
|
+
<div class="span-all">
|
|
364
|
+
<span class="meta-label">Trace Metadata:</span>
|
|
365
|
+
<pre><code class="language-json">{{json trace}}</code></pre>
|
|
366
|
+
</div>
|
|
367
|
+
{{/if}}
|
|
368
|
+
</div>
|
|
369
|
+
{{/if}}
|
|
249
370
|
</div>
|
|
250
371
|
</details>
|
|
251
372
|
{{/each}}
|
|
@@ -253,6 +374,7 @@
|
|
|
253
374
|
</div>
|
|
254
375
|
</div>
|
|
255
376
|
</details>
|
|
377
|
+
{{/if}}
|
|
256
378
|
{{/each}}
|
|
257
379
|
</div>
|
|
258
380
|
</main>
|
package/assets/report/main.css
CHANGED
|
@@ -72,14 +72,25 @@ body {
|
|
|
72
72
|
|
|
73
73
|
.session-info {
|
|
74
74
|
display: flex;
|
|
75
|
-
flex-
|
|
76
|
-
gap: 10px;
|
|
75
|
+
flex-wrap: wrap;
|
|
76
|
+
gap: 10px 20px;
|
|
77
77
|
background: var(--card-bg);
|
|
78
78
|
padding: 10px 20px;
|
|
79
79
|
border-radius: 8px;
|
|
80
80
|
border: 1px solid var(--border);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
.info-column {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex-direction: column;
|
|
86
|
+
gap: 10px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.info-column + .info-column {
|
|
90
|
+
padding-left: 20px;
|
|
91
|
+
border-left: 1px solid var(--border);
|
|
92
|
+
}
|
|
93
|
+
|
|
83
94
|
.info-item {
|
|
84
95
|
display: flex;
|
|
85
96
|
gap: 10px;
|
|
@@ -200,6 +211,46 @@ details[open] > summary .expand-arrow {
|
|
|
200
211
|
border-left: 4px solid var(--color-error);
|
|
201
212
|
}
|
|
202
213
|
|
|
214
|
+
.snapshot-card.state-log {
|
|
215
|
+
border-left: 4px solid var(--color-info);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.snapshot-card.state-log.log-WARN {
|
|
219
|
+
border-left-color: var(--color-warning);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.snapshot-card.state-log.log-DEBUG {
|
|
223
|
+
border-left-color: var(--border);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.snapshot-card.state-log .summary-left {
|
|
227
|
+
min-width: 0;
|
|
228
|
+
flex: 1;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
.log-preview {
|
|
232
|
+
font-size: 12px;
|
|
233
|
+
color: var(--text-muted);
|
|
234
|
+
white-space: nowrap;
|
|
235
|
+
overflow: hidden;
|
|
236
|
+
text-overflow: ellipsis;
|
|
237
|
+
min-width: 0;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.log-message {
|
|
241
|
+
margin: 0;
|
|
242
|
+
white-space: pre-wrap;
|
|
243
|
+
word-break: break-word;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.snapshot-summary {
|
|
247
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.snapshot-summary .summary-right {
|
|
251
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
252
|
+
}
|
|
253
|
+
|
|
203
254
|
.snapshot-summary .step-title {
|
|
204
255
|
font-size: 14px;
|
|
205
256
|
font-weight: 600;
|
|
@@ -274,6 +325,26 @@ details[open] > summary .expand-arrow {
|
|
|
274
325
|
color: var(--color-reasoning);
|
|
275
326
|
}
|
|
276
327
|
|
|
328
|
+
.badge-log-INFO {
|
|
329
|
+
background: var(--color-info-bg);
|
|
330
|
+
color: var(--color-info);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
.badge-log-WARN {
|
|
334
|
+
background: var(--color-warning-bg);
|
|
335
|
+
color: var(--color-warning);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.badge-log-DEBUG {
|
|
339
|
+
background: var(--border);
|
|
340
|
+
color: var(--text-muted);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.badge-fallback {
|
|
344
|
+
background: var(--color-warning-bg);
|
|
345
|
+
color: var(--color-warning);
|
|
346
|
+
}
|
|
347
|
+
|
|
277
348
|
/* Tags */
|
|
278
349
|
.llm-tag, .usage-tag, .time-tag, .duration-tag {
|
|
279
350
|
font-size: 12px;
|
|
@@ -311,7 +382,37 @@ details[open] > summary .expand-arrow {
|
|
|
311
382
|
padding: 10px 20px;
|
|
312
383
|
border-radius: 6px;
|
|
313
384
|
border: 1px solid rgba(255, 255, 255, 0.03);
|
|
314
|
-
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
.tokens-grid {
|
|
388
|
+
display: grid;
|
|
389
|
+
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
|
390
|
+
gap: 10px;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
.token-cell {
|
|
394
|
+
display: flex;
|
|
395
|
+
flex-direction: column;
|
|
396
|
+
align-items: center;
|
|
397
|
+
text-align: center;
|
|
398
|
+
gap: 4px;
|
|
399
|
+
padding: 8px 12px;
|
|
400
|
+
border-radius: 6px;
|
|
401
|
+
border: 1px solid rgba(255, 255, 255, 0.03);
|
|
402
|
+
background: rgba(255, 255, 255, 0.02);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.token-label {
|
|
406
|
+
color: var(--text-muted);
|
|
407
|
+
font-size: 11px;
|
|
408
|
+
text-transform: uppercase;
|
|
409
|
+
letter-spacing: 0.05em;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.token-value {
|
|
413
|
+
color: var(--color-info);
|
|
414
|
+
font-size: 16px;
|
|
415
|
+
font-weight: 700;
|
|
315
416
|
}
|
|
316
417
|
|
|
317
418
|
.text-muted {
|
|
@@ -350,6 +451,10 @@ details[open] > summary .expand-arrow {
|
|
|
350
451
|
border-left: 3px solid var(--color-reasoning);
|
|
351
452
|
}
|
|
352
453
|
|
|
454
|
+
.action-card.action-type-ai\:fallback {
|
|
455
|
+
border-left: 3px solid var(--color-warning);
|
|
456
|
+
}
|
|
457
|
+
|
|
353
458
|
.action-summary {
|
|
354
459
|
padding: 10px 20px;
|
|
355
460
|
font-size: 14px;
|
|
@@ -368,6 +473,29 @@ details[open] > summary .expand-arrow {
|
|
|
368
473
|
flex-shrink: 0;
|
|
369
474
|
}
|
|
370
475
|
|
|
476
|
+
.action-card.action-type-ai\:tool > summary {
|
|
477
|
+
flex-wrap: nowrap;
|
|
478
|
+
gap: 10px;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
.action-card.action-type-ai\:tool .summary-left {
|
|
482
|
+
min-width: 0;
|
|
483
|
+
flex: 1;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
.action-card.action-type-ai\:tool .summary-right {
|
|
487
|
+
flex-shrink: 0;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.action-preview {
|
|
491
|
+
font-size: 11px;
|
|
492
|
+
color: var(--text-muted);
|
|
493
|
+
white-space: nowrap;
|
|
494
|
+
overflow: hidden;
|
|
495
|
+
text-overflow: ellipsis;
|
|
496
|
+
min-width: 0;
|
|
497
|
+
}
|
|
498
|
+
|
|
371
499
|
.action-content {
|
|
372
500
|
padding: 10px 20px;
|
|
373
501
|
border-top: 1px solid var(--border);
|
|
@@ -470,6 +598,10 @@ code {
|
|
|
470
598
|
gap: 10px;
|
|
471
599
|
}
|
|
472
600
|
|
|
601
|
+
.error-box-fallback {
|
|
602
|
+
margin-bottom: 20px;
|
|
603
|
+
}
|
|
604
|
+
|
|
473
605
|
.error-header {
|
|
474
606
|
display: flex;
|
|
475
607
|
align-items: center;
|
package/cli/index.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Command, program } from 'commander';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
|
|
4
|
+
import { PipelineCompiler, Project, stdout, TLlmProviderReasoning } from '../src';
|
|
5
|
+
import { cast } from '../src/utils';
|
|
6
|
+
|
|
7
|
+
program
|
|
8
|
+
.description('PipelAIn')
|
|
9
|
+
.addCommand(
|
|
10
|
+
new Command()
|
|
11
|
+
.command('exec')
|
|
12
|
+
.description('Executes prompt/pipeline by provided params')
|
|
13
|
+
.option('-p --prompt <text>', 'User prompt text')
|
|
14
|
+
.option('-s --silent [boolean]', 'Hides logs of pipeline execution', false)
|
|
15
|
+
.option('-o --output [path]', 'Output file path')
|
|
16
|
+
.option('-l --limit [number]', 'Tool calls limit')
|
|
17
|
+
.option('-r --reasoning [level]', 'Reasoning level', cast<TLlmProviderReasoning>('provider-default'))
|
|
18
|
+
.option('--system [text]', 'System prompt text')
|
|
19
|
+
.option('--cwd [path]', 'Working directory', process.cwd())
|
|
20
|
+
.action(async (options: {
|
|
21
|
+
reasoning: TLlmProviderReasoning;
|
|
22
|
+
silent: boolean;
|
|
23
|
+
prompt: string;
|
|
24
|
+
cwd: string;
|
|
25
|
+
|
|
26
|
+
system?: string;
|
|
27
|
+
output?: string;
|
|
28
|
+
limit?: string;
|
|
29
|
+
}) => {
|
|
30
|
+
const pipeline = PipelineCompiler
|
|
31
|
+
.build('Executor')
|
|
32
|
+
.step('output', ({ factory }) => factory
|
|
33
|
+
.ai('Execution')
|
|
34
|
+
.llm(({ context }) =>
|
|
35
|
+
context.llm.assign({
|
|
36
|
+
reasoning: options.reasoning,
|
|
37
|
+
tools: factory.tools.all().provide(),
|
|
38
|
+
|
|
39
|
+
...(options.limit && { limit: Number(options.limit) }),
|
|
40
|
+
})
|
|
41
|
+
)
|
|
42
|
+
.prompt(({ utils }) => [
|
|
43
|
+
utils.content.system(options.system ?? ''),
|
|
44
|
+
utils.content.user(options.prompt),
|
|
45
|
+
])
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
const project = await Project.build({ cwd: options.cwd });
|
|
49
|
+
const compiled = await pipeline.compile({
|
|
50
|
+
project,
|
|
51
|
+
stdout: options.silent ? undefined : stdout.console,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const result = await compiled.run();
|
|
55
|
+
|
|
56
|
+
if (options.output) {
|
|
57
|
+
await fs.writeFile(options.output, result.output, 'utf8');
|
|
58
|
+
}
|
|
59
|
+
if (!options.silent) {
|
|
60
|
+
console.log('\n');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
process.stdout.write(result.output);
|
|
64
|
+
process.exit(0);
|
|
65
|
+
})
|
|
66
|
+
)
|
|
67
|
+
.addCommand(
|
|
68
|
+
new Command()
|
|
69
|
+
.command('serve')
|
|
70
|
+
.description('Starts server')
|
|
71
|
+
.option('-h --host [host]', 'Host address', 'localhost')
|
|
72
|
+
.option('-p --port [port]', 'Port', '8080')
|
|
73
|
+
.action(async (input, command) => {
|
|
74
|
+
|
|
75
|
+
})
|
|
76
|
+
)
|
|
77
|
+
.parse();
|
package/lib/src/index.d.ts
CHANGED
|
@@ -12,12 +12,14 @@ export * from './models/pipeline/steps/ai/errors';
|
|
|
12
12
|
export * from './models/project';
|
|
13
13
|
export * from './models/file';
|
|
14
14
|
export * from './models/bash';
|
|
15
|
+
export * from './models/meta';
|
|
15
16
|
export * from './models/content/factory';
|
|
16
17
|
export * from './models/content/types';
|
|
17
18
|
export * from './models/llm/providers/model';
|
|
18
19
|
export * from './models/llm/tools/model';
|
|
19
20
|
export * from './models/llm/factory';
|
|
20
21
|
export * from './models/llm/router';
|
|
22
|
+
export * from './models/llm/hook';
|
|
21
23
|
export * from './models/llm/mcp';
|
|
22
24
|
export * as content from './models/content/kinds';
|
|
23
25
|
export * as stdout from './models/pipeline/stdout/compiled';
|
package/lib/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AAEjB,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAE5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAElD,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,mCAAmC,CAAC;AAE5D,eAAO,MAAM,GAAG;;;CAGf,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AAEjB,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAE5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AAExC,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAElD,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAE9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,MAAM,MAAM,mCAAmC,CAAC;AAE5D,eAAO,MAAM,GAAG;;;CAGf,CAAC"}
|