feat(web): add global app status surface (#1869)
* feat(web): add app status bar * feat(web): add app status bar visibility toggle * feat(web): persist status bar item order * fix(web): refine app status bar behavior * fix(web): polish app status bar presentation * test(web): split plugin slot coverage groups * fix(web): address status surface review feedback * fix(web): stabilize status bar overlay tests
This commit is contained in:
@@ -11,10 +11,10 @@ type LicenseEntry = {
|
||||
repository?: string;
|
||||
license_text?: string;
|
||||
stale?: boolean;
|
||||
ecosystem: "npm" | "go";
|
||||
ecosystem: "npm" | "go" | "source";
|
||||
};
|
||||
|
||||
const ECOSYSTEMS = new Set(["npm", "go"]);
|
||||
const ECOSYSTEMS = new Set(["npm", "go", "source"]);
|
||||
const REQUIRED_FIELDS = ["name", "version", "license", "ecosystem"] as const;
|
||||
|
||||
function loadEntries(): LicenseEntry[] | null {
|
||||
|
||||
@@ -19,7 +19,7 @@ import { tmpdir } from "node:os";
|
||||
import { dirname, join } from "node:path";
|
||||
import { fileURLToPath, pathToFileURL } from "node:url";
|
||||
|
||||
type Ecosystem = "npm" | "go";
|
||||
type Ecosystem = "npm" | "go" | "source";
|
||||
|
||||
interface LicenseEntry {
|
||||
name: string;
|
||||
@@ -44,6 +44,38 @@ const MAX_LICENSE_TEXT_BYTES = 64 * 1024; // 64 KiB guard
|
||||
// SPDX-ish identifiers that mean "we don't know" — normalize them.
|
||||
const UNKNOWN_LICENSE = "UNKNOWN";
|
||||
|
||||
const THIRD_PARTY_SOURCE_NOTICES: LicenseEntry[] = [
|
||||
{
|
||||
name: "Orca status-bar reference",
|
||||
version: "d9d939a33b5858495ffb33489a952f1ac9293610",
|
||||
license: "MIT",
|
||||
repository: "https://github.com/stablyai/orca",
|
||||
license_text: `MIT License
|
||||
|
||||
Copyright (c) 2026 Lovecast Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
`,
|
||||
ecosystem: "source",
|
||||
},
|
||||
];
|
||||
|
||||
function readSafe(path: string): string | undefined {
|
||||
try {
|
||||
const buf = readFileSync(path);
|
||||
@@ -298,7 +330,7 @@ function isLicenseEntry(value: unknown): value is LicenseEntry {
|
||||
typeof entry.name === "string" &&
|
||||
typeof entry.version === "string" &&
|
||||
typeof entry.license === "string" &&
|
||||
(entry.ecosystem === "npm" || entry.ecosystem === "go") &&
|
||||
(entry.ecosystem === "npm" || entry.ecosystem === "go" || entry.ecosystem === "source") &&
|
||||
(entry.repository === undefined || typeof entry.repository === "string") &&
|
||||
(entry.license_text === undefined || typeof entry.license_text === "string") &&
|
||||
(entry.stale === undefined || typeof entry.stale === "boolean")
|
||||
@@ -436,7 +468,7 @@ function main(): void {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const merged = sortEntries(dedupe([...npm, ...goEntries]));
|
||||
const merged = sortEntries(dedupe([...npm, ...goEntries, ...THIRD_PARTY_SOURCE_NOTICES]));
|
||||
const json = JSON.stringify(merged, null, 2) + "\n";
|
||||
writeFileSync(OUTPUT_FILE, json);
|
||||
process.stderr.write(`[licenses] wrote ${merged.length} entries -> ${OUTPUT_FILE}\n`);
|
||||
|
||||
Reference in New Issue
Block a user