@bitefoundry/retrieviewer 0.0.7 → 0.0.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/ASSET-PROVENANCE.md +12 -0
- package/PUPPY-MEMORY.md +38 -0
- package/RELEASING.md +11 -10
- package/integrations/macos-overlay/overlay.jxa +24 -24
- package/integrations/windows-overlay/Overlay.cs +17 -17
- package/package.json +1 -1
- package/pet-q5-manifest.json +22 -9
- package/puppy-paper-behaviors-q5.bin.gz +0 -0
package/ASSET-PROVENANCE.md
CHANGED
|
@@ -35,6 +35,18 @@ must be checked again for the final release bytes.
|
|
|
35
35
|
|
|
36
36
|
## Remaining limits
|
|
37
37
|
|
|
38
|
+
0.0.9 adds offline torso-envelope constraints to the same single-source watch
|
|
39
|
+
coordinate field, using only the existing seated key as a volume reference.
|
|
40
|
+
Face pixels remain exact; the connected neck/body is spatially registered, not
|
|
41
|
+
composited with another illustration. No new visual input or asset family;
|
|
42
|
+
existing CC BY-SA4.0 attribution and licenses remain.
|
|
43
|
+
|
|
44
|
+
0.0.8 replaces the watch-body joins with offline coordinate registration of
|
|
45
|
+
the same single source drawing per sample. Four paw patches and a shared ground
|
|
46
|
+
plane constrain the lower-body warp; original head/neck pixels remain exact.
|
|
47
|
+
No new image, photograph or video reference is introduced; CC BY-SA4.0 and
|
|
48
|
+
existing attribution remain unchanged.
|
|
49
|
+
|
|
38
50
|
0.0.6 re-registers only the36 watch samples of the existing behavior archive.
|
|
39
51
|
The existing seated body/paws stay fixed while the authored head turns; no new
|
|
40
52
|
image/photo/video reference is introduced. The offline preparation and source
|
package/PUPPY-MEMORY.md
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
# Runtime weight and performance
|
|
2
2
|
|
|
3
|
+
## Fixed-volume watch torso (0.0.9)
|
|
4
|
+
|
|
5
|
+
Paw registration alone in0.0.8 left the upper torso unconstrained. In the36
|
|
6
|
+
watch samples, chest-region (source rows205..230, ink threshold>24) area/mean
|
|
7
|
+
silhouette width grew up to28.9% compared with the seated key. Offline torso
|
|
8
|
+
envelope calibration brings both below1.2%, with centroid movement below0.52
|
|
9
|
+
source pixels. Regression limits are2% chest area/width,1px centroid,3% whole
|
|
10
|
+
torso area (rows205..270), plus the existing four-paw and common-floor tests.
|
|
11
|
+
|
|
12
|
+
The same single-source inverse coordinate field now eases from y180 to205,
|
|
13
|
+
matches the seated torso envelope through y265 and joins the paw field by y275.
|
|
14
|
+
Only the silhouette calibration curves are smoothed, not fur pixels. Face rows
|
|
15
|
+
0..179 remain byte-exact; the connected neck/bandana can move spatially to join
|
|
16
|
+
the stable chest, instead of freezing the inflated source torso or compositing
|
|
17
|
+
two pictures. The previous y230 pixel digest is superseded deliberately by a
|
|
18
|
+
face-only digest plus explicit body-volume tests. No new frames, runtime work,
|
|
19
|
+
buffer, dependency or process. The archive is3,118 bytes smaller than0.0.8.
|
|
20
|
+
Earlier release sections below are historical, not current registration rules.
|
|
21
|
+
|
|
22
|
+
## Single-source watch registration and English desktop UI (0.0.8)
|
|
23
|
+
|
|
24
|
+
The0.0.7 neck fix still joined a different torso to the lower legs. This pass
|
|
25
|
+
removes that compositing entirely. Each watch sample uses one original drawing,
|
|
26
|
+
with a smooth inverse-coordinate field below y230 registering four paw patches
|
|
27
|
+
and the ground plane. Resampling always reads the original, never a previously
|
|
28
|
+
warped image. Head/jaw/neck/bandana pixels through y229 remain exact; endpoints
|
|
29
|
+
share the seated key. All36 watch samples have four-paw residual checks (<=2
|
|
30
|
+
source pixels) and a common floor test, in addition to the original neck digest.
|
|
31
|
+
Pillow/NumPy are offline authoring tools only. The shipped runtime has no new
|
|
32
|
+
dependency, warp pass, image buffer, frame count or process. The behavior archive
|
|
33
|
+
is9,369 compressed bytes smaller than0.0.7.
|
|
34
|
+
|
|
35
|
+
Desktop picker, controls, tray/menu and statuses use English. Windows/macOS
|
|
36
|
+
toolbars have64px buttons for English labels; existing Linux labels remain.
|
|
37
|
+
Windows native IPC/lifecycle tests and source-label WinForms layout checks at
|
|
38
|
+
100%/200% cover this change. macOS has syntax/core/layout checks, not a real Mac
|
|
39
|
+
GUI test. Website EN/KO selection and user-supplied window titles are unchanged.
|
|
40
|
+
|
|
3
41
|
## Watch neck seam repair (0.0.7)
|
|
4
42
|
|
|
5
43
|
The0.0.6 watch registration moved the entire head/neck8px and dissolved it into
|
package/RELEASING.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
# Retrieviewer 0.0.
|
|
2
|
-
|
|
3
|
-
Current target: `@bitefoundry/retrieviewer@0.0.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
# Retrieviewer 0.0.9 release process
|
|
2
|
+
|
|
3
|
+
Current target: `@bitefoundry/retrieviewer@0.0.9`, public `latest`, continuing the
|
|
4
|
+
approved npm release workflow. The owner requested correction of the watch
|
|
5
|
+
torso's swelling on2026-10-23. Offline single-source registration now constrains
|
|
6
|
+
chest width/area/center and whole torso area, keeping the four paw anchors and
|
|
7
|
+
floor. Face pixels through y179 stay exact; neck coordinates can join the fixed
|
|
8
|
+
torso without image compositing. No new frames, dependencies, runtime work or
|
|
9
|
+
buffers. English desktop UI remains. MIT/CC BY-SA4.0 unchanged. Preserve0.0.8
|
|
10
|
+
and earlier registry bytes; publish only the exact tested0.0.9 tarball.
|
|
11
|
+
Historical scope below is not current verification.
|
|
11
12
|
|
|
12
13
|
Target: `@bitefoundry/retrieviewer@0.0.4`, public npm registry, `latest` tag.
|
|
13
14
|
The npm organization `bitefoundry` uses the free public-packages plan; account
|
|
@@ -14,12 +14,12 @@ var MIN_WIDTH = 160, MIN_HEIGHT = 120;
|
|
|
14
14
|
var INK = [248, 242, 232, 245];
|
|
15
15
|
var TERMINAL_OWNERS = ['Terminal', 'iTerm2', 'iTerm', 'WezTerm', 'wezterm-gui', 'Alacritty', 'kitty', 'Ghostty', 'Warp', 'Hyper', 'Tabby'];
|
|
16
16
|
var TEXT = {
|
|
17
|
-
preparing: '
|
|
18
|
-
playing: '
|
|
19
|
-
accepted: '
|
|
20
|
-
busy: '
|
|
21
|
-
engineError: '
|
|
22
|
-
chooseFromMenu: '
|
|
17
|
+
preparing: 'Loading...',
|
|
18
|
+
playing: 'Playing',
|
|
19
|
+
accepted: 'Ready!',
|
|
20
|
+
busy: 'Please wait',
|
|
21
|
+
engineError: 'Engine error',
|
|
22
|
+
chooseFromMenu: 'Choose a window'
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
// Low profile: 12pt cells, or 16pt when a large window would exceed 20000 cells.
|
|
@@ -194,7 +194,7 @@ function pickerTargets(infos, ownPid) {
|
|
|
194
194
|
var w = windowRecord(infos[i]);
|
|
195
195
|
if (!w || w.pid === ownPid || w.layer !== 0 || w.alpha <= 0 || w.bounds.width < MIN_WIDTH || w.bounds.height < MIN_HEIGHT) continue;
|
|
196
196
|
var terminal = TERMINAL_OWNERS.indexOf(w.owner) >= 0;
|
|
197
|
-
var label = (terminal ? '[
|
|
197
|
+
var label = (terminal ? '[Terminal] ' : '') + (w.name ? w.name + ' \u00B7 ' + w.owner : w.owner + ' - Window') + ' #' + w.id;
|
|
198
198
|
result.push({ id: w.id, pid: w.pid, owner: w.owner, title: label, terminal: terminal });
|
|
199
199
|
}
|
|
200
200
|
result.sort(function (a, b) { return a.terminal === b.terminal ? (a.title < b.title ? -1 : a.title > b.title ? 1 : 0) : a.terminal ? -1 : 1; });
|
|
@@ -265,7 +265,7 @@ var STYLE_BORDERLESS = 0, STYLE_TITLED = 1, STYLE_CLOSABLE = 2, STYLE_NONACTIVAT
|
|
|
265
265
|
var BACKING_BUFFERED = 2, FLOATING_LEVEL = 3, ACTIVATION_ACCESSORY = 1, ANIMATION_NONE = 2;
|
|
266
266
|
// canJoinAllSpaces | stationary | ignoresCycle | fullScreenAuxiliary
|
|
267
267
|
var OVERLAY_SPACES = 1 | 16 | 64 | 256;
|
|
268
|
-
var BAR_WIDTH =
|
|
268
|
+
var BAR_WIDTH = 538, BAR_HEIGHT = 40;
|
|
269
269
|
|
|
270
270
|
var shell = null;
|
|
271
271
|
|
|
@@ -409,14 +409,14 @@ function startCompanion(testMode) {
|
|
|
409
409
|
bar.setBackgroundColor($.NSColor.colorWithCalibratedRedGreenBlueAlpha(28 / 255, 30 / 255, 34 / 255, 0.94));
|
|
410
410
|
bar.setFloatingPanel(true); bar.setBecomesKeyOnlyIfNeeded(true); bar.setLevel(FLOATING_LEVEL); bar.setCollectionBehavior(OVERLAY_SPACES);
|
|
411
411
|
var content = bar.contentView;
|
|
412
|
-
ballButton = makeButton('
|
|
412
|
+
ballButton = makeButton('Ball', { x: 8, y: 6, width: 64, height: 28 }, 'onBall:');
|
|
413
413
|
content.addSubview(ballButton);
|
|
414
|
-
content.addSubview(makeButton('
|
|
415
|
-
content.addSubview(makeButton('
|
|
416
|
-
content.addSubview(makeButton('
|
|
417
|
-
content.addSubview(makeButton('
|
|
418
|
-
content.addSubview(makeButton('
|
|
419
|
-
statusLabel = makeLabel(TEXT.preparing, { x:
|
|
414
|
+
content.addSubview(makeButton('Treat', { x: 76, y: 6, width: 64, height: 28 }, 'onTreat:'));
|
|
415
|
+
content.addSubview(makeButton('Tug', { x: 144, y: 6, width: 64, height: 28 }, 'onTug:'));
|
|
416
|
+
content.addSubview(makeButton('Window', { x: 212, y: 6, width: 64, height: 28 }, 'onPick:'));
|
|
417
|
+
content.addSubview(makeButton('Pause', { x: 280, y: 6, width: 64, height: 28 }, 'onPause:'));
|
|
418
|
+
content.addSubview(makeButton('Quit', { x: 348, y: 6, width: 64, height: 28 }, 'onQuit:'));
|
|
419
|
+
statusLabel = makeLabel(TEXT.preparing, { x: 422, y: 10, width: 112, height: 20 }, $.NSColor.whiteColor);
|
|
420
420
|
content.addSubview(statusLabel);
|
|
421
421
|
|
|
422
422
|
// Menu bar item: the macOS counterpart of the Windows tray icon.
|
|
@@ -424,7 +424,7 @@ function startCompanion(testMode) {
|
|
|
424
424
|
statusItem.button.setTitle($('\u28BF'));
|
|
425
425
|
statusItem.button.setToolTip($('Retrieviewer'));
|
|
426
426
|
var menu = $.NSMenu.alloc.initWithTitle($('Retrieviewer'));
|
|
427
|
-
[['
|
|
427
|
+
[['Choose window', 'onPick:'], ['Hide / resume', 'onPause:'], ['Quit', 'onQuit:']].forEach(function (entry) {
|
|
428
428
|
var item = $.NSMenuItem.alloc.initWithTitleActionKeyEquivalent($(entry[0]), entry[1], $(''));
|
|
429
429
|
item.target = shell.controller;
|
|
430
430
|
menu.addItem(item);
|
|
@@ -474,19 +474,19 @@ function startCompanion(testMode) {
|
|
|
474
474
|
if (picker || core.state.quitting) return;
|
|
475
475
|
core.setPicking(true); core.track(true);
|
|
476
476
|
picker = makePanel({ x: 0, y: 0, width: 650, height: 230 }, STYLE_TITLED | STYLE_CLOSABLE);
|
|
477
|
-
picker.setTitle($('Retrieviewer
|
|
477
|
+
picker.setTitle($('Retrieviewer - Choose a window'));
|
|
478
478
|
picker.setLevel(FLOATING_LEVEL);
|
|
479
479
|
picker.setDelegate(shell.controller);
|
|
480
480
|
var view = picker.contentView;
|
|
481
|
-
view.addSubview(makeLabel('
|
|
482
|
-
'
|
|
483
|
-
'
|
|
481
|
+
view.addSubview(makeLabel('Choose an app window for Retrieviewer.\n' +
|
|
482
|
+
'Only its position and size are followed. Contents are never read.\n' +
|
|
483
|
+
'Without Screen Recording permission, app names and window IDs replace titles.',
|
|
484
484
|
{ x: 18, y: 150, width: 614, height: 64 }, null));
|
|
485
485
|
pickerList = $.NSPopUpButton.alloc.initWithFramePullsDown($.NSMakeRect(18, 106, 600, 28), false);
|
|
486
486
|
view.addSubview(pickerList);
|
|
487
|
-
view.addSubview(makeButton('
|
|
488
|
-
view.addSubview(makeButton('
|
|
489
|
-
view.addSubview(makeButton('
|
|
487
|
+
view.addSubview(makeButton('Refresh', { x: 18, y: 24, width: 100, height: 34 }, 'onRefresh:'));
|
|
488
|
+
view.addSubview(makeButton('Attach', { x: 378, y: 24, width: 140, height: 34 }, 'onAttach:'));
|
|
489
|
+
view.addSubview(makeButton('Cancel', { x: 528, y: 24, width: 90, height: 34 }, 'onCancel:'));
|
|
490
490
|
refreshPicker();
|
|
491
491
|
picker.center;
|
|
492
492
|
app.activateIgnoringOtherApps(true);
|
|
@@ -499,7 +499,7 @@ function startCompanion(testMode) {
|
|
|
499
499
|
emit({ type: 'picker', visible: false });
|
|
500
500
|
if (core.state.quitting) return;
|
|
501
501
|
if (!core.state.target) statusLabel.setStringValue($(TEXT.chooseFromMenu));
|
|
502
|
-
statusItem.button.setToolTip($(core.state.target ? 'Retrieviewer
|
|
502
|
+
statusItem.button.setToolTip($(core.state.target ? 'Retrieviewer - Attached' : 'Retrieviewer - Choose window'));
|
|
503
503
|
// Hand focus back: to the window the user just chose, otherwise to whoever had it.
|
|
504
504
|
var chosen = attachedPid ? $.NSRunningApplication.runningApplicationWithProcessIdentifier(attachedPid) : null;
|
|
505
505
|
attachedPid = 0;
|
|
@@ -112,12 +112,12 @@ sealed class Companion : ApplicationContext {
|
|
|
112
112
|
TargetItem target;Form pickerWindow;QuietWindow testTarget;readonly bool testMode;Rectangle canvas;int revision=0,cell=8;bool visible=false,paused=false,loaded=false,quitting=false,picking=false,announced=false;
|
|
113
113
|
Label status=new Label();Mutex mutex;
|
|
114
114
|
internal Companion(Mutex single,bool diagnostic){
|
|
115
|
-
mutex=single;testMode=diagnostic;bar.Text="Retrieviewer controls";bar.Size=new Size(
|
|
116
|
-
bar.Font=new Font("Segoe UI",9);bar.Controls.Add(MakeButton("
|
|
117
|
-
bar.Controls.Add(MakeButton("
|
|
118
|
-
status.AutoSize=false;status.Location=new Point(
|
|
119
|
-
ContextMenuStrip menu=new ContextMenuStrip();menu.Items.Add("
|
|
120
|
-
tray.Icon=SystemIcons.Application;tray.Text="Retrieviewer ·
|
|
115
|
+
mutex=single;testMode=diagnostic;bar.Text="Retrieviewer controls";bar.Size=new Size(538,40);bar.BackColor=Color.FromArgb(28,30,34);bar.ForeColor=Color.White;
|
|
116
|
+
bar.Font=new Font("Segoe UI",9);bar.Controls.Add(MakeButton("Ball",8,()=>Interact("ball")));bar.Controls.Add(MakeButton("Treat",76,()=>Interact("treat")));
|
|
117
|
+
bar.Controls.Add(MakeButton("Tug",144,()=>Interact("tug")));bar.Controls.Add(MakeButton("Window",212,ChooseTarget));bar.Controls.Add(MakeButton("Pause",280,TogglePause));bar.Controls.Add(MakeButton("Quit",348,Quit));
|
|
118
|
+
status.AutoSize=false;status.Location=new Point(422,12);status.Size=new Size(112,22);status.Text="Loading...";bar.Controls.Add(status);
|
|
119
|
+
ContextMenuStrip menu=new ContextMenuStrip();menu.Items.Add("Choose window",null,(s,e)=>ChooseTarget());menu.Items.Add("Hide / resume",null,(s,e)=>TogglePause());menu.Items.Add("Quit",null,(s,e)=>Quit());
|
|
120
|
+
tray.Icon=SystemIcons.Application;tray.Text="Retrieviewer · Choose window";tray.ContextMenuStrip=menu;tray.Visible=true;tray.DoubleClick+=(s,e)=>ChooseTarget();
|
|
121
121
|
// Handles are created on the UI thread before the reader can signal EOF.
|
|
122
122
|
IntPtr unused=bar.Handle;unused=pet.Handle;
|
|
123
123
|
Thread reader=new Thread(ReadInput);reader.IsBackground=true;reader.Start();
|
|
@@ -128,7 +128,7 @@ sealed class Companion : ApplicationContext {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
Button MakeButton(string title,int x,Action action){
|
|
131
|
-
Button b=new Button();b.Text=title;b.TabStop=false;b.Size=new Size(
|
|
131
|
+
Button b=new Button();b.Text=title;b.TabStop=false;b.Size=new Size(64,28);b.Location=new Point(x,6);b.FlatStyle=FlatStyle.Flat;b.FlatAppearance.BorderSize=0;b.BackColor=Color.FromArgb(48,51,58);b.ForeColor=Color.White;b.Click+=(s,e)=>action();return b;
|
|
132
132
|
}
|
|
133
133
|
void ReadInput(){
|
|
134
134
|
try{
|
|
@@ -150,9 +150,9 @@ sealed class Companion : ApplicationContext {
|
|
|
150
150
|
for(;;){Dictionary<string,object> m;lock(inputLock){if(messages.Count==0)break;m=messages.Dequeue();}
|
|
151
151
|
string type=Program.Str(m,"type");
|
|
152
152
|
if(type=="quit"){Quit();return;}
|
|
153
|
-
if(type=="loaded"){string ink=m.ContainsKey("ink")?Program.Str(m,"ink"):"cream";if(ink!="cream"&&ink!="gold"&&ink!="dark")throw new Exception("Invalid ink");pet.Ink=ink=="gold"?Color.FromArgb(245,231,184,103):ink=="dark"?Color.FromArgb(245,67,48,24):Color.FromArgb(245,248,242,232);loaded=true;status.Text="
|
|
154
|
-
if(type=="interaction"){status.Text=Program.Bool(m,"accepted")?"
|
|
155
|
-
if(type=="error"){status.Text="
|
|
153
|
+
if(type=="loaded"){string ink=m.ContainsKey("ink")?Program.Str(m,"ink"):"cream";if(ink!="cream"&&ink!="gold"&&ink!="dark")throw new Exception("Invalid ink");pet.Ink=ink=="gold"?Color.FromArgb(245,231,184,103):ink=="dark"?Color.FromArgb(245,67,48,24):Color.FromArgb(245,248,242,232);loaded=true;status.Text="Playing";if(testMode)((Button)bar.Controls[0]).PerformClick();continue;}
|
|
154
|
+
if(type=="interaction"){status.Text=Program.Bool(m,"accepted")?"Ready!":"Please wait";continue;}
|
|
155
|
+
if(type=="error"){status.Text="Engine error";Quit();return;}
|
|
156
156
|
if(type=="frame"){
|
|
157
157
|
// Always acknowledge discarded frames too, otherwise resizing can deadlock the sender.
|
|
158
158
|
bool painted=visible&&!paused&&Program.Int(m,"revision")==revision;
|
|
@@ -187,7 +187,7 @@ sealed class Companion : ApplicationContext {
|
|
|
187
187
|
StringBuilder name=new StringBuilder(512);Native.GetWindowText(hwnd,name,name.Capacity);if(name.Length==0)return true;
|
|
188
188
|
string process="";try{using(Process p=Process.GetProcessById((int)pid)){process=p.ProcessName;}}catch{}
|
|
189
189
|
bool terminal=process.Equals("WindowsTerminal",StringComparison.OrdinalIgnoreCase)||process.IndexOf("wezterm",StringComparison.OrdinalIgnoreCase)>=0||process=="OpenConsole"||process=="conhost"||process=="mintty";
|
|
190
|
-
result.Add(new TargetItem{Window=hwnd,Process=pid,Title=(terminal?"[
|
|
190
|
+
result.Add(new TargetItem{Window=hwnd,Process=pid,Title=(terminal?"[Terminal] ":"")+name.ToString()+" · "+process,Terminal=terminal});return true;
|
|
191
191
|
},IntPtr.Zero);
|
|
192
192
|
result.Sort((a,b)=>a.Terminal==b.Terminal?String.Compare(a.Title,b.Title,StringComparison.CurrentCulture):a.Terminal?-1:1);return result;
|
|
193
193
|
}
|
|
@@ -195,15 +195,15 @@ sealed class Companion : ApplicationContext {
|
|
|
195
195
|
if(picking||quitting)return;picking=true;Track(true);
|
|
196
196
|
Form picker=new Form();pickerWindow=picker;
|
|
197
197
|
{
|
|
198
|
-
picker.Text="Retrieviewer ·
|
|
198
|
+
picker.Text="Retrieviewer · Choose a window";picker.Size=new Size(650,230);picker.StartPosition=FormStartPosition.CenterScreen;picker.FormBorderStyle=FormBorderStyle.FixedDialog;picker.MaximizeBox=false;picker.MinimizeBox=false;picker.Font=new Font("Segoe UI",10);
|
|
199
199
|
picker.ShowInTaskbar=true;picker.TopMost=true;
|
|
200
|
-
Label hint=new Label();hint.Text="
|
|
200
|
+
Label hint=new Label();hint.Text="Choose an app window for Retrieviewer.\nOnly its position and size are followed. Contents are never read.";hint.SetBounds(18,16,610,50);
|
|
201
201
|
ComboBox list=new ComboBox();list.DropDownStyle=ComboBoxStyle.DropDownList;list.SetBounds(18,76,600,28);foreach(TargetItem item in Targets())list.Items.Add(item);if(list.Items.Count>0)list.SelectedIndex=0;
|
|
202
|
-
Button refresh=new Button();refresh.Text="
|
|
203
|
-
Button attach=new Button();attach.Text="
|
|
204
|
-
Button cancel=new Button();cancel.Text="
|
|
202
|
+
Button refresh=new Button();refresh.Text="Refresh";refresh.SetBounds(18,124,100,34);refresh.Click+=(s,e)=>{list.Items.Clear();foreach(TargetItem item in Targets())list.Items.Add(item);if(list.Items.Count>0)list.SelectedIndex=0;};
|
|
203
|
+
Button attach=new Button();attach.Text="Attach";attach.SetBounds(378,124,140,34);attach.Click+=(s,e)=>{if(list.SelectedItem!=null){target=(TargetItem)list.SelectedItem;paused=false;Program.Emit(new {type="pause",paused=false});picker.Close();}};
|
|
204
|
+
Button cancel=new Button();cancel.Text="Cancel";cancel.SetBounds(528,124,90,34);cancel.Click+=(s,e)=>picker.Close();
|
|
205
205
|
picker.Controls.AddRange(new Control[]{hint,list,refresh,attach,cancel});
|
|
206
|
-
picker.FormClosed+=(s,e)=>{pickerWindow=null;picking=false;Program.Emit(new {type="picker",visible=false});if(!quitting){if(target==null)status.Text="
|
|
206
|
+
picker.FormClosed+=(s,e)=>{pickerWindow=null;picking=false;Program.Emit(new {type="picker",visible=false});if(!quitting){if(target==null)status.Text="Choose a window";tray.Text=target==null?"Retrieviewer · Choose window":"Retrieviewer · Attached";Track(true);}picker.Dispose();};
|
|
207
207
|
picker.Show();Native.ShowWindow(picker.Handle,5);Program.Emit(new {type="picker",visible=Native.IsWindowVisible(picker.Handle)});
|
|
208
208
|
}
|
|
209
209
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitefoundry/retrieviewer",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"description": "A fluffy Braille desktop pet for Windows and Linux X11, with experimental macOS support and an embeddable TUI engine.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://bitefoundry.github.io/retrieviewer/",
|
package/pet-q5-manifest.json
CHANGED
|
@@ -80,20 +80,33 @@
|
|
|
80
80
|
"uniqueFrames": 142,
|
|
81
81
|
"sourceSha256": "7918261fb64c57a91739729841fd84c6dd53891196c7fb76ee9c27712ab6ef5d",
|
|
82
82
|
"sourcePackedSha256": "7785ef65b8a2a5bf6f7ce600fe9957a60d9af82066ff49275bba061eac5392d1",
|
|
83
|
-
"encodedBytes":
|
|
84
|
-
"gzipBytes":
|
|
85
|
-
"residentPixelBytes":
|
|
86
|
-
"encodedSha256": "
|
|
87
|
-
"quantizedSha256": "
|
|
83
|
+
"encodedBytes": 6227235,
|
|
84
|
+
"gzipBytes": 1426084,
|
|
85
|
+
"residentPixelBytes": 3871386,
|
|
86
|
+
"encodedSha256": "783eafb78fac8e004efd4d44c88776ba6cb486ed18092738a4aaf74a6906b8ed",
|
|
87
|
+
"quantizedSha256": "f2d89ac5f6fb230b4d5ac6bcf09865185a00900947dbbfc7cbacc40f8f9719b6",
|
|
88
88
|
"watchRegistration": {
|
|
89
89
|
"sourceVersion": "0.0.5",
|
|
90
90
|
"sourceEncodedSha256": "38cfdfcee9c857c56a14f0a9734cb3301b4a04cb8e1ae3fb2e2b2ffe3666240f",
|
|
91
91
|
"canonicalSeat": 50,
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
92
|
+
"method": "single-source-torso-envelope-and-paw-registration",
|
|
93
|
+
"protectedFaceRows": 180,
|
|
94
|
+
"torsoWarpStartY": 180,
|
|
95
|
+
"torsoEnvelopeFullY": [
|
|
96
|
+
205,
|
|
97
|
+
265
|
|
98
|
+
],
|
|
99
|
+
"pawWarpFullFromY": 275,
|
|
100
|
+
"groundRow": 300,
|
|
95
101
|
"headTranslateY": 0,
|
|
96
|
-
"
|
|
102
|
+
"neckConnected": true,
|
|
103
|
+
"bodyCompositing": false,
|
|
104
|
+
"paws": [
|
|
105
|
+
105,
|
|
106
|
+
138,
|
|
107
|
+
185,
|
|
108
|
+
218
|
|
109
|
+
],
|
|
97
110
|
"unchangedOtherFrames": true
|
|
98
111
|
}
|
|
99
112
|
},
|
|
Binary file
|