fix(core-ide): use path-based routing for multi-window SPA, clean up formatting

Switch Angular from hash-based to path-based routing so each Wails window
(/tray, /main, /settings) loads its correct route. Archive GitHub Actions
workflows to .gh-actions/, update Forgejo deploy registry to dappco.re/osi,
and apply gofmt/alignment fixes across packages.

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Snider 2026-02-09 01:50:57 +00:00
parent 0fb9de600d
commit a668c5ab5a
54 changed files with 16239 additions and 73 deletions

View file

@ -16,7 +16,7 @@ on:
workflow_dispatch: workflow_dispatch:
env: env:
REGISTRY: gitea.snider.dev REGISTRY: dappco.re/osi
IMAGE_APP: host-uk/app IMAGE_APP: host-uk/app
IMAGE_WEB: host-uk/web IMAGE_WEB: host-uk/web
IMAGE_CORE: host-uk/core IMAGE_CORE: host-uk/core

16159
cmd/core-ide/frontend/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,9 @@
import { ApplicationConfig } from '@angular/core'; import { ApplicationConfig } from '@angular/core';
import { provideRouter, withHashLocation } from '@angular/router'; import { provideRouter } from '@angular/router';
import { routes } from './app.routes'; import { routes } from './app.routes';
export const appConfig: ApplicationConfig = { export const appConfig: ApplicationConfig = {
providers: [ providers: [
provideRouter(routes, withHashLocation()) provideRouter(routes)
] ]
}; };

View file

@ -1,6 +1,5 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
import { ChatComponent } from '../chat/chat.component'; import { ChatComponent } from '../chat/chat.component';
import { BuildComponent } from '../build/build.component'; import { BuildComponent } from '../build/build.component';
import { DashboardComponent } from '../dashboard/dashboard.component'; import { DashboardComponent } from '../dashboard/dashboard.component';
@ -11,7 +10,7 @@ type Panel = 'chat' | 'build' | 'dashboard' | 'jellyfin';
@Component({ @Component({
selector: 'app-main', selector: 'app-main',
standalone: true, standalone: true,
imports: [CommonModule, RouterLink, RouterLinkActive, RouterOutlet, ChatComponent, BuildComponent, DashboardComponent, JellyfinComponent], imports: [CommonModule, ChatComponent, BuildComponent, DashboardComponent, JellyfinComponent],
template: ` template: `
<div class="ide"> <div class="ide">
<nav class="ide__sidebar"> <nav class="ide__sidebar">

View file

@ -81,4 +81,3 @@ func (s *IDEService) ShowWindow(name string) {
w.Focus() w.Focus()
} }
} }

BIN
core-test

Binary file not shown.

View file

View file

View file

@ -208,7 +208,11 @@ func shortID(id string) string {
return id return id
} }
func formatDur(d interface{ Hours() float64; Minutes() float64; Seconds() float64 }) string { func formatDur(d interface {
Hours() float64
Minutes() float64
Seconds() float64
}) string {
type dur interface { type dur interface {
Hours() float64 Hours() float64
Minutes() float64 Minutes() float64

View file

@ -1,6 +1,7 @@
// cmd_agent.go manages persistent agent context within task workspaces. // cmd_agent.go manages persistent agent context within task workspaces.
// //
// Each agent gets a directory at: // Each agent gets a directory at:
//
// .core/workspace/p{epic}/i{issue}/agents/{provider}/{agent-name}/ // .core/workspace/p{epic}/i{issue}/agents/{provider}/{agent-name}/
// //
// This directory persists across invocations, allowing agents to build // This directory persists across invocations, allowing agents to build

View file

@ -555,7 +555,9 @@ type dirEntry struct {
func (d *dirEntry) Name() string { return d.name } func (d *dirEntry) Name() string { return d.name }
func (d *dirEntry) IsDir() bool { return true } func (d *dirEntry) IsDir() bool { return true }
func (d *dirEntry) Type() fs.FileMode { return fs.ModeDir } func (d *dirEntry) Type() fs.FileMode { return fs.ModeDir }
func (d *dirEntry) Info() (fs.FileInfo, error) { return &fileInfo{name: d.name, isDir: true, mode: fs.ModeDir | 0755}, nil } func (d *dirEntry) Info() (fs.FileInfo, error) {
return &fileInfo{name: d.name, isDir: true, mode: fs.ModeDir | 0755}, nil
}
type fileInfo struct { type fileInfo struct {
name string name string

View file

@ -496,11 +496,13 @@ var _ fs.ReadDirFS = (*Node)(nil)
// Unexported helper: ensure ReadStream result also satisfies fs.File // Unexported helper: ensure ReadStream result also satisfies fs.File
// (for cases where callers do a type assertion). // (for cases where callers do a type assertion).
var _ goio.ReadCloser = goio.NopCloser(nil) var _ goio.ReadCloser = goio.NopCloser(nil)
// Ensure nodeWriter satisfies goio.WriteCloser. // Ensure nodeWriter satisfies goio.WriteCloser.
var _ goio.WriteCloser = (*nodeWriter)(nil) var _ goio.WriteCloser = (*nodeWriter)(nil)
// Ensure dirFile satisfies fs.File. // Ensure dirFile satisfies fs.File.
var _ fs.File = (*dirFile)(nil) var _ fs.File = (*dirFile)(nil)
// Ensure dataFileReader satisfies fs.File. // Ensure dataFileReader satisfies fs.File.
var _ fs.File = (*dataFileReader)(nil) var _ fs.File = (*dataFileReader)(nil)