Commit graph

33 commits

Author SHA1 Message Date
Your Name 4b9096250b fix(desktop): commit the app shell files Task 9 left unstaged
The app-shell commit (f45e893) added Home.vue, About.vue, and the router
but never staged App.vue, main.ts, or index.html. HEAD therefore still
contained Plan A's debug harness and a main.ts that wired neither the
router nor the device store — a fresh checkout would have built the
harness, not the real UI.

The working tree had the correct content all along, which is why the
running app was right and the verification (a grep against the working
tree, not the commit) passed.

- App.vue: harness replaced by router-view + tailwind import
- main.ts: router, globalProperties.$devices, provide(DEVICES_KEY)
- index.html: drop the scaffold's vite.svg favicon link

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 08:16:58 -04:00
Your Name bbe97e4d30 docs(desktop): README no longer needs --legacy-peer-deps; document web exclusion 2026-07-22 08:06:06 -04:00
Your Name f45e893bba feat(desktop): port app shell to Vue 3, replace verification harness
Router to vue-router 4 with hash history (custom protocol has no server
for path-based deep links). createApp replaces new Vue. The device store
is registered on globalProperties so n-link-core templates keep resolving
$devices, and also provided via DEVICES_KEY for <script setup> injection.
Removes Plan A's temporary harness and scaffold assets.

Also renames desktop/postcss.config.js and tailwind.config.js to .cjs:
with "type": "module" in desktop/package.json, Node treated their
`module.exports`/`require` as ES module syntax and errored. This was
latent since the Vue 3 foundation task because nothing previously
imported n-link-core/assets/tailwind.css for real; this task's App.vue
is the first to trigger postcss processing during the build.
2026-07-22 07:35:33 -04:00
Your Name a21eead456 feat(desktop): port device store to Vue 3 reactive
Replaces the Vue 2 component-as-store (new Devices() extending Vue) with
reactive(). All ~10 $set/$delete calls are deleted -- Vue 3 proxy
reactivity tracks plain assignment and delete. Tauri 2 import paths
(@tauri-apps/api/core, @tauri-apps/plugin-dialog). runQueue/addToQueue
become module-scope helpers closing over the reactive state, since they
are internal to the store and not part of GenericDevices.

Adds a null guard in promptUploadFiles before iterating the dialog
result (the Vue 2 original would throw if the user cancelled the
dialog). Implements uploadFiles/uploadOsFile as intentional no-ops,
matching the original desktop store -- the desktop app resolves uploads
through a native path-based dialog instead of browser File objects.
2026-07-22 06:03:33 -04:00
Your Name 49e9e3879e feat(frontend): Vue 3 foundation — Tailwind 3, Vite alias, shared types
Migrates n-link-core's Tailwind config from 1.x to 3.x (drops future/
variants/purge, swaps custom-forms for @tailwindcss/forms) and replaces
the Vue 2 'vue/types/vue' augmentation with Vue 3
ComponentCustomProperties. Deletes the Vue 2 shims.
2026-07-21 20:44:28 -04:00
Your Name 15f219bd43 fix(desktop): run blocking USB commands on the blocking pool
Plan A verification found close_device timing out despite doing no I/O:
all commands were synchronous, Tauri runs sync commands on the main
thread, so a hung list_dir blocked every subsequent command.

The 11 libnspire-touching commands now spawn_blocking. enumerate and
close_device stay sync — neither performs a transfer. Return types become
concrete because impl Serialize cannot cross the async boundary. No
change to command names or payloads.
2026-07-21 20:37:09 -04:00
Your Name 320a24022c docs+chore: address final review findings
- Correct the vendored libnspire-sys retry limit in spec and plan: the
  actual constant in vendor/libnspire-sys/libnspire/src/cx2.cpp:391 is 30,
  not 100. The '10 -> 100' claim originated in nlink-cli's own Cargo.toml
  comment and was propagated into both documents unverified.
- Drop @tauri-apps/plugin-opener from desktop/package.json; the Rust plugin
  and its capability entry were removed in Task 3, leaving this dangling.
- Reconcile desktop/package.json version 0.1.0 -> 0.1.6 to match Cargo.toml
  and tauri.conf.json.
- Rewrite desktop/README.md, which still instructed users to
  'sudo apt install webkit2gtk-4.0' -- the exact unavailable package this
  port exists to move off. Now documents npm workspaces, the --legacy-peer-deps
  requirement, the dist/-before-cargo gotcha, snap LD_LIBRARY_PATH breakage,
  AppImage FUSE fallback, and the vendored patch.

Disclosure note: commit 4626858 also committed the previously untracked
nlink-cli/ and vendor/ trees (~5900 lines). Committing vendor/ is required --
the [patch.crates-io] override cannot resolve without it -- but the commit
message did not say so. Recorded here rather than rewriting branch history.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 21:41:28 -04:00
Your Name 0c9fd4d86c build(desktop): regenerate icons from n-link artwork
Replaces Tauri scaffold placeholder icons with app-icon.png. Android/iOS
variants emitted by the icon tool are gitignored — this is a Linux-only
build per the plan's scope.

Verified: deb depends only on libwebkit2gtk-4.1-0 + libgtk-3-0, with no
webkit2gtk-4.0 or libssl1.1 reference — the failure this port exists to fix.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 20:01:13 -04:00
Your Name 0dad5fa035 test(desktop): add temporary backend verification harness
Adds a throwaway App.vue that exercises enumerate/open_device/list_dir/
close_device over Tauri 2 IPC and logs addDevice/removeDevice/progress
events. open_device, list_dir, and close_device are wrapped with a 10s
client-side timeout each so a hang or Busy response from the CX II's
known firmware issue can't block the other calls from reporting;
enumerate only reads USB descriptors and is left untimed.

Installs @tauri-apps/plugin-dialog and @tauri-apps/plugin-shell per the
task-7 brief's Step 1. Manual GUI verification against a connected
device (brief Steps 3-4) is out of scope here and left to the user;
download_file/sha256 cross-check is intentionally omitted since any
libnspire transfer against this CX II is known to hang. Replaced by
the real UI in Plan B.
2026-07-19 19:48:03 -04:00
Your Name 9dc2ac8c7a feat(desktop): restore headless CLI mode on clap 4
Reuses nlink-cli's already-migrated cli.rs rather than repeating the
clap 3-beta -> 4 migration. Also copies NOTICE.txt alongside cli.rs
since its include_str! path is relative to the file's own directory.
2026-07-19 19:43:53 -04:00
Your Name 4c629aaf53 feat(desktop): wire Tauri 2 builder, hotplug, and capabilities
Hotplug registration moves from on_page_load to setup (runs once, so the
AtomicBool guard is dropped). v1 allowlist replaced by a capability file
granting dialog:allow-open and shell:allow-open. CSP from 0472908 carried
forward to app.security.csp; bundle targets narrowed to deb + appimage.

Also derives Clone on device::AddDevice: Tauri 2's Emitter::emit requires
Serialize + Clone (v1's did not), and the addDevice event payload was
missing the derive. No wire-format or IPC contract change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 19:38:31 -04:00
Your Name b54976fd28 feat(desktop): port all 13 IPC commands to Tauri 2
Window -> WebviewWindow, emit now requires the Emitter trait, and
hashbrown's drain_filter is replaced by an explicit collect-then-remove
on std HashMap. IPC contract unchanged.

Also derive Clone on ProgressUpdate (device.rs): Tauri 2's
Emitter::emit requires Serialize + Clone, unlike Tauri 1's
Window::emit which only required Serialize. Required for
progress_sender's window.emit("progress", ProgressUpdate { .. })
call to compile. No change to serialized shape or field names.
2026-07-19 19:00:35 -04:00
Your Name 816300fbcc feat(desktop): port device registry and error type to Tauri 2
Splits the former 478-line main.rs into focused modules. Drops hashbrown
in favour of std HashMap (the drain_filter API it was used for was
renamed with changed semantics) and drops vendored libusb1-sys in favour
of the system library, matching nlink-cli.

Also removes the Task 2 scaffold's lib.rs/tauri-plugin-opener indirection
(the brief's module layout is a plain binary with no lib target) and drops
the now-dangling "opener:default" permission from capabilities/default.json,
which otherwise fails the Tauri build script with an unresolved permission
error.
2026-07-19 09:44:22 -04:00
Your Name 4626858fa5 feat(desktop): replace Tauri 1 / Vue CLI tree with Tauri 2 + Vue 3 + Vite scaffold
Tauri 1.0.0-beta.8 links webkit2gtk-4.0, unavailable on Ubuntu 26.04.
Verified: builds and links libwebkit2gtk-4.1.so.0, libsoup-3.0.so.0,
libjavascriptcoregtk-4.1.so.0 with no webkit-4.0 or libssl.1.1 refs.

Workspace moved from yarn to npm; yarn.lock invalidated by this port.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 09:36:36 -04:00
lights0123 0472908ef4
Fix csp causing blank screen in release mode 2021-11-13 12:42:10 -05:00
lights0123 89a613d25a switch to tauri-build 2021-10-31 15:57:03 -04:00
lights0123 a8dddd1756 Small tweaks 2021-10-27 16:59:52 -04:00
JandereDev 3311e0d358 Check OS update file extension 2021-10-27 16:59:52 -04:00
JandereDev abd8797751 Added upload-os, copy, move subcommands 2021-10-27 16:59:52 -04:00
JandereDev cdd06cb3e6 Added download and ls, formatted cli.rs 2021-10-27 16:59:52 -04:00
JandereDev fd6d7d87b6 Added error handling to upload subcommand 2021-10-27 16:59:52 -04:00
JandereDev a08eb0b791 Added mkdir and rmdir subcommands 2021-10-27 16:59:52 -04:00
lights0123 eb961b8973
Port to tauri beta 2021-08-30 16:49:54 -04:00
lights0123 35cc07f0ed
Bump version 2021-04-06 17:39:41 -04:00
lights0123 75ef04b742
Show errors when udev rules are required on desktop 2021-04-06 17:38:45 -04:00
lights0123 d2a30f97f8
Fix cli with an AppImage 2021-04-05 16:57:18 -04:00
lights0123 697a7365f3
Update deps 2021-04-05 15:21:43 -04:00
lights0123 a7e90368f2
Fix CX II compatibility with web 2020-11-22 18:02:06 -05:00
lights0123 b400f43f6f
Add deployment config 2020-10-06 15:23:59 -04:00
lights0123 787946a6dd
Add web version 2020-10-06 10:48:41 -04:00
lights0123 1721580bf5
kinda working 2020-10-05 20:42:27 -04:00
lights0123 35df1c69f4
Refactor common code out 2020-10-02 16:17:55 -04:00
lights0123 684b3c3b17
Move to workspace 2020-10-01 21:22:35 -04:00