Skip to content
internal/cli
On this page

Registering selfdoc's whole command tree on one strictcli application, so one binary answers for every project kind and carries every command group.

#internal/cli

#internal/cli

Package cli registers selfdoc's whole command tree on one strictcli application.

One binary carries what used to be two Python CLIs, so every cross-CLI refusal they made is gone: build --target unified builds a unified site here rather than naming another package, and check answers for every project kind. What each command does, refuses and prints is otherwise the Python's, verbatim.

Nothing here changes the process's working directory. The directory a command operates on is Options.Dir, which the editor's publish path sets explicitly so an in-process invocation can act on a repository that is not the one the editor was started in.

#AppHelp

Go go
const AppHelp = "Code-aware static site generator with directive-based content extraction"

AppHelp is the one-line description selfdoc --help prints.

#Options

Go go
type Options struct

Options is everything one application is built from.

Only Version comes from the binary itself; every other member has a working zero value. Those members exist for the two callers that are not the binary: the editor's publish path, which runs a command in-process against a stated directory and collects its output, and the suite, which stubs the two registries a toolchain pin is checked against.

#New

Go go
func New(opts Options) *strictcli.App

New builds the selfdoc application.

Installing the lint-code validator is part of building the binary rather than optional: internal/config keeps the check as a seam so it stays loadable without the lint registry, and while the seam is nil a config's lint_ignore list is accepted as written.

#publisher.Descriptor

Go go
func (p *publisher) Descriptor() editor.Descriptor

Descriptor projects the publish command's own declaration out of the application's schema, so the consent dialog renders what the command really declares rather than a copy of it kept here.

#publisher.Plan

Go go
func (p *publisher) Plan(projectDir string) (editor.Plan, error)

Plan reports what a publish of projectDir would make public, read off the same post discovery the publish itself runs.

#publisher.Publish

Go go
func (p *publisher) Publish(projectDir string, approveConsequential bool, out io.Writer) (int, error)

Publish runs the publish command in process against projectDir, writing everything it emits to out.

#reloadServer.ServeHTTP

Go go
func (s *reloadServer) ServeHTTP(w http.ResponseWriter, r *http.Request)

#injectingWriter.Header

Go go
func (w *injectingWriter) Header() http.Header { return w.rw.Header() }

#injectingWriter.WriteHeader

Go go
func (w *injectingWriter) WriteHeader(status int) { w.status = status }

#injectingWriter.Write

Go go
func (w *injectingWriter) Write(p []byte) (int, error) { return w.buf.Write(p) }

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • claudewheel A TUI Claude Code Launcher that lets you have more than one profile, manage sessions lifecycle, pick the exact CC version, model to use (even older unlisted ones), pick which GitHub account to use, etc.
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • rlsbl Release orchestration and project scaffolding CLI that bumps versions, validates a structured JSONL changelog, tags only the commit CI verified, and publishes to npm, PyPI, Go and more
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search