zames_pro 2.73.4 → 2.73.5
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/CHANGELOG.md +6 -0
- package/package.json +1 -1
- package/scripts/render-how-it-works.mts +77 -41
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.73.5] - 2026-10-12
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- docs(readme): route the how-it-works back-edges below the boxes
|
|
15
|
+
|
|
10
16
|
## [2.73.4] - 2026-10-11
|
|
11
17
|
|
|
12
18
|
### Changed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zames_pro",
|
|
3
|
-
"version": "2.73.
|
|
3
|
+
"version": "2.73.5",
|
|
4
4
|
"description": "Terminal coding agent that drives a real browser to chat with DeepSeek, Qwen and other web LLMs — no API key required. Reads and edits files, runs commands, commits to git, like Claude Code / Codex CLI.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
// the model node now shows BOTH supported backends (chat.deepseek.com /
|
|
6
6
|
// chat.qwen.ai) instead of only chat.deepseek.com.
|
|
7
7
|
//
|
|
8
|
+
// Layout matches mermaid LR: FORWARD edges (the request) run through the node
|
|
9
|
+
// centerline left->right; BACK edges (the answers) are routed BELOW the boxes
|
|
10
|
+
// with a short vertical stub on each side, so forward and back arrows are
|
|
11
|
+
// clearly separated instead of overlapping.
|
|
12
|
+
//
|
|
8
13
|
// Run: npm run render-how (tsx scripts/render-how-it-works.mts)
|
|
9
14
|
//
|
|
10
15
|
// Isolation: chromium.launch() uses a THROWAWAY context, never
|
|
@@ -24,14 +29,16 @@ const TEXT = '#333333'
|
|
|
24
29
|
const FONT = 'trebuchet ms, verdana, arial, sans-serif'
|
|
25
30
|
|
|
26
31
|
const W = 1120
|
|
27
|
-
const H = 150
|
|
28
32
|
const NODE_W = 250
|
|
29
33
|
const NODE_H = 70
|
|
30
|
-
const CY = H / 2
|
|
31
34
|
const PAD = 30
|
|
35
|
+
const TOP = 34
|
|
36
|
+
const CY = TOP + NODE_H / 2
|
|
37
|
+
// The back edges run below the boxes; leave room for them + their labels.
|
|
38
|
+
const BACK_Y = TOP + NODE_H + 46
|
|
39
|
+
const H = BACK_Y + 30
|
|
40
|
+
const GAP = 150
|
|
32
41
|
|
|
33
|
-
// A left-to-right chain with the SAME three steps as the original diagram;
|
|
34
|
-
// only the last node gained a second line (the two supported backends).
|
|
35
42
|
interface Node {
|
|
36
43
|
x: number
|
|
37
44
|
w: number
|
|
@@ -41,12 +48,12 @@ interface Node {
|
|
|
41
48
|
const nodes: Node[] = [
|
|
42
49
|
{ x: PAD, w: NODE_W, lines: ['terminal (you)'] },
|
|
43
50
|
{
|
|
44
|
-
x: PAD + NODE_W +
|
|
51
|
+
x: PAD + NODE_W + GAP,
|
|
45
52
|
w: 260,
|
|
46
53
|
lines: ['zames', 'parse tool-call · run tool'],
|
|
47
54
|
},
|
|
48
55
|
{
|
|
49
|
-
x: PAD + NODE_W +
|
|
56
|
+
x: PAD + NODE_W + GAP + 260 + GAP,
|
|
50
57
|
w: 260,
|
|
51
58
|
lines: ['chat.deepseek.com', 'chat.qwen.ai'],
|
|
52
59
|
},
|
|
@@ -56,7 +63,7 @@ const esc = (s: string): string =>
|
|
|
56
63
|
s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')
|
|
57
64
|
|
|
58
65
|
const nodeSvg = (n: Node): string => {
|
|
59
|
-
const y =
|
|
66
|
+
const y = TOP
|
|
60
67
|
const rx = 12
|
|
61
68
|
const lh = 20
|
|
62
69
|
const startY = CY - ((n.lines.length - 1) * lh) / 2 + 5
|
|
@@ -99,41 +106,69 @@ const nodeSvg = (n: Node): string => {
|
|
|
99
106
|
)
|
|
100
107
|
}
|
|
101
108
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
y
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
const label = (x: number, y: number, text: string): string =>
|
|
110
|
+
'<text x="' +
|
|
111
|
+
x +
|
|
112
|
+
'" y="' +
|
|
113
|
+
y +
|
|
114
|
+
'" text-anchor="middle" font-family="' +
|
|
115
|
+
FONT +
|
|
116
|
+
'" font-size="12" fill="' +
|
|
117
|
+
TEXT +
|
|
118
|
+
'">' +
|
|
119
|
+
esc(text) +
|
|
120
|
+
'</text>'
|
|
121
|
+
|
|
122
|
+
// A FORWARD edge: a straight horizontal arrow at the node centerline, going
|
|
123
|
+
// left->right, with the label just above the line.
|
|
124
|
+
const forward = (x1: number, x2: number, text: string): string => {
|
|
110
125
|
const mid = (x1 + x2) / 2
|
|
111
|
-
const marker = dir === 'r' ? 'ar' : 'al'
|
|
112
126
|
return (
|
|
113
127
|
'<path d="M' +
|
|
114
128
|
x1 +
|
|
115
129
|
' ' +
|
|
116
|
-
|
|
130
|
+
CY +
|
|
117
131
|
' L' +
|
|
118
132
|
x2 +
|
|
119
133
|
' ' +
|
|
120
|
-
|
|
134
|
+
CY +
|
|
121
135
|
'" fill="none" stroke="' +
|
|
122
136
|
TEXT +
|
|
123
|
-
'" stroke-width="1.6" marker-end="url(#' +
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
137
|
+
'" stroke-width="1.6" marker-end="url(#ar)"/>' +
|
|
138
|
+
label(mid, CY - 9, text)
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// A BACK edge: from the RIGHT box's bottom edge, DOWN to BACK_Y, LEFT, then UP
|
|
143
|
+
// into the LEFT box's bottom edge, with the arrowhead pointing up-left into it.
|
|
144
|
+
const back = (leftX: number, rightX: number, text: string): string => {
|
|
145
|
+
// leftX = right edge of the LEFT node; rightX = left edge of the RIGHT node.
|
|
146
|
+
const ly = TOP + NODE_H
|
|
147
|
+
const d =
|
|
148
|
+
'M' +
|
|
149
|
+
rightX +
|
|
150
|
+
' ' +
|
|
151
|
+
ly +
|
|
152
|
+
' L' +
|
|
153
|
+
rightX +
|
|
154
|
+
' ' +
|
|
155
|
+
BACK_Y +
|
|
156
|
+
' L' +
|
|
157
|
+
leftX +
|
|
158
|
+
' ' +
|
|
159
|
+
BACK_Y +
|
|
160
|
+
' L' +
|
|
161
|
+
leftX +
|
|
162
|
+
' ' +
|
|
163
|
+
ly
|
|
164
|
+
const mid = (leftX + rightX) / 2
|
|
165
|
+
return (
|
|
166
|
+
'<path d="' +
|
|
167
|
+
d +
|
|
168
|
+
'" fill="none" stroke="' +
|
|
133
169
|
TEXT +
|
|
134
|
-
'"
|
|
135
|
-
|
|
136
|
-
'</text>'
|
|
170
|
+
'" stroke-width="1.6" marker-end="url(#au)"/>' +
|
|
171
|
+
label(mid, BACK_Y - 6, text)
|
|
137
172
|
)
|
|
138
173
|
}
|
|
139
174
|
|
|
@@ -141,9 +176,6 @@ const a = nodes[0]
|
|
|
141
176
|
const z = nodes[1]
|
|
142
177
|
const m = nodes[2]
|
|
143
178
|
|
|
144
|
-
const reqY = CY - 16
|
|
145
|
-
const ansY = CY + 20
|
|
146
|
-
|
|
147
179
|
const svg =
|
|
148
180
|
'<svg xmlns="http://www.w3.org/2000/svg" width="' +
|
|
149
181
|
W +
|
|
@@ -155,20 +187,24 @@ const svg =
|
|
|
155
187
|
H +
|
|
156
188
|
'">' +
|
|
157
189
|
'<defs>' +
|
|
190
|
+
// right-pointing arrowhead
|
|
158
191
|
'<marker id="ar" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth"><path d="M0,0 L9,3 L0,6 z" fill="' +
|
|
159
192
|
TEXT +
|
|
160
193
|
'"/></marker>' +
|
|
161
|
-
|
|
194
|
+
// up-pointing arrowhead (for the back edges arriving at a bottom edge)
|
|
195
|
+
'<marker id="au" markerWidth="10" markerHeight="10" refX="3" refY="2" orient="auto" markerUnits="strokeWidth"><path d="M0,6 L3,0 L6,6 z" fill="' +
|
|
162
196
|
TEXT +
|
|
163
197
|
'"/></marker>' +
|
|
164
198
|
'</defs>' +
|
|
165
199
|
'<rect width="100%" height="100%" fill="#ffffff"/>' +
|
|
166
|
-
//
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
200
|
+
// back edges first (drawn under the forward edges / nodes).
|
|
201
|
+
// back(leftEdgeRightX, rightEdgeLeftX, label): the arrow starts at the RIGHT
|
|
202
|
+
// box's bottom, runs down-left, and points up into the LEFT box's bottom.
|
|
203
|
+
back(z.x + z.w, m.x, 'model answers (raw SSE)') +
|
|
204
|
+
back(a.x + a.w, z.x, 'answer') +
|
|
205
|
+
// forward edges
|
|
206
|
+
forward(a.x + a.w, z.x, 'task') +
|
|
207
|
+
forward(z.x + z.w, m.x, 'system prompt + task') +
|
|
172
208
|
nodes.map(nodeSvg).join('') +
|
|
173
209
|
'</svg>'
|
|
174
210
|
|