import { type JobProfile, type Person, type Project } from "@onenomad/przm-cortex-core"; export interface TaxonomyPaths { /** Workspace root (active workspace path). Files live under config/. */ repoRoot: string; } /** Read the current people list (from local overlay if present). */ export declare function readPeople(paths: TaxonomyPaths): Promise; export declare function readProjects(paths: TaxonomyPaths): Promise; /** * Write a merged people list. Existing entries with matching slug are * replaced by the new value (patch semantics); new slugs append. */ export declare function writePeople(paths: TaxonomyPaths, next: Person[]): Promise; export declare function writeProjects(paths: TaxonomyPaths, next: Project[]): Promise; /** * Upsert a person by slug. Returns the merged entry and whether it * was newly created. Serialized per-workspace. */ export declare function upsertPerson(paths: TaxonomyPaths, patch: Partial & { slug: string; }): Promise<{ person: Person; created: boolean; }>; /** * Upsert a project by slug. Same semantics as upsertPerson. Serialized * per-workspace. */ export declare function upsertProject(paths: TaxonomyPaths, patch: Partial & { slug: string; }): Promise<{ project: Project; created: boolean; }>; export interface AddProjectResult { project: Project; /** false when an existing project matched the slug or an alias — * nothing was written in that case. */ created: boolean; /** Which supplied value collided with an existing project. Only set * when created=false. */ matchedOn?: { kind: "slug" | "alias"; value: string; }; } /** * Create a project, deduping on slug AND aliases. Unlike upsertProject * (which patches an existing slug), this is strictly non-destructive: * if the slug or any supplied alias already resolves to a project — in * either direction (new slug == an existing alias, or a new alias == * an existing slug) — the existing project is returned untouched with * `created: false`. The match check and the append share the same * per-workspace lock, so two concurrent add_project calls can't both * create the same slug. * * Matching mirrors the taxonomy reader's index (slug map + alias map * keyed by `normalizeAlias`) so "already maps to a project" means * exactly what `findProject()` would resolve at ingest time. */ export declare function addProjectDeduped(paths: TaxonomyPaths, input: { slug: string; name?: string; description?: string; aliases?: string[]; active?: boolean; people?: string[]; }): Promise; /** * Clear `self: true` on any other person and set it on the given * slug. Used by update_user_identity so we maintain the invariant * that exactly one person is flagged as self. Serialized per-workspace. */ export declare function markSelf(paths: TaxonomyPaths, slug: string): Promise; /** * Read the workspace's job profile. Returns `undefined` when the file * is missing or the `profile` key is unset — `get_job_profile` * surfaces this as `configured: false` so the assistant can defer * interrogation until the user brings up something work-related. */ export declare function readJobProfile(paths: TaxonomyPaths): Promise; /** * Upsert the workspace job profile. Patch semantics — only the supplied * fields overwrite; everything else is preserved. Serialized * per-workspace alongside the other taxonomy mutations. */ export declare function upsertJobProfile(paths: TaxonomyPaths, patch: Partial): Promise; //# sourceMappingURL=taxonomy-mutation.d.ts.map