cli-jaw 1.2.8 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/orchestrator/state-machine.js +17 -2
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/package.json +1 -1
- package/public/css/orc-state.css +157 -0
- package/public/dist/bundle.js +41 -41
- package/public/dist/bundle.js.map +3 -3
- package/public/img/shark-sprite.png +0 -0
- package/public/index.html +15 -0
- package/public/js/ws.ts +67 -3
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// CLI (bin/commands/orchestrate.ts) and server share the same DB.
|
|
5
5
|
import { getOrcState, setOrcState, resetOrcState } from '../core/db.js';
|
|
6
6
|
import { broadcast } from '../core/bus.js';
|
|
7
|
+
import { readLatestWorklog } from '../memory/worklog.js';
|
|
7
8
|
// ─── State Read/Write (DB-backed) ───────────────────
|
|
8
9
|
export function getState() {
|
|
9
10
|
const row = getOrcState();
|
|
@@ -25,11 +26,25 @@ export function setState(s, ctx) {
|
|
|
25
26
|
? (ctx ? JSON.stringify(ctx) : null)
|
|
26
27
|
: getOrcState()?.ctx || null;
|
|
27
28
|
setOrcState.run(s, ctxJson, 'default');
|
|
28
|
-
|
|
29
|
+
// Parse worklog title (max 2 words + …)
|
|
30
|
+
let title = 'PABCD';
|
|
31
|
+
try {
|
|
32
|
+
const wl = readLatestWorklog();
|
|
33
|
+
if (wl?.content) {
|
|
34
|
+
const firstLine = wl.content.split('\n')[0] || '';
|
|
35
|
+
const raw = firstLine.replace(/^#\s*Work Log:\s*"?/, '').replace(/"?\s*$/, '').trim();
|
|
36
|
+
if (raw) {
|
|
37
|
+
const words = raw.split(/\s+/);
|
|
38
|
+
title = words.slice(0, 2).join(' ') + (words.length > 2 ? '…' : '');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch { /* fallback to PABCD */ }
|
|
43
|
+
broadcast('orc_state', { state: s, title });
|
|
29
44
|
}
|
|
30
45
|
export function resetState() {
|
|
31
46
|
resetOrcState();
|
|
32
|
-
broadcast('orc_state', { state: 'IDLE' });
|
|
47
|
+
broadcast('orc_state', { state: 'IDLE', title: '' });
|
|
33
48
|
}
|
|
34
49
|
// ─── Prefix Map ─────────────────────────────────────
|
|
35
50
|
// B state: only worker results get Bb2 prefix, user messages get no prefix.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../../src/orchestrator/state-machine.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,mFAAmF;AACnF,6CAA6C;AAC7C,kEAAkE;AAElE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../../src/orchestrator/state-machine.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cli-jaw",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.9",
|
|
4
4
|
"description": "Personal AI assistant powered by 5 engines (Claude, Codex, Gemini, OpenCode, Copilot) — Web, Terminal, and Telegram interfaces with 107 built-in skills",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
package/public/css/orc-state.css
CHANGED
|
@@ -51,3 +51,160 @@ body[data-orc-state].orc-pulse #chatMessages {
|
|
|
51
51
|
border: 1px solid var(--orc-glow);
|
|
52
52
|
text-transform: uppercase;
|
|
53
53
|
}
|
|
54
|
+
|
|
55
|
+
/* ─── PABCD Roadmap Bar ─── */
|
|
56
|
+
.pabc-roadmap {
|
|
57
|
+
display: none;
|
|
58
|
+
align-items: center;
|
|
59
|
+
background: linear-gradient(135deg, var(--surface) 0%, #14141f 100%);
|
|
60
|
+
border: 1px solid var(--border);
|
|
61
|
+
border-radius: 10px;
|
|
62
|
+
padding: 12px 22px;
|
|
63
|
+
position: relative;
|
|
64
|
+
box-shadow: 0 2px 16px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255,255,255,0.03);
|
|
65
|
+
overflow: visible;
|
|
66
|
+
}
|
|
67
|
+
.pabc-roadmap.visible {
|
|
68
|
+
display: flex;
|
|
69
|
+
animation: pabc-fadeSlideIn 0.5s cubic-bezier(0.22, 1, 0.36, 1);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@keyframes pabc-fadeSlideIn {
|
|
73
|
+
from { opacity: 0; transform: translateY(-12px) scale(0.98); }
|
|
74
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.pabc-dot {
|
|
78
|
+
width: 26px; height: 26px;
|
|
79
|
+
border-radius: 50%;
|
|
80
|
+
display: flex;
|
|
81
|
+
align-items: center;
|
|
82
|
+
justify-content: center;
|
|
83
|
+
font-family: var(--font-display, var(--font-mono));
|
|
84
|
+
font-size: 10px;
|
|
85
|
+
font-weight: 700;
|
|
86
|
+
flex-shrink: 0;
|
|
87
|
+
transition: all 0.5s cubic-bezier(0.22, 1, 0.36, 1);
|
|
88
|
+
z-index: 2;
|
|
89
|
+
letter-spacing: 0.5px;
|
|
90
|
+
}
|
|
91
|
+
.pabc-dot.future {
|
|
92
|
+
background: var(--surface, #181825);
|
|
93
|
+
color: var(--text-dim, #6e6e8a);
|
|
94
|
+
border: 1px solid var(--border);
|
|
95
|
+
}
|
|
96
|
+
.pabc-dot.active {
|
|
97
|
+
color: #fff;
|
|
98
|
+
border: 2px solid currentColor;
|
|
99
|
+
box-shadow: 0 0 14px -3px currentColor, 0 0 4px -1px currentColor;
|
|
100
|
+
transform: scale(1.1);
|
|
101
|
+
}
|
|
102
|
+
.pabc-dot.done {
|
|
103
|
+
color: rgba(255,255,255,0.9);
|
|
104
|
+
border: 1px solid rgba(255,255,255,0.1);
|
|
105
|
+
opacity: 0.65;
|
|
106
|
+
}
|
|
107
|
+
.pabc-dot[data-phase="P"].active, .pabc-dot[data-phase="P"].done { background: var(--orc-glow-P); }
|
|
108
|
+
.pabc-dot[data-phase="A"].active, .pabc-dot[data-phase="A"].done { background: var(--orc-glow-A); }
|
|
109
|
+
.pabc-dot[data-phase="B"].active, .pabc-dot[data-phase="B"].done { background: var(--orc-glow-B); }
|
|
110
|
+
.pabc-dot[data-phase="C"].active, .pabc-dot[data-phase="C"].done { background: var(--orc-glow-C); }
|
|
111
|
+
|
|
112
|
+
.pabc-connector {
|
|
113
|
+
flex: 1;
|
|
114
|
+
height: 2px;
|
|
115
|
+
background: linear-gradient(90deg, var(--border) 0%, #2a2a3e 50%, var(--border) 100%);
|
|
116
|
+
min-width: 44px;
|
|
117
|
+
transition: all 0.5s ease;
|
|
118
|
+
border-radius: 1px;
|
|
119
|
+
}
|
|
120
|
+
.pabc-connector.done {
|
|
121
|
+
background: linear-gradient(90deg, var(--text-dim) 0%, #6e6e8a 50%, var(--text-dim) 100%);
|
|
122
|
+
box-shadow: 0 0 6px -2px var(--text-dim);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.pabc-center {
|
|
126
|
+
flex-shrink: 0;
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
align-items: center;
|
|
130
|
+
padding: 0 20px;
|
|
131
|
+
}
|
|
132
|
+
.pabc-brand {
|
|
133
|
+
font-family: var(--font-display, var(--font-mono));
|
|
134
|
+
font-size: 13px;
|
|
135
|
+
font-weight: 700;
|
|
136
|
+
letter-spacing: 4px;
|
|
137
|
+
background: linear-gradient(90deg, var(--orc-glow-P), var(--orc-glow-A), var(--orc-glow-B), var(--orc-glow-C));
|
|
138
|
+
-webkit-background-clip: text;
|
|
139
|
+
-webkit-text-fill-color: transparent;
|
|
140
|
+
background-clip: text;
|
|
141
|
+
filter: brightness(1.1);
|
|
142
|
+
}
|
|
143
|
+
.pabc-tagline {
|
|
144
|
+
font-family: var(--font-mono);
|
|
145
|
+
font-size: 7px;
|
|
146
|
+
color: var(--text-dim, #6e6e8a);
|
|
147
|
+
letter-spacing: 2px;
|
|
148
|
+
text-transform: uppercase;
|
|
149
|
+
margin-top: 2px;
|
|
150
|
+
opacity: 0.7;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/* Shark runner */
|
|
154
|
+
.shark-runner {
|
|
155
|
+
width: 36px; height: 24px;
|
|
156
|
+
background: url('/img/shark-sprite.png') 0 0 no-repeat;
|
|
157
|
+
background-size: 360px 24px;
|
|
158
|
+
position: absolute;
|
|
159
|
+
top: -13px;
|
|
160
|
+
left: 22px;
|
|
161
|
+
z-index: 10;
|
|
162
|
+
transition: left 1.4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
163
|
+
pointer-events: none;
|
|
164
|
+
filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4));
|
|
165
|
+
display: none;
|
|
166
|
+
}
|
|
167
|
+
.shark-runner.running {
|
|
168
|
+
display: block;
|
|
169
|
+
animation: shark-run 1s steps(10) infinite;
|
|
170
|
+
}
|
|
171
|
+
@keyframes shark-run {
|
|
172
|
+
to { background-position: -360px 0; }
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* Shimmer on Done */
|
|
176
|
+
@keyframes pabc-shimmer {
|
|
177
|
+
0% { opacity: 1; filter: brightness(1); }
|
|
178
|
+
25% { opacity: 1; filter: brightness(1.4); box-shadow: 0 0 24px rgba(168,85,247,0.2); }
|
|
179
|
+
100% { opacity: 0; transform: translateY(-8px) scale(0.98); }
|
|
180
|
+
}
|
|
181
|
+
.pabc-roadmap.shimmer-out {
|
|
182
|
+
animation: pabc-shimmer 1s ease-out forwards;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* ─── Light Theme Overrides ─── */
|
|
186
|
+
[data-theme="light"] .pabc-roadmap {
|
|
187
|
+
background: linear-gradient(135deg, var(--surface) 0%, #f0f0f5 100%);
|
|
188
|
+
box-shadow: 0 2px 12px rgba(0,0,0,0.08), inset 0 1px 0 rgba(255,255,255,0.6);
|
|
189
|
+
}
|
|
190
|
+
[data-theme="light"] .pabc-dot.future {
|
|
191
|
+
background: #eef0f5;
|
|
192
|
+
color: #9a9ab0;
|
|
193
|
+
}
|
|
194
|
+
[data-theme="light"] .pabc-dot.active {
|
|
195
|
+
color: #fff;
|
|
196
|
+
}
|
|
197
|
+
[data-theme="light"] .pabc-dot.done {
|
|
198
|
+
color: #fff;
|
|
199
|
+
border-color: rgba(0,0,0,0.06);
|
|
200
|
+
}
|
|
201
|
+
[data-theme="light"] .pabc-connector {
|
|
202
|
+
background: linear-gradient(90deg, #d8d8e4 0%, #e4e4ef 50%, #d8d8e4 100%);
|
|
203
|
+
}
|
|
204
|
+
[data-theme="light"] .pabc-connector.done {
|
|
205
|
+
background: linear-gradient(90deg, #b0b0c0 0%, #c0c0d0 50%, #b0b0c0 100%);
|
|
206
|
+
box-shadow: none;
|
|
207
|
+
}
|
|
208
|
+
[data-theme="light"] .shark-runner {
|
|
209
|
+
filter: drop-shadow(0 1px 2px rgba(0,0,0,0.15));
|
|
210
|
+
}
|