mirror of
https://github.com/andrewyng/openworker.git
synced 2026-09-12 15:20:19 +00:00
Manifest keeps a legacy family shim; telemetry wire fields unchanged. No behavior change; spec in ocw-context/docs/workspace-scratch-design.md.
29 lines
1.5 KiB
TypeScript
29 lines
1.5 KiB
TypeScript
// A persona is "project-scoped" when it declares requires_folder: an explicit directory the
|
|
// user picks, sessions grouped by project in the sidebar. Everything else runs on a transparent
|
|
// per-conversation scratch dir, with real folders added as roots when needed — no folder gate.
|
|
// (The old family/workspace-enum pair collapsed into this trait; workspace-scratch-design.md.)
|
|
export function isProjectScoped(p?: { requires_folder?: boolean }): boolean {
|
|
return p?.requires_folder === true;
|
|
}
|
|
|
|
// Persona naming: the product is "OpenWorker"; the personas are a "Coworker" family — Coworker
|
|
// (general), Code Coworker, Ops Coworker. In lists/chrome we use the SHORT label (Coworker / Code /
|
|
// Ops); the persona detail page uses the FULL family name. Backend names are left untouched (the
|
|
// API + tests keep "OpenWorker" / "Ops Coworker"); this is purely the display layer.
|
|
|
|
// Short label for the sidebar + top bar: "Coworker" / "Code" / "Ops" / "Chat".
|
|
export function shortPersonaName(name?: string, id?: string): string {
|
|
if (id === "cowork") return "Coworker";
|
|
const n = (name || id || "").trim();
|
|
return n.replace(/\s*coworker$/i, "").trim() || n;
|
|
}
|
|
|
|
// Full family name for the persona detail page: "Coworker" / "Code Coworker" / "Ops Coworker".
|
|
// Chat isn't a coworker — left as-is.
|
|
export function fullPersonaName(name?: string, id?: string): string {
|
|
if (id === "cowork") return "Coworker";
|
|
const n = (name || id || "").trim();
|
|
if (id === "chat" || !n) return n;
|
|
return /coworker$/i.test(n) ? n : `${n} Coworker`;
|
|
}
|