mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-10-05 00:02:24 +00:00
feat(cli): improve agent prompts/skills and workspace fork workflow (#9531)
* feat(cli): improve agent prompts/skills and workspace fork workflow
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(cli): refuse fork --from-branch rename of a base branch
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* refactor(cli): auto-detect fork branch workflow, drop rt.d.ts refresh and legacy-name warning
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(skills): reconcile raw-app generate-metadata stance (agent offers+runs)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* docs(skills): agent runs all CLI commands, gated on intent not on user typing them
Extends #9467's safe-vs-destructive model: the agent runs consequential commands (sync push, generate-metadata) itself too, gated on explicit user intent rather than handed to the user to type. The explicit-intent rule is the safeguard; an approval prompt is treated as a possible backstop, not assumed (auto-approve/headless runs have none).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Revert "docs(skills): agent runs all CLI commands, gated on intent not on user typing them"
Reverts 9225e1759b. That commit over-reached: #9467 already established the safe-vs-destructive split, and the targeted item-6 fix already removed the passive "tell the user they can run <safe next step>" phrasing. The blanket "agent runs everything" principle pushed deploys to be more eager and carried a wrong "permission layer prompts for approval" claim (untrue in auto-approve/headless mode). Keep deploys conservative.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat(cli): default fork workspace name/id to the current branch when renaming it
When 'wmill workspace fork' converts the current working branch into the fork branch, default the fork's name and id to that branch (sanitized to a slug, since branch names can contain '/'). Interactive: the prompt is pre-filled (enter to accept); non-interactive (--yes): used automatically. Adds a unit test for the slug derivation.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(cli): address fork review — guard fork-branch rename, cap+validate fork id
Two P2s from review:
- --from-branch refused when the current branch is already a fork branch (would detach the existing fork by renaming its branch).
- fork id slug capped to 42 chars (backend max 50 incl. wm-fork- prefix); auto-derived id is slugged; full id validated client-side before existsWorkspace/datatable cloning so an invalid id fails fast instead of leaving cloned Postgres databases behind.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
57e627eabf
commit
5bdc4f83ce
@@ -20,6 +20,33 @@ export function getCurrentGitBranch(): string | null {
|
||||
}
|
||||
}
|
||||
|
||||
/** Whether a local branch with this exact name exists. */
|
||||
export function gitBranchExists(branchName: string): boolean {
|
||||
const r = spawnSync(
|
||||
"git",
|
||||
["show-ref", "--verify", "--quiet", `refs/heads/${branchName}`],
|
||||
{ stdio: "pipe" },
|
||||
);
|
||||
return r.status === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename the currently checked-out branch (`git branch -m <newName>`). Used by
|
||||
* `wmill workspace fork --from-branch` to turn an existing working branch into
|
||||
* the `wm-fork/<base>/<id>` fork branch in place, preserving its commits.
|
||||
*/
|
||||
export function renameCurrentGitBranch(newName: string): void {
|
||||
const r = spawnSync("git", ["branch", "-m", newName], {
|
||||
encoding: "utf8",
|
||||
stdio: "pipe",
|
||||
});
|
||||
if ((r.status ?? 1) !== 0) {
|
||||
throw new Error(
|
||||
`git branch -m ${newName} failed (exit ${r.status}): ${r.stderr ?? ""}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export function getOriginalBranchForWorkspaceForks(branchName: string | null): string | null {
|
||||
if (!branchName || !branchName.startsWith(WM_FORK_PREFIX)) {
|
||||
return null
|
||||
|
||||
Reference in New Issue
Block a user