Commands
The built-in command classes, one module each. Each is a duho command: its fields
are the command's flags and its __call__ runs it. The Commands
guide describes what each does from the command line.
dotagents.cli.init
dotagents init -- lay down the neutral base config (+ optional wrappers).
Init
Bases: DotAgentsArgs
Lay down the base config: the store's AGENTS.md and each harness's hooks.
That is the store's AGENTS.md managed block plus each harness's include
and hooks -- never the opinionated overlays (those come from overlays add).
Scope: project by default -- <root>/.agents, where the root is a
pinned $AGENTS_PROJECT_ROOT / $CLAUDE_PROJECT_DIR while the current
directory is inside it; from outside a pinned root, the nearest ancestor of
the current directory with a .git or its own .agents (with a
warning); with no pin, the current directory (run from ~ it is the
user store) -- or the user store with -g/--global (~/.agents,
or $AGENTS_HOME). --dest overrides the resolved location.
--bin-dir additionally writes dotagents wrapper scripts there so the
command is on your PATH: at the .pyz when run from one, else running
"<this python>" -m dotagents. <scope>/bin/ always gets them.
agents = []
class-attribute
instance-attribute
List of agents to install for (e.g. claude,gemini). Default: auto-detect + claude.
bin_dir = None
class-attribute
instance-attribute
Also write dotagents/dotagents.cmd wrapper scripts here (puts the command on PATH).
dest = None
class-attribute
instance-attribute
Explicit destination, overriding the resolved scope (project/user).
dry_run = False
class-attribute
instance-attribute
Show what would be written without touching anything.
force = False
class-attribute
instance-attribute
Replace AGENTS.md wholesale (with backup) instead of block-merging.
from_ = None
class-attribute
instance-attribute
Base overlay to use instead of the bundled one: a directory or dotagents checkout, a file:/http(s):/sftp:/s3:/zip: URI, or a git <repo>[@ref][#path]. Recorded, so later runs reuse it.
no_hooks = False
class-attribute
instance-attribute
Skip wiring agent hooks and the shared skills link into the agent's config dir.
no_venv = False
class-attribute
instance-attribute
Do not create or update the scope's Python venv (duho for skills, overlay requirements).
powershell_env_hook = False
class-attribute
instance-attribute
Windows, Claude Code: also wire the PowerShell-tool env loader. It AUTO-APPROVES every PowerShell tool call (skips the permission prompt).
__call__()
Source code in src/dotagents/cli/init.py
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | |
dotagents.cli.overlays
dotagents overlays -- add / remove / list / sync / show, with skills sync.
The logic lives in _scope.py / _sources.py / _skills.py / _overlays.py;
cli/__init__.py lists the Overlays umbrella in _BUILTIN_COMMANDS.
Discover-not-track: installed overlays are the dirs under <store>/overlays/.
Each carries an install record (Overlay.INSTALL_RECORD): the repo it came
from, which sync resolves it from again, and the digest of every file
installed, which lets sync prune what the source dropped.
OverlayAdd
Bases: _RepoArgs
Install overlay(s) by name into a scope, and publish their skills.
Resolves each <name> against the source (--repo, the env repos,
the stores' registries); a glob ('*', 'py*') stands for every name
the source offers that matches it, so add '*' installs what a store's
registry names. Installs what each manifest requires first,
copies it into <store>/overlays/<name>/ with a record of the repo it
came from, and publishes its skills/ from the INSTALLED copy into the
shared <store>/skills/, linking them into each agent's own skills dir
that init already wired for the scope (Claude's <config>/skills/;
otherwise re-run init). --copy mirrors skills as real dirs instead
of symlinks (Windows / no-symlink). The AGENTS.md managed block is then
rebuilt from the pristine base over every installed overlay's routing and
rules, in (priority, name) order. When an overlay's requirements or setup
fail, only that overlay is affected: one this command was installing for
the first time is removed again, one that was already installed stays (not
set up). Every other overlay is still installed, except those that require
the failed one (directly or not), and the command exits 1 naming every
overlay that did not install. The block is recomposed over
whatever is installed either way. Adding an overlay already installed
makes it match its source again, as sync does.
copy = False
class-attribute
instance-attribute
Copy skills into the shared dir instead of symlinking (no-symlink fallback).
dry_run = False
class-attribute
instance-attribute
Show what would happen without touching anything.
name = []
class-attribute
instance-attribute
Overlay name(s) or glob(s) to install, resolved against the source ('*': every overlay it offers).
no_requires = False
class-attribute
instance-attribute
Do not install the overlays each manifest's requires names.
no_setup = False
class-attribute
instance-attribute
Skip running an overlay's idempotent setup script after install.
no_venv = False
class-attribute
instance-attribute
Do not create or update the scope's Python venv (overlay requirements, duho, the .pth layering).
prune = False
class-attribute
instance-attribute
Re-adding an installed overlay: also clear its .gitignore/.ignore'd files and caches.
setup_timeout = None
class-attribute
instance-attribute
Seconds a setup script may run (default: its manifest's setup_timeout, else 300; 0 = no limit).
__call__()
Source code in src/dotagents/cli/overlays.py
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 | |
OverlayList
Bases: _RepoArgs
List the overlays installed in the scope and those available from source.
In the project scope the user store's are listed too -- both are in play for a project session; a same-named project overlay shadows the store's copy.
installed is discovered by presence under <store>/overlays/; no
registry file. An installed overlay whose requires no installed overlay
provides is flagged. available is what the source offers (* =
installed in either scope; a repo that cannot be loaded is a warning, the
others are still listed). --json emits everything as a machine-readable
object.
json = False
class-attribute
instance-attribute
Emit JSON instead of plain text.
__call__()
Source code in src/dotagents/cli/overlays.py
723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 | |
OverlayRemove
Bases: DotAgentsArgs
Remove installed overlays, unpublish their skills, recompose AGENTS.md.
Each overlay dir is deleted, its skills unpublished (and removed from each
agent's own skills dir init wired), and AGENTS.md's managed block
recomposed over what remains.
Deletes only <store>/overlays/<name>/ (a symlinked or
junctioned overlay is unlinked, its target untouched) and unpublishes only
the skills that overlay published (matched to its own skills/, by
content) -- and only once the delete succeeded. Refuses an overlay another
installed overlay requires (and no other store provides) unless
--force. The block is recomposed over the overlays still installed,
even when a removal fails part-way.
dry_run = False
class-attribute
instance-attribute
Show what would happen without touching anything.
force = False
class-attribute
instance-attribute
Remove even when another installed overlay requires it.
name = []
class-attribute
instance-attribute
Overlay name(s) to remove.
no_venv = False
class-attribute
instance-attribute
Do not create or update the scope's Python venv (overlay requirements, duho, the .pth layering).
__call__()
Source code in src/dotagents/cli/overlays.py
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 | |
OverlayShow
Bases: _RepoArgs
Describe one overlay: where it is, its manifest, skills and file count.
The manifest part is what it declares (description, priority, requires,
routing, rules) and its setup script; for an installed overlay, also the
repo it was installed from and any requires no installed overlay
provides.
Looks at the INSTALLED copy in the scope first (in the project scope, then the user store's -- the one a project session would use), else the source's.
json = False
class-attribute
instance-attribute
Emit JSON instead of plain text.
name = ''
class-attribute
instance-attribute
Overlay name.
__call__()
Source code in src/dotagents/cli/overlays.py
824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 | |
OverlaySync
Bases: _RepoArgs
Refresh installed overlays from source, and resync their skills.
Each installed overlay is fetched again from the repo it was INSTALLED
from (its install record) -- not from whichever repo now offers the name
first -- unless --repo is given, which replaces each recorded source:
the overlay resolves through that chain instead. The install is made to
match the source exactly: new and changed files land, overlay.toml is
refreshed, and files the source does not ship are removed -- a file edited
here is backed up first (<store>/install_backup/). What the overlay's
.gitignore / .ignore files match (setup output, local state) and
tool caches are left alone; --prune clears them too. A requires
added upstream is installed. The managed
block is recomposed over every installed overlay. An optional <glob>
filters which installed overlays to sync (sync 'py*'). A repo that
cannot be loaded fails the sync (after the others are synced); a repo
that no longer offers an overlay is a warning.
copy = False
class-attribute
instance-attribute
Copy skills into the shared dir instead of symlinking (no-symlink fallback).
dry_run = False
class-attribute
instance-attribute
Show what would happen without touching anything.
no_setup = False
class-attribute
instance-attribute
Skip running each overlay's idempotent setup script after sync.
no_venv = False
class-attribute
instance-attribute
Do not create or update the scope's Python venv (overlay requirements, duho, the .pth layering).
pattern = None
class-attribute
instance-attribute
Glob over installed overlay names to sync (default: all).
prune = False
class-attribute
instance-attribute
Also clear the overlay's .gitignore/.ignore'd files and caches: exactly the upstream files.
setup_timeout = None
class-attribute
instance-attribute
Seconds a setup script may run (default: its manifest's setup_timeout, else 300; 0 = no limit).
__call__()
Source code in src/dotagents/cli/overlays.py
987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 | |
Overlays
Bases: LoggingArgs, Cli
Manage opt-in overlays by name: add / remove / list / sync / show (+ skills sync).
dotagents.cli.context
dotagents context -- assemble the effective context for agents.
Context
Bases: DotAgentsArgs
Assemble the effective context for agents.
Roots (both configurable, never hardcoded): the user store is
--agents-dir -> $AGENTS_HOME ->
~/.agents (:func:~dotagents.cli._common.resolve_user_store), and the
project root is $AGENTS_PROJECT_ROOT -> $CLAUDE_PROJECT_DIR -> the cwd
(:func:~dotagents._scope.project_root_default). This matters most here: the
SessionStart hook runs dotagents context from wherever the session happens
to start, so a pinned project root is the only thing that keeps the assembled
context stable across subdirectories.
-g/--global means skip the project-level context files, NOT "resolve a
different store" -- same narrowed meaning as dotagents env's (and unlike
DotAgentsArgs.resolve_scope, which is deliberately not used here).
FORMATS = ('markdown', 'system-reminder', 'json')
class-attribute
instance-attribute
agents = []
class-attribute
instance-attribute
Agents to generate context for, by name or harness id (e.g. claude,gemini-cli). Default: active agent.
agents_dir = None
class-attribute
instance-attribute
User store root override (default: $AGENTS_HOME, else ~/.agents).
format = 'markdown'
class-attribute
instance-attribute
Output format: markdown, system-reminder, or json.
global_scope = False
class-attribute
instance-attribute
Skip project-level context files (the store root is unaffected).
inline = False
class-attribute
instance-attribute
Also inline the on-demand .md files the sources reference. Off by default: the base rules say to read those only when a task needs them.
out = '-'
class-attribute
instance-attribute
Output path (positional). Default '-' = stdout; a path writes that file (one agent, or several with --format json); use --write-agent to write each agent's native config file instead.
write_agent = False
class-attribute
instance-attribute
Merge the context into each agent's own instruction file under the project root (Claude .claude/CLAUDE.md, Codex AGENTS.md, Gemini GEMINI.md, Cursor .cursor/rules/dotagents.mdc, Copilot .github/copilot-instructions.md, pi .pi/APPEND_SYSTEM.md, Antigravity .agents/rules/dotagents.md) as a managed block, instead of printing it.
__call__()
Source code in src/dotagents/cli/context.py
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | |
dotagents.cli.env
dotagents env -- chained env-file assembly + env.py execution.
All assembly logic lives in _env.py (contract B) and _agents.stamp_identity;
this module formats the result. Never logs env VALUES -- output goes to stdout
for the caller to consume; the logger only ever names vars (Leakage rule).
INTO_BEGIN = ': dotagents-env-begin'
module-attribute
INTO_END = ': dotagents-env-end'
module-attribute
INTO_FORMATS = ('export',)
module-attribute
Env
Bases: DotAgentsArgs
Assemble the chained env (env files + env.py execution) under contract B.
Prepends every level's bin dir to PATH first and every existing
lib dir to PYTHONPATH (listing them in AGENTS_PYTHONPATH), then evaluates the pre.*
tier and the main tier in precedence order (store by store -- system,
user, project -- each store's overlays before the store itself), chaining
each file over the accumulated env so later files win. .py files are
EXECUTED and emit JSON env changes; plain files are sourced by bash. A
project root's own files outside .agents/ never run. Standardized
AGENTS_*/AGENT identity vars and the AGENTS_PROXY model are
wired in.
--diff emits only the vars that differ from the current environment (what
a SessionStart hook injects); the default emits the full assembled env merged
over the current one. Output is sensitive -- it may carry secret values.
A var an env layer unsets (null from an env.py, unset in a
plain file) is emitted as an unset where the format has one.
--cache reuses the output of an earlier run whose inputs were the same
-- the whole environment, the cwd, the stores and their overlays, every
env file's and lib file's mtime and size -- for up to five minutes
(an env.py may read something no key can see), stored owner-only under
<user store>/.cache/env/. The env-loader hooks, which run before every
shell command, pass it; an edited env file is picked up on the next call.
--format selects the emitted syntax and defaults to auto, which
detects the CALLING shell (parent-process chain) and picks a matching format
so the output is sourceable where it runs: export (aliases
posix/sh/bash), dotenv (env), powershell
(pwsh/ps), cmd (bat/batch), fish, plus the data
forms json/ini/yaml. An explicit --format always wins.
cmd output is meant to run as a batch file: redirect it to a .cmd
file and call that file, with delayed expansion off. Only then do its
doubled percent signs collapse back, and a !name! in a value is not
expanded.
Roots (both configurable, never hardcoded): the user store is
--agents-dir -> $AGENTS_HOME ->
~/.agents (:func:~dotagents.cli._common.resolve_user_store), and the
project root is $AGENTS_PROJECT_ROOT -> $CLAUDE_PROJECT_DIR -> the cwd
(:func:~dotagents._scope.project_root_default). A harness that pins those
vars gets ONE root per session regardless of the cwd a subprocess runs in --
which is the point of env emitting them in the first place.
-g/--global here means skip the project-level env files, NOT "resolve a
different store": the walk always starts from the USER store and -g only
drops the project tiers. (DotAgentsArgs.resolve_scope -- which would return
<project>/.agents as the root -- is deliberately NOT used; this command
inherits the class only for the shared -g/--agents-dir flag pair.)
agents_dir = None
class-attribute
instance-attribute
User store root override (default: $AGENTS_HOME, else ~/.agents).
cache = False
class-attribute
instance-attribute
Reuse the output of an earlier identical run (same environment, cwd, store, overlays and env/lib files, at most 5 minutes old) instead of running the env files again; the per-command env loaders use it.
diff = False
class-attribute
instance-attribute
Emit only vars that differ from the current environment.
format = 'auto'
class-attribute
instance-attribute
Output format. Default 'auto' detects the calling shell. Shell forms: export (aliases posix/sh/bash), dotenv (env), powershell (pwsh/ps), cmd (bat/batch), fish. Data forms: json, ini, yaml.
global_scope = False
class-attribute
instance-attribute
Skip project-level env files (the store root is unaffected).
into = None
class-attribute
instance-attribute
Write into this file instead of stdout (a hook's $CLAUDE_ENV_FILE), replacing the block an earlier run wrote there and keeping the rest: the file holds one current block however often the hook runs.
__call__()
Source code in src/dotagents/cli/env.py
651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 | |
write_into(path, text, output_format)
Put text into path as the ONE block env --into owns there:
every earlier block (between :data:INTO_BEGIN / :data:INTO_END) is
removed, anything else in the file -- another hook's lines -- is kept in
place, and the new block goes at the end, where a sourced file's later
lines win (what an append did). Atomic, LF-only. A hook that re-runs
(resume, compact, clear) used to append its whole output each time, and
the file Claude Code inlines into every Bash command grew past what Git
for Windows' bash accepts as a -c argument (about 8 KB).
Source code in src/dotagents/cli/env.py
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 | |
dotagents.cli.path
dotagents path -- the dirs dotagents puts on PATH (or PYTHONPATH).
PATH_FORMATS = ('list', 'native', 'posix', 'json')
module-attribute
PathCmd
Bases: DotAgentsArgs
Print the bin dirs dotagents puts on PATH (--lib: the lib dirs).
Highest precedence first, the order dotagents env puts them at the
front of PATH / PYTHONPATH: the project's .agents first, and
each store's own dir before its overlays'. The bin list includes dirs
that do not exist yet (as env does, so one created later is found);
the lib list only existing ones. Nothing is run -- no env file, no env.py -- so it is a
cheap way to put the bins on a shell's PATH::
export PATH="$(dotagents path --format posix):$PATH"
Formats: list (one per line, the default), native (joined with
os.pathsep), posix (:-joined; on Windows each dir in its
MSYS2 form, /c/...), json. The scope flags mean what they mean for
env: the user store is --agents-dir -> $AGENTS_HOME ->
~/.agents, and -g leaves the project's dirs out.
agents_dir = None
class-attribute
instance-attribute
User store root override (default: $AGENTS_HOME, else ~/.agents).
format = 'list'
class-attribute
instance-attribute
Output format: list (one per line), native (os.pathsep-joined), posix (':'-joined, MSYS2 form on Windows), json.
global_scope = False
class-attribute
instance-attribute
Leave out the project's dirs (the store root is unaffected).
lib = False
class-attribute
instance-attribute
Print the lib dirs (PYTHONPATH) instead of the bin dirs (PATH).
__call__()
Source code in src/dotagents/cli/path.py
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | |
dotagents.cli.about
dotagents about -- what this dotagents is: the CLI's version and every
package bundled with it.
dotagents-cli <version>
duho <version>
pathapi <version>
One package per line, <distribution> <version>, the CLI first. From a
built .pyz the list is what build-pyz vendored (recorded in
dotagents/_bundle.json at build time, since the zipapp carries no
dist-info); from a plain install it is whichever of
:data:RUNTIME_PACKAGES is installed -- a fixed set, so a package outside it
(a client the sftp or s3 extra pulls in) is not listed.
--json adds where it runs from and the Python.
BUNDLE_FILE = '_bundle.json'
module-attribute
DISTRIBUTION = 'dotagents-cli'
module-attribute
RUNTIME_PACKAGES = ('duho', 'pathapi', 'pathapi-uri', 'netimps', 'sftppath', 'objpath', 'repopath')
module-attribute
About
Bases: LoggingArgs, Cmd
Print the CLI's version and the packages bundled or installed with it.
One <distribution> <version> per line, dotagents-cli first.
json = False
class-attribute
instance-attribute
Machine-readable: the same packages plus where this runs from and the Python.
__call__()
Source code in src/dotagents/cli/about.py
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | |
bundle_manifest()
The _bundle.json build-pyz wrote, or None (a plain install).
Source code in src/dotagents/cli/about.py
35 36 37 38 39 40 41 42 43 44 45 | |
installed_packages()
{distribution: version} for the runtime packages a plain install has.
Source code in src/dotagents/cli/about.py
48 49 50 51 52 53 54 55 56 57 58 | |
packages()
(packages, bundle): the bundle's packages when running from one,
else the installed runtime packages; the CLI itself is never in either.
Source code in src/dotagents/cli/about.py
61 62 63 64 65 66 67 | |
dotagents.cli.build_pyz
dotagents build-pyz -- vendor deps and package a self-contained pyz.
EXTRA_REQUIREMENTS = {'uri': ('pathapi-uri>=0.1.0,<0.2',), 'http': ('pathapi-uri>=0.1.0,<0.2',), 'sftp': ('pathapi-uri>=0.1.0,<0.2', 'sftppath[paramiko]>=0.1.0,<0.2'), 's3': ('pathapi-uri>=0.1.0,<0.2', 'objpath[s3]>=0.1.0,<0.2'), 'repo': ('pathapi-uri>=0.1.0,<0.2', 'repopath[uri]>=0.1.0,<0.2')}
module-attribute
BuildPyz
Bases: LoggingArgs, Cmd
Vendor the runtime dependencies and package a self-contained dotagents.pyz.
distlib_version = '0.4.0'
class-attribute
instance-attribute
Pinned distlib version to vendor (overlay script launchers).
duho_version = '0.7.5'
class-attribute
instance-attribute
Pinned duho version to vendor.
extras = ''
class-attribute
instance-attribute
dotagents-cli extras to vendor too, comma-separated (uri, http, s3, repo), so the .pyz speaks those schemes for overlay sources; none by default. Only pure-Python dependencies can be vendored, so sftp (cryptography, bcrypt, pynacl) cannot.
out = Path('dist') / 'dotagents.pyz'
class-attribute
instance-attribute
Output path for the built pyz.
pathapi_version = '0.1.0'
class-attribute
instance-attribute
Pinned pathapi version to vendor (--pathlib-next-version is its old name).
python = '/usr/bin/env python3'
class-attribute
instance-attribute
Shebang line to embed in the pyz.
tomli_version = '1.1.0'
class-attribute
instance-attribute
Pinned tomli version to vendor (the TOML reader below Python 3.11).
with_pip = False
class-attribute
instance-attribute
Also vendor the pinned pip wheel, so the .pyz can set up a scope venv where the interpreter has no ensurepip and no index is reachable.
__call__()
Source code in src/dotagents/cli/build_pyz.py
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | |