Vendor all 4 Pi packages (tui, ai, agent-core, coding-agent) from pi-mono v0.57.1 as @gsd/* workspace packages under packages/. This replaces the compiled npm dependency (@mariozechner/pi-coding-agent) and patch-package workflow, giving direct source access for modifications. - Copy Pi source from pi-mono v0.57.1 into packages/ - Create workspace package.json + tsconfig.json for each package - Rename ~240 imports from @mariozechner/pi-* to @gsd/pi-* - Apply existing patches as source edits (setModel persist, VT input) - Remove @mariozechner/pi-coding-agent dep and patch-package - Update build pipeline to build packages in dependency order - Add pi-upstream git remote for future selective syncing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
28 lines
643 B
TypeScript
28 lines
643 B
TypeScript
/**
|
|
* Generic undo stack with clone-on-push semantics.
|
|
*
|
|
* Stores deep clones of state snapshots. Popped snapshots are returned
|
|
* directly (no re-cloning) since they are already detached.
|
|
*/
|
|
export class UndoStack<S> {
|
|
private stack: S[] = [];
|
|
|
|
/** Push a deep clone of the given state onto the stack. */
|
|
push(state: S): void {
|
|
this.stack.push(structuredClone(state));
|
|
}
|
|
|
|
/** Pop and return the most recent snapshot, or undefined if empty. */
|
|
pop(): S | undefined {
|
|
return this.stack.pop();
|
|
}
|
|
|
|
/** Remove all snapshots. */
|
|
clear(): void {
|
|
this.stack.length = 0;
|
|
}
|
|
|
|
get length(): number {
|
|
return this.stack.length;
|
|
}
|
|
}
|