You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,16 @@
2
2
3
3
All notable changes to Copicu are documented here.
4
4
5
+
## [0.4.0-rc.3] - 2026-07-27
6
+
7
+
### Added
8
+
9
+
- Bundle the Extract URLs and Join Selected as Markdown scripts with the Windows installer. They are copied to the default scripts folder only when missing, preserving user-owned versions and files.
10
+
11
+
### Fixed
12
+
13
+
- Open persistent auxiliary windows on the active monitor, restore position and size per monitor, and scale default/minimum bounds correctly at 150% and other DPI settings.
14
+
5
15
## [0.4.0-rc.2] - 2026-07-27
6
16
7
17
### Fixed
@@ -39,6 +49,7 @@ All notable changes to Copicu are documented here.
39
49
- Made metadata editing target the last item activated with `Enter` after the picker hides and resets.
40
50
- Restored reliable initial focus for the metadata input.
- Prerelease only: it does not replace `v0.3.9` on the stable updater channel.
45
45
46
46
Copicu is used daily by its maintainer, but it is still alpha software. Windows may show SmartScreen or Defender warnings for a young/unsigned desktop app that monitors clipboard and keyboard shortcuts. Verify downloads from GitHub Releases and the published SHA256.
@@ -150,6 +150,8 @@ The repo already includes runnable showcase examples under [scripts/examples/](s
150
150
-[extract URLs from selected text](scripts/examples/030-extract-urls-copy.ts) — `Ctrl+Alt+L`;
151
151
-[join selected clips as Markdown](scripts/examples/031-join-selected-markdown-copy.ts) — `Ctrl+Alt+M`.
152
152
153
+
The Windows installer seeds only **Extract URLs** (`030`) and **Join Selected as Markdown** (`031`) into the default scripts folder, and only when those files are missing. Existing or customized scripts are never overwritten. The other files remain development examples and API fixtures in the repository.
154
+
153
155
Press `Ctrl+Alt+Q` in the picker to open **Quick Actions**, a context-aware action picker that shows runnable scripts/actions for the current selection so you do not need to memorize every shortcut.
154
156
155
157
Scripts are trusted local automation, not a secure sandbox or marketplace. Treat scripts like code you choose to run on your own machine.
Copy file name to clipboardExpand all lines: docs/WORKING_MEMORY.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,11 +19,11 @@ Router operativo corto. Si un detalle crece, moverlo a topic, track, spec o refe
19
19
| Area | Estado | Abrir primero | Siguiente accion |
20
20
| --- | --- | --- | --- |
21
21
| Actions modularization | active |`docs/tracks/017-actions-modularization.md`| Proxima extraccion mecanica chica sin tocar runner Node. |
22
-
| Actions/scripts/hotkeys | complete |`docs/tracks/012-tags-and-hotkeys.md`, `docs/topics/tag-management-hotkeys.md`, `docs/tracks/004-actions-scripting.md`|Metadata global simplificada a un textarea: `#tokens` inline se parsean a tags, el resto a notes; `title` no se expone. |
22
+
| Actions/scripts/hotkeys | complete |`docs/tracks/012-tags-and-hotkeys.md`, `docs/topics/tag-management-hotkeys.md`, `docs/tracks/004-actions-scripting.md`|Installer distribuye solo `030` Extract URLs y `031` Join Markdown, sin sobrescribir; ejemplos restantes quedan como fixtures del repo. |
23
23
| Future workflows | parked |`docs/tracks/019-paste-queue.md`, `docs/tracks/020-secure-clips-password.md`| Discutir antes de implementar: Paste Queue y secure clips con metadata `@pass`. |
24
24
| Search / AI / metadata | active/dogfood |`docs/topics/filtering-and-query-syntax.md`, `docs/tracks/008-filtering-search-foundation.md`, `specs/005-search-plan-engine/`| Triggers, chips/explain y diagnostico sintactico listos. Autocomplete local esta en worktree y requiere validacion independiente antes de marcarlo aplicado; luego saved searches o highlighting. |
25
25
| Performance/UI windows | active |`docs/tracks/014-performance-memory.md`, `docs/topics/custom-window-system.md`, `docs/tracks/010-ui-rethink.md`, `docs/topics/window-state-and-monitor-policy.md`| UI modularizada; proximo split seguro: `UiHostApp`; revisar `LastMonitor` si importa. |
26
-
| Open source/release | active |`docs/tracks/018-public-launch-readiness.md`, `docs/tracks/021-distribution-trust-code-signing.md`, `docs/topics/windows-installer.md`|`v0.3.9` estable; `v0.4.0-rc.2` en feature freeze sin reemplazar el canal stable. Proximo: observar regresiones y promover a `v0.4.0`. |
26
+
| Open source/release | active |`docs/tracks/018-public-launch-readiness.md`, `docs/tracks/021-distribution-trust-code-signing.md`, `docs/topics/windows-installer.md`|`v0.3.9` estable; `v0.4.0-rc.3` en feature freeze sin reemplazar el canal stable. Proximo: observar regresiones y promover a `v0.4.0`. |
27
27
| Picker dogfood / Computer Use | active |`tests/manual/dogfood/README.md`, `docs/topics/picker-interaction.md`, `docs/topics/pi-agentic-os.md`| Mantener oracle C0: app externa -> hotkey -> type sin focus manual escribe en search. |
28
28
| OS / sistema agentico | active |`docs/topics/docs-knowledge-system.md`, `docs/topics/pi-agentic-os.md`, `docs/topics/agentic-os-operations.md`| Copicu es downstream AOS; mantener ruta caliente corta. Pendiente: compactar TOPICS/topics grandes cuando molesten. |
29
29
@@ -33,7 +33,7 @@ Router operativo corto. Si un detalle crece, moverlo a topic, track, spec o refe
33
33
34
34
## Decisiones Vigentes
35
35
36
-
Copicu es CopyQ-inspired (no compatible), stack Tauri 2 + React/Vite/TS + Rust + SQLite, UI keyboard-first y rapida. Instalada diaria: `%APPDATA%\dev.jpsala.copicu`; dev aislado: `.codex-run\dev-isolated`; release estable `v0.3.9`; candidate `v0.4.0-rc.2`. Scripts/AI usan host APIs/capabilities, no SQL/shell/fs/network crudo. Clipboard enrichment v1 es interna post-capture; `metadata` standalone queda `CachedHidden` + prewarm salvo evidencia. Skills canonicas en `docs/skills/`; `.agents/skills` es compatibilidad. Copicu es downstream AOS: no copiar registry/memoria/tracks/decisiones del kit; memoria durable vive en docs versionados. Para UI, abrir `docs/topics/ui-design-and-impeccable.md`.
36
+
Copicu es CopyQ-inspired (no compatible), stack Tauri 2 + React/Vite/TS + Rust + SQLite, UI keyboard-first y rapida. Instalada diaria: `%APPDATA%\dev.jpsala.copicu`; dev aislado: `.codex-run\dev-isolated`; release estable `v0.3.9`; candidate `v0.4.0-rc.3`. Scripts/AI usan host APIs/capabilities, no SQL/shell/fs/network crudo. Clipboard enrichment v1 es interna post-capture; `metadata` standalone queda `CachedHidden` + prewarm salvo evidencia. Skills canonicas en `docs/skills/`; `.agents/skills` es compatibilidad. Copicu es downstream AOS: no copiar registry/memoria/tracks/decisiones del kit; memoria durable vive en docs versionados. Para UI, abrir `docs/topics/ui-design-and-impeccable.md`.
Copy file name to clipboardExpand all lines: docs/topics/window-state-and-monitor-policy.md
+12-14Lines changed: 12 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,9 +42,9 @@ Estado actual:
42
42
| Label | Resize | Persist bounds | Por monitor | Nota |
43
43
| --- | --- | --- | --- | --- |
44
44
|`main`| si | si | si | Picker rapido; al abrir usa el monitor del cursor. |
45
-
|`settings`| si | si | si |Ventana document; usa ultimo monitor disponible. |
46
-
|`ai-output`| si | si | si |Ventana document para Markdown/output. |
47
-
|`metadata`| si | si | si | Utility para metadata; prewarm/cached hidden. |
45
+
|`settings`| si | si | si |Abre en monitor activo y restaura su perfil de bounds. |
46
+
|`ai-output`| si | si | si |Abre en monitor activo y restaura su perfil de bounds. |
47
+
|`metadata`| si | si | si | Utility prewarm/cached; al mostrar abre en monitor activo. |
48
48
|`ui-host`| no | no | no | Prompt compacto; tamano calculado por request. |
49
49
|`notifications`| no | no | no | Posicionada por codigo junto al monitor de `main`; tamano fijo. |
50
50
|`whichkey`| no | no | no | Utility temporal; tamano fijo hasta reactivar/validar. |
@@ -54,13 +54,13 @@ Estado actual:
54
54
Fuentes consultadas el 2026-06-09:
55
55
56
56
- Microsoft documenta una preferencia de Windows para "Remember window locations based on monitor connection" y minimizacion al desconectar monitor. Esto confirma que el modelo esperado por usuarios multi-monitor no es solo coordenadas globales, sino posiciones asociadas a configuracion/monitor.
- Tauri `window-state` guarda/restaura posiciones y tamanos, pero opera como plugin general. Copicu necesita control por ventana y por monitor, por eso se implementa una capa propia chica.
59
-
-https://v2.tauri.app/plugin/window-state/
59
+
-<https://v2.tauri.app/plugin/window-state/>
60
60
- Tauri expone APIs de monitores: monitor actual, monitor por punto, monitores disponibles, cursor, `workArea`, posicion, tamano y escala.
- Electron RFC de persistencia de estado valida el patron de comprobar display/work area y ajustar bounds si al restaurar quedan fuera o no entran en pantalla.
Estado observado 2026-06-29: la persistencia existe y guarda `lastMonitorKey`, `lastBounds` y `boundsByMonitor` en app data. Hay un matiz pendiente: la politica `LastMonitor`actualmente elige el monitor objetivo desde primario/disponible y luego considera bounds guardados; si el primario tiene bounds previos, puede no preferir exactamente `lastMonitorKey`. Si JP pide precision de ultimo monitor para `settings`/`metadata`/`ai-output`, ajustar `choose_target_monitor`/restore para priorizar `lastMonitorKey` conectado y caer al disponible solo si desaparecio.
90
+
Decision 2026-07-27: todas las ventanas persistentes eligen el monitor activo con la misma politica `CursorMonitor` del picker. `LastMonitor`queda solo para restauraciones ocultas/prewarm que se vuelven a resolver al mostrar. Nunca se reutilizan coordenadas de otro monitor para una apertura visible.
91
91
92
92
Al mostrar una ventana persistente:
93
93
94
94
1. Resolver la politica de esa ventana desde `WindowStateRegistry`.
95
-
2. Elegir monitor objetivo:
96
-
-`main`: monitor bajo el cursor al momento de abrir.
97
-
-`settings`/`ai-output`: monitor actual o primario disponible.
95
+
2. Elegir monitor objetivo bajo el cursor al momento de abrir; si no se puede resolver, caer al primario/disponible.
98
96
3. Si hay bounds guardados para ese monitor, usarlos.
99
-
4. Si no hay bounds para ese monitor pero existe ultimo monitor conectado guardado, usar esos bounds ajustados.
100
-
5.Si no hay estado, centrar con defaults en el monitor objetivo.
97
+
4. Si no hay perfil para ese monitor, centrar con defaults en el monitor objetivo; no trasladar coordenadas del monitor anterior.
98
+
5.Interpretar defaults y minimos como dimensiones logicas y escalarlos al DPI del monitor antes de aplicar `PhysicalSize`.
101
99
6. Validar contra `workArea`:
102
100
- clamp de tamano a minimo y area disponible;
103
101
- si la ventana queda casi fuera de pantalla, centrar;
104
102
- si solo sobresale, empujarla dentro del area visible.
105
103
106
-
Regla importante: `boundsByMonitor` conserva posiciones por monitor. Si un monitor externo no esta conectado, la ventana puede abrir en el monitor disponible sin borrar la posicion previa del externo.
104
+
Regla importante: `boundsByMonitor` conserva posiciones y tamanos fisicos por monitor. Si un monitor externo no esta conectado, la ventana abre centrada en el activo sin borrar el perfil previo del externo. En DPI 125/150/200%, defaults y minimos se escalan con `Monitor::scale_factor()` para evitar utilities fisicamente chicas.
Copy file name to clipboardExpand all lines: docs/topics/windows-installer.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -147,6 +147,16 @@ La ventana Settings incluye seccion `About` desde `v0.2.7`, con descripcion, ver
147
147
148
148
`v0.2.8` agrego diagnostics persistente para release/instalada en `%APPDATA%\dev.jpsala.copicu\diagnostics.jsonl` con rotacion simple a `diagnostics.previous.jsonl` al pasar ~5 MB. Registra eventos sin payloads: `app.startup`, `storage.ready`, `window.*`, `updater.*`, `clipboard.event.*` con duracion/outcome/tamano y `renderer.heartbeat` cada ~30 s. Si una instancia instalada vuelve a quedar `Hung=True`, revisar el ultimo heartbeat/evento antes de reiniciar; el dump local del incidente previo quedo en `.codex-run\hang-dumps\copicu-installed-hung-20260623-113818.dmp`.
149
149
150
+
## Scripts Incluidos
151
+
152
+
El instalador NSIS distribuye una seleccion minima de scripts utiles:
153
+
154
+
-`030-extract-urls-copy.ts`;
155
+
-`031-join-selected-markdown-copy.ts`;
156
+
-`copicu-action.d.ts`, necesario para tipos/autocomplete al editarlos.
157
+
158
+
El hook copia estos archivos a `$DOCUMENTS\Copicu\Scripts` solo cuando cada destino no existe. Una actualizacion nunca sobrescribe scripts modificados por el usuario y el uninstall no los borra. Los demas archivos bajo `scripts/examples/` son fixtures y contratos de desarrollo, no contenido instalado.
159
+
150
160
## Launch On Windows Startup
151
161
152
162
La opcion Settings -> General -> `Launch on Windows startup` usa `tauri-plugin-autostart`, que en Windows escribe `HKCU\Software\Microsoft\Windows\CurrentVersion\Run` con el app name de Tauri (`Copicu`) y marca `Explorer\StartupApproved\Run` como enabled cuando existe.
0 commit comments