quoxcli 0.5.0 → 0.6.1
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 +65 -1
- package/lib/api/endpoints/admin.js +21 -0
- package/lib/api/endpoints/calendarq.js +8 -0
- package/lib/api/endpoints/governance.js +7 -0
- package/lib/api/endpoints/inboxq.js +39 -0
- package/lib/api/endpoints/index.js +4 -0
- package/lib/api/endpoints/lens.js +34 -0
- package/lib/api/endpoints/lucid.js +18 -0
- package/lib/api/endpoints/mcp.js +35 -0
- package/lib/api/endpoints/mon.js +6 -7
- package/lib/api/endpoints/notesq.js +2 -0
- package/lib/api/endpoints/quoxplan.js +51 -0
- package/lib/api/endpoints/v1.js +57 -0
- package/lib/commands/actions.js +51 -13
- package/lib/commands/admin.js +86 -0
- package/lib/commands/approvals.js +5 -1
- package/lib/commands/calendar.js +27 -0
- package/lib/commands/chat.js +1 -1
- package/lib/commands/contacts.js +2 -0
- package/lib/commands/fleet.js +164 -0
- package/lib/commands/fleetRecipe.js +174 -0
- package/lib/commands/lens.js +268 -0
- package/lib/commands/lucid.js +6 -0
- package/lib/commands/lucidGoals.js +423 -0
- package/lib/commands/mail.js +287 -7
- package/lib/commands/mcp.js +190 -0
- package/lib/commands/mon.js +14 -0
- package/lib/commands/monitoring.js +73 -1
- package/lib/commands/notesSeal.js +380 -22
- package/lib/commands/offload.js +51 -10
- package/lib/commands/plan.js +507 -54
- package/lib/commands/research.js +78 -0
- package/lib/commands/settings.js +7 -1
- package/lib/commands/volt.js +6 -1
- package/lib/commands/wazuh.js +74 -9
- package/lib/commands/wazuhIntake.js +55 -6
- package/lib/core/commandRegistrars.js +2 -0
- package/lib/core/config.js +14 -1
- package/lib/core/offload.js +83 -0
- package/lib/core/output.js +29 -4
- package/lib/core/selfUpdate.js +2 -0
- package/lib/core/version.js +15 -2
- package/lib/dragon/select.js +2 -2
- package/lib/quoxon/api.js +4 -0
- package/lib/quoxon/app.js +258 -49
- package/lib/quoxon/approvalsView.js +3 -1
- package/lib/quoxon/ask.js +4 -2
- package/lib/quoxon/bang.js +7 -1
- package/lib/quoxon/commandShort.js +1 -1
- package/lib/quoxon/commands.js +5 -5
- package/lib/quoxon/delegationDragon.js +49 -0
- package/lib/quoxon/dnd.js +47 -0
- package/lib/quoxon/dragonCompanion.js +24 -12
- package/lib/quoxon/events.js +12 -1
- package/lib/quoxon/extensions.js +2 -0
- package/lib/quoxon/foreignText.js +49 -0
- package/lib/quoxon/inboxView.js +5 -5
- package/lib/quoxon/launcher.js +2 -1
- package/lib/quoxon/loopCard.js +2 -1
- package/lib/quoxon/main.js +8 -2
- package/lib/quoxon/onboarding/dockerOffer.js +3 -1
- package/lib/quoxon/onboarding/view.js +1 -1
- package/lib/quoxon/render.js +5 -2
- package/lib/quoxon/resend.js +14 -0
- package/lib/quoxon/rows.js +3 -1
- package/lib/quoxon/secretShape.js +2 -0
- package/lib/quoxon/slash/broadcast.js +30 -6
- package/lib/quoxon/slash/broadcastRun.js +12 -6
- package/lib/quoxon/slash/cliLeaves.json +54 -0
- package/lib/quoxon/slash/dashboard.js +2 -0
- package/lib/quoxon/slash/listView.js +2 -1
- package/lib/quoxon/slash/palette.js +41 -0
- package/lib/quoxon/slash/paletteController.js +6 -2
- package/lib/quoxon/slash/restart.js +2 -0
- package/lib/quoxon/slotChat.js +7 -3
- package/lib/quoxon/slotRun.js +2 -0
- package/lib/quoxon/webPty.js +15 -0
- package/lib/quoxon/whatsnew.jsonl +7 -0
- package/lib/render/planBrief.js +614 -0
- package/lib/toolOutputShape.js +6 -3
- package/package.json +1 -1
- package/vendor/dragonlab/SOURCE +3 -3
- package/vendor/dragonlab/design/architect/v2/architect-master.svg +67 -0
- package/vendor/dragonlab/design/architect/v2/character.mjs +83 -0
- package/vendor/dragonlab/design/architect/v2/review.mjs +35 -0
- package/vendor/dragonlab/design/architect/v2/watch.mjs +56 -0
- package/vendor/dragonlab/design/archivist/v2/archivist-master.svg +77 -0
- package/vendor/dragonlab/design/archivist/v3/character.mjs +56 -0
- package/vendor/dragonlab/design/archivist/v4/character.mjs +46 -0
- package/vendor/dragonlab/design/archivist/v4/review.mjs +35 -0
- package/vendor/dragonlab/design/archivist/v4/watch.mjs +56 -0
- package/vendor/dragonlab/design/argus/v2/character.mjs +69 -0
- package/vendor/dragonlab/design/argus/v3/argus-master.svg +68 -0
- package/vendor/dragonlab/design/argus/v3/character.mjs +63 -0
- package/vendor/dragonlab/design/argus/v3/review.mjs +35 -0
- package/vendor/dragonlab/design/argus/v3/watch.mjs +56 -0
- package/vendor/dragonlab/design/daedalus/v2/character.mjs +49 -0
- package/vendor/dragonlab/design/daedalus/v3/daedalus-master.svg +65 -0
- package/vendor/dragonlab/design/daedalus/v4/character.mjs +47 -0
- package/vendor/dragonlab/design/daedalus/v5/character.mjs +66 -0
- package/vendor/dragonlab/design/daedalus/v6/character.mjs +32 -0
- package/vendor/dragonlab/design/daedalus/v6/review.mjs +35 -0
- package/vendor/dragonlab/design/daedalus/v6/watch.mjs +56 -0
- package/vendor/dragonlab/design/janus/v1/janus-master.svg +70 -0
- package/vendor/dragonlab/design/janus/v2/character.mjs +56 -0
- package/vendor/dragonlab/design/janus/v3/character.mjs +7 -0
- package/vendor/dragonlab/design/janus/v4/character.mjs +150 -0
- package/vendor/dragonlab/design/janus/v5/character.mjs +55 -0
- package/vendor/dragonlab/design/janus/v5/review.mjs +35 -0
- package/vendor/dragonlab/design/janus/v5/watch.mjs +56 -0
- package/vendor/dragonlab/design/roady/v1/roady-master.svg +67 -0
- package/vendor/dragonlab/design/roady/v2/character.mjs +69 -0
- package/vendor/dragonlab/design/roady/v3/character.mjs +91 -0
- package/vendor/dragonlab/design/roady/v3/review.mjs +35 -0
- package/vendor/dragonlab/design/roady/v3/watch.mjs +56 -0
- package/vendor/dragonlab/design/weaver/v3/weaver-master.svg +57 -0
- package/vendor/dragonlab/design/weaver/v4/character.mjs +56 -0
- package/vendor/dragonlab/design/weaver/v5/character.mjs +52 -0
- package/vendor/dragonlab/design/weaver/v6/character.mjs +88 -0
- package/vendor/dragonlab/design/weaver/v6/review.mjs +35 -0
- package/vendor/dragonlab/design/weaver/v6/watch.mjs +56 -0
- package/vendor/dragonlab/integration/companions-v1/architect.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/archivist.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/argus.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/characters.mjs +86 -0
- package/vendor/dragonlab/integration/companions-v1/daedalus.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/janus.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/roady.mjs +2 -0
- package/vendor/dragonlab/integration/companions-v1/view.mjs +4 -1
- package/vendor/dragonlab/integration/companions-v1/weaver.mjs +2 -0
|
@@ -11,6 +11,13 @@ export const CHARACTERS=Object.freeze({
|
|
|
11
11
|
vulcan:{name:'Vulcan',version:'V3 forge salute',review:'../../design/vulcan/v3/review.mjs',power:'forge',powerName:'Brimstone Forge',powerDuration:9000,arrival:{scene:'attach',duration:3600}},
|
|
12
12
|
quoxperticus:{name:'Quoxperticus',version:'V4 fleet conductor',review:'../../design/quoxperticus/v4/review.mjs',power:'orchestrate',powerName:'Fleet Conductor',powerDuration:10000,arrival:{scene:'attach',duration:3000}},
|
|
13
13
|
drago:{name:'Drago',version:'V4 scoped inferno',review:'../../design/drago/v4/review.mjs',power:'fire',powerName:'Scoped Inferno',powerDuration:6800,arrival:{scene:'attach',duration:3800}},
|
|
14
|
+
janus:{name:'Janus',version:'V5 gate (approved V1 look, V4 acting; motion review pending)',review:'../../design/janus/v5/review.mjs',power:'threshold',powerName:'Threshold',powerDuration:12000,arrival:{scene:'attach',duration:3600}},
|
|
15
|
+
argus:{name:'Argus',version:'V3 watch (V1 silhouette approved, motion review pending)',review:'../../design/argus/v3/review.mjs',power:'sweep',powerName:'Sensor Sweep',powerDuration:10000,arrival:{scene:'attach',duration:3000}},
|
|
16
|
+
archivist:{name:'Archivist',version:'V4 reading (V2 anatomy approved, motion review pending)',review:'../../design/archivist/v4/review.mjs',power:'recall',powerName:'Recall',powerDuration:10000,arrival:{scene:'attach',duration:3000}},
|
|
17
|
+
architect:{name:'Architect',version:'V2 Grand Design (V1 silhouette approved, eyes and motion review pending)',review:'../../design/architect/v2/review.mjs',power:'design',powerName:'Grand Design',powerDuration:12000,arrival:{scene:'attach',duration:3000}},
|
|
18
|
+
daedalus:{name:'Daedalus',version:'V6 companion Starforge (V3 wings approved, motion review pending)',review:'../../design/daedalus/v6/review.mjs',power:'assemble',powerName:'Starforge',powerDuration:10000,arrival:{scene:'attach',duration:3000}},
|
|
19
|
+
roady:{name:'Roady',version:'V3 chart (V1 approved anatomy, motion review pending)',review:'../../design/roady/v3/review.mjs',power:'chart',powerName:'Chart',powerDuration:7000,arrival:{scene:'attach',duration:3400}},
|
|
20
|
+
weaver:{name:'Weaver',version:'V6 thread (V3 approved anatomy, motion review pending)',review:'../../design/weaver/v6/review.mjs',power:'thread',powerName:'Thread',powerDuration:7000,arrival:{scene:'attach',duration:3200}},
|
|
14
21
|
});
|
|
15
22
|
const ids=Object.keys(CHARACTERS);
|
|
16
23
|
// Host scene -> art clip. Sentinel never shows 'all-clear' (needs verified evidence); Drago has no 'proud'/'curious'/'focus' clips.
|
|
@@ -23,6 +30,28 @@ const SCENES=Object.freeze({
|
|
|
23
30
|
// Quoxperticus: 'skill' (select a skill) stands for attention; the fleet scene is simulated, so it only appears as the working power.
|
|
24
31
|
quoxperticus:{curious:'skill',focus:'skill',standby:'idle',concerned:'idle',proud:'idle'},
|
|
25
32
|
drago:{curious:'inspect',focus:'active',concerned:'concerned',proud:'acknowledge'},
|
|
33
|
+
// Janus: a pending approval (a host fact) shuts the gate; see activityView. 'deny' is never mapped: the shared
|
|
34
|
+
// reducer folds denials into the generic issue flag, so a barred-and-refused gate would claim more than the host said.
|
|
35
|
+
janus:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
36
|
+
// Argus (Wazuh SIEM): 'triage' draws an amber alert and 'inspect' a changed file line, so both would claim
|
|
37
|
+
// security facts the host never stated. They stay offline; every host mood rests on the quiet watch and the
|
|
38
|
+
// six-sensor Sweep is the working power. Tongue, Wazuh and fire are personality studies, not host moods.
|
|
39
|
+
argus:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
40
|
+
// Archivist (documents and memory): Recall lifts one remembered shard from the page and returns it, the working
|
|
41
|
+
// power. Cross-reference draws a link between two memories, a relationship the host never asserts, so it stays offline.
|
|
42
|
+
archivist:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
43
|
+
// Architect (builds agents and teams): Grand Design raises and folds away an abstract structure, the working power.
|
|
44
|
+
// Rethink folds a section through itself; no host fact says a design was reconsidered, so it stays offline.
|
|
45
|
+
architect:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
46
|
+
// Daedalus (DevOps): 'assemble' is Starforge without its completion star, so working never announces a finished
|
|
47
|
+
// deployment. 'starforge' (with the star), 'repair' (a failed part) and 'rollback' (a bad release) stay offline.
|
|
48
|
+
daedalus:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
49
|
+
// Roady (roadmap navigator): Chart traces one planned route and its milestones, the working power. The V2 journey
|
|
50
|
+
// shows a blocked step, a reroute and an arrival flag, plan facts the host never states, so it stays offline.
|
|
51
|
+
roady:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
52
|
+
// Weaver (QuoxFlow workflow design): Thread draws two threads into one join and an output, the working power.
|
|
53
|
+
// Weave (a knot, then a run) and Repair (a snapped connection) claim workflow outcomes, so they stay offline.
|
|
54
|
+
weaver:{curious:'idle',focus:'idle',standby:'idle',concerned:'idle',proud:'idle'},
|
|
26
55
|
});
|
|
27
56
|
const SENTINEL_MOOD=Object.freeze({idle:'cute',greeting:'cute',standby:'cute',scan:'alert',approval:'alert',failure:'alert',warden:'warden',brace:'warden',scorch:'warden'});
|
|
28
57
|
export function character(id){
|
|
@@ -45,6 +74,7 @@ export function activityView(id,state,now,{arrival=false}={}){
|
|
|
45
74
|
const v=baseView(state,now);
|
|
46
75
|
if(v.scene==='cluster')return {...v,scene:spec.power,time:v.time*spec.powerDuration/4800,caption:`Working · ${spec.powerName} visual`};
|
|
47
76
|
if(id==='lucid')return {...v,scene:({concerned:'uncertain',proud:'delighted'})[v.scene]??v.scene};
|
|
77
|
+
if(id==='janus'&&state.approvals.length)return {...v,scene:'hold'};
|
|
48
78
|
if(SCENES[id])return {...v,scene:(id==='sentinel'&&state.approvals.length?'approval':SCENES[id][v.scene])??v.scene};
|
|
49
79
|
return v;
|
|
50
80
|
}
|
|
@@ -101,6 +131,62 @@ export async function loadCharacter(id){
|
|
|
101
131
|
]);
|
|
102
132
|
return {...spec,render:(scene,time,options)=>renderDrago(rig,scene,time,options)};
|
|
103
133
|
}
|
|
134
|
+
if(id==='janus'){
|
|
135
|
+
// Approved V1 anatomy, horns and palette, V4 acting (V5); parsed with the contour rig the Janus renderer was verified on.
|
|
136
|
+
const [{parseSvgRig:parseContour},{renderJanus}]=await Promise.all([
|
|
137
|
+
import('../../factory/svg-rig-contour.mjs'),import('../../design/janus/v5/character.mjs'),
|
|
138
|
+
]);
|
|
139
|
+
const rig=parseContour(await readFile(new URL('../../design/janus/v1/janus-master.svg',import.meta.url),'utf8'));
|
|
140
|
+
return {...spec,render:(scene,time,options)=>renderJanus(rig,scene,time,options)};
|
|
141
|
+
}
|
|
142
|
+
if(id==='argus'){
|
|
143
|
+
// V1 anatomy (approved silhouette) carried unchanged through V2 monitoring clips and V3 personality clips.
|
|
144
|
+
const [rig,{renderArgus}]=await Promise.all([
|
|
145
|
+
readFile(new URL('../../design/argus/v3/argus-master.svg',import.meta.url),'utf8').then(parseSvgRig),
|
|
146
|
+
import('../../design/argus/v3/character.mjs'),
|
|
147
|
+
]);
|
|
148
|
+
return {...spec,render:(scene,time,options)=>renderArgus(rig,scene,time,options)};
|
|
149
|
+
}
|
|
150
|
+
if(id==='archivist'){
|
|
151
|
+
// Approved V2 SVG unchanged; V3 reading and Recall, V4 Cross-reference.
|
|
152
|
+
const [rig,{renderArchivist}]=await Promise.all([
|
|
153
|
+
readFile(new URL('../../design/archivist/v2/archivist-master.svg',import.meta.url),'utf8').then(parseSvgRig),
|
|
154
|
+
import('../../design/archivist/v4/character.mjs'),
|
|
155
|
+
]);
|
|
156
|
+
return {...spec,render:(scene,time,options)=>renderArchivist(rig,scene,time,options)};
|
|
157
|
+
}
|
|
158
|
+
if(id==='architect'){
|
|
159
|
+
// V2 SVG: the approved V1 silhouette with wider erased eye rims (eyes still under review).
|
|
160
|
+
const [rig,{renderArchitect}]=await Promise.all([
|
|
161
|
+
readFile(new URL('../../design/architect/v2/architect-master.svg',import.meta.url),'utf8').then(parseSvgRig),
|
|
162
|
+
import('../../design/architect/v2/character.mjs'),
|
|
163
|
+
]);
|
|
164
|
+
return {...spec,render:(scene,time,options)=>renderArchitect(rig,scene,time,options)};
|
|
165
|
+
}
|
|
166
|
+
if(id==='daedalus'){
|
|
167
|
+
// Approved V3 SVG unchanged; V6 adds only the companion 'assemble' power over V2-V5 acting.
|
|
168
|
+
const [rig,{renderDaedalus}]=await Promise.all([
|
|
169
|
+
readFile(new URL('../../design/daedalus/v3/daedalus-master.svg',import.meta.url),'utf8').then(parseSvgRig),
|
|
170
|
+
import('../../design/daedalus/v6/character.mjs'),
|
|
171
|
+
]);
|
|
172
|
+
return {...spec,render:(scene,time,options)=>renderDaedalus(rig,scene,time,options)};
|
|
173
|
+
}
|
|
174
|
+
if(id==='roady'){
|
|
175
|
+
// Approved V1 SVG unchanged; V3 attach and Chart over V2 idle and journey.
|
|
176
|
+
const [rig,{renderRoady}]=await Promise.all([
|
|
177
|
+
readFile(new URL('../../design/roady/v1/roady-master.svg',import.meta.url),'utf8').then(parseSvgRig),
|
|
178
|
+
import('../../design/roady/v3/character.mjs'),
|
|
179
|
+
]);
|
|
180
|
+
return {...spec,render:(scene,time,options)=>renderRoady(rig,scene,time,options)};
|
|
181
|
+
}
|
|
182
|
+
if(id==='weaver'){
|
|
183
|
+
// Approved V3 SVG unchanged; V6 attach and Thread over V4 idle/weave and V5 repair.
|
|
184
|
+
const [rig,{renderWeaver}]=await Promise.all([
|
|
185
|
+
readFile(new URL('../../design/weaver/v3/weaver-master.svg',import.meta.url),'utf8').then(parseSvgRig),
|
|
186
|
+
import('../../design/weaver/v6/character.mjs'),
|
|
187
|
+
]);
|
|
188
|
+
return {...spec,render:(scene,time,options)=>renderWeaver(rig,scene,time,options)};
|
|
189
|
+
}
|
|
104
190
|
const source=id==='seer'?'../../design/seer/v1/seer-master.svg':'../../design/hyperion/v1/hyperion-master.svg';
|
|
105
191
|
const rig=parseSvgRig(await readFile(new URL(source,import.meta.url),'utf8'));
|
|
106
192
|
const render=id==='seer'?(await import('../../design/seer/v4/character.mjs')).renderSeer:(await import('../../design/hyperion/v2/character.mjs')).renderHyperion;
|
|
@@ -2,6 +2,9 @@ import {artSlot} from '../../design/lucid/recovery/layout.mjs';
|
|
|
2
2
|
import {initialActivity,activityEvent} from '../hyperion-v3/activity.mjs';
|
|
3
3
|
import {character,loadCharacter,activityView} from './characters.mjs';
|
|
4
4
|
|
|
5
|
+
// Companions whose compact art is capped at 39x11 (their briefs' companion budget); the rest keep adaptive slots.
|
|
6
|
+
const CAPPED=new Set(['seer','cipher','vulcan','quoxperticus','janus','argus','archivist','architect','daedalus','roady','weaver']);
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
9
|
* Pure per-frame view for hosts that own their own screen (Quoxon's Ink, the CLI block).
|
|
7
10
|
* Same reducer, same renderer, same priorities as the line-based companion; no timers, no terminal control.
|
|
@@ -18,7 +21,7 @@ export async function loadDragonView(id,{still=false,arrival=true,mono=false,per
|
|
|
18
21
|
// Greeting-only: withdrawn for good once the entrance is over, unless an approval is pending.
|
|
19
22
|
if(!persist&&!still&&now-state.started>=character(id).arrival.duration&&!state.approvals.length)return {frame:null,caption:null,hidden:true,name:actor.name,scene:null};
|
|
20
23
|
const slot=artSlot(cols,Math.max(1,rows));
|
|
21
|
-
if(id
|
|
24
|
+
if(CAPPED.has(id)){slot.cols=Math.min(39,slot.cols);slot.rows=Math.min(11,slot.rows);}
|
|
22
25
|
const v=activityView(id,state,now,{arrival:arrival&&!still});
|
|
23
26
|
const result=slot.showArt?actor.render(v.scene,v.time,{...slot,still,mono,motionTime:v.motionTime}):null;
|
|
24
27
|
if(result&&!result.ok)throw new Error(result.code);
|