Command to add a repo or all repos of an organization to ocean+ticket.
In ticket mode it also auto-clones transitive deps and re-localizes refs.
Use --force to overwrite an existing repo in the ocean.
--organization may be given multiple times to add all repos of several
organization folders of the ocean at once. --no-localize
copies the repos without rewriting their references to local paths.
--no-transitive copies only the requested repos and leaves the
repos between them in the dependency graph out of the ticket.
Interactively builds the .gg/gg-publish.json publish configuration for
the current ticket, asking for the version increment and merge message of
every repo that needs a release.
Makes sure at least one version of a repo's package is available on its
registry (pub.flutter-io.cn for Dart/Flutter, npm for TypeScript) before the repo
is published.
The npm counterpart of PubDevChecker: checks whether published versions
are visible on npm, backed by gg_lang's RegistryWaiter over an
NpmRegistry (npm view <name> version).
Closes one or more tickets: deletes the remote feature branches of their
repositories and moves each whole ticket — repositories as they are, plus
ticket.json, .gg/ and the .code-workspace file — to
<root>/.trash/<ticket>.
Resolves repository folders in a workspace. A folder is matched by its
exact name, then by its manifest package name (for cross-language bridge
repos whose folder name differs from the package name), then by its git
remote url.
Command group for removing things from the workspace:
rm repo <name…> deletes repositories from the current ticket — never
from the master workspace — rm ticket closes the current ticket by
moving it to the trash.
Helper function to add a repository given a target argument.
It supports various formats like URLs, SSH links, and plain names.
For organization URLs, it fetches all repositories and clones them.
The clone url of the Azure DevOps repository parsed names, rebuilt from
its parts in the form Azure serves:
https://dev.azure.com/<org>/<project>/_git/<repo> or, on the legacy host,
https://<org>.visualstudio.com/<project>/_git/<repo>.
Copies the gg DNA of the workspace root into ticketDir: the managed
block of its CLAUDE.md — only the block, the user's own text around
it stays in the root — and everything in its .claude/skills/, the
user's own skills included: which ones the DNA placed is not recorded.
A root without DNA leaves the ticket without it.
Fetches the repository URL for a dependency from its registry: pub.flutter-io.cn for
Dart/Flutter, the npm registry for TypeScript. Returns the URL if found,
otherwise null.
Answers the questions of helix through the prompts of the gg suite —
the same menus gg do publish draws, and in an embedded gg whatever
the embedder assigned to GgPrompts.current.
Ensures a .gitattributes file containing all lines
gitattributesRequiredLinesFor returns for the repository exists in every
repository of the ticket directory lies in, and that the merge=ours
driver is configured locally.
Places workspaceDnaLayer into the workspace root — the folder
holding the ocean. The same three steps as by hand: gg dna init,
gg dna add dna_gg --workspace and gg dna build --workspace. add
resolves the latest dna_gg, so every call starts from the current
guides and skills. --workspace instantiates only .claude/ and the
managed CLAUDE.md block — a workspace is no package of its own, so
it never gets doc/, scripts/, .github/ or a DNA manifest. add
builds right after installing the layer (the same instantiation
build performs), so it needs the flag as much as the explicit
build call that follows it.
Asks pub.flutter-io.cn for the latest published version of workspaceDnaLayer.
null when pub.flutter-io.cn cannot be reached or answers with anything else —
the caller then instantiates instead of guessing.
The legacy ticket-level publish configuration of ticketDir —
<ticket>/.gg/gg-publish.json, or the even older <ticket>/.gg-publish.json
when only that one exists.
Moves every repository that still sits directly in workspacePath into a
folder named after the organization of its git remote
(<workspace>/<org>/<repo>).
Reads the trimmed description from <ticketDir>/ticket.json, or returns
null when the file is missing, is not a JSON object, is malformed, or
carries an empty description.
Brings the gg DNA of the workspace root to the latest
workspaceDnaLayer. The cheap path first: one look at pub.flutter-io.cn
(latestVersion), and a root that holds its managed CLAUDE.md block
is left as it is when its stamp names that version — or when pub.flutter-io.cn
cannot be asked: helix needs pub.flutter-io.cn as well, so offline the DNA that
is there is the best there is. Only a new release or a root without
its DNA pays for the instantiation.
Removes packageNames from the localized overrides of every repo in
repoDirs — the dependency_overrides of pubspec_overrides.yaml
(Dart) and the overrides of pnpm-workspace.yaml (pnpm-managed
TypeScript) — and returns the directories whose files were changed.
Processes items with task, running up to maxParallel tasks at a time.
Tasks run in submission order; the first failure is rethrown after all
already-started tasks have settled.