hugpy-harness 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. hugpy_harness-0.1.3/PKG-INFO +114 -0
  2. hugpy_harness-0.1.3/README.md +106 -0
  3. hugpy_harness-0.1.3/hugpy_harness/LICENSE +41 -0
  4. hugpy_harness-0.1.3/hugpy_harness/PROVENANCE.md +37 -0
  5. hugpy_harness-0.1.3/hugpy_harness/__init__.py +1 -0
  6. hugpy_harness-0.1.3/hugpy_harness/adapter.py +495 -0
  7. hugpy_harness-0.1.3/hugpy_harness/audit.py +111 -0
  8. hugpy_harness-0.1.3/hugpy_harness/branding.py +218 -0
  9. hugpy_harness-0.1.3/hugpy_harness/cli/__init__.py +0 -0
  10. hugpy_harness-0.1.3/hugpy_harness/cli/chat.py +134 -0
  11. hugpy_harness-0.1.3/hugpy_harness/cli/tui.py +90 -0
  12. hugpy_harness-0.1.3/hugpy_harness/comms.py +18 -0
  13. hugpy_harness-0.1.3/hugpy_harness/config.py +189 -0
  14. hugpy_harness-0.1.3/hugpy_harness/gateway.py +696 -0
  15. hugpy_harness-0.1.3/hugpy_harness/journal.py +307 -0
  16. hugpy_harness-0.1.3/hugpy_harness/loop.py +901 -0
  17. hugpy_harness-0.1.3/hugpy_harness/memory.py +51 -0
  18. hugpy_harness-0.1.3/hugpy_harness/policy.py +80 -0
  19. hugpy_harness-0.1.3/hugpy_harness/serve_client/__init__.py +19 -0
  20. hugpy_harness-0.1.3/hugpy_harness/serve_client/abstract_claude.py +7 -0
  21. hugpy_harness-0.1.3/hugpy_harness/serve_client/abstract_serve.py +439 -0
  22. hugpy_harness-0.1.3/hugpy_harness/serve_client/base.py +185 -0
  23. hugpy_harness-0.1.3/hugpy_harness/serve_client/http.py +80 -0
  24. hugpy_harness-0.1.3/hugpy_harness/serve_client/hugpy_serve.py +283 -0
  25. hugpy_harness-0.1.3/hugpy_harness/serve_client/wrapper.py +223 -0
  26. hugpy_harness-0.1.3/hugpy_harness/tools/__init__.py +156 -0
  27. hugpy_harness-0.1.3/hugpy_harness/tools/fs.py +114 -0
  28. hugpy_harness-0.1.3/hugpy_harness/tools/portable.py +108 -0
  29. hugpy_harness-0.1.3/hugpy_harness/tools/shell.py +56 -0
  30. hugpy_harness-0.1.3/hugpy_harness/tui/__init__.py +56 -0
  31. hugpy_harness-0.1.3/hugpy_harness/tui/app.py +1741 -0
  32. hugpy_harness-0.1.3/hugpy_harness/tui/diag.py +167 -0
  33. hugpy_harness-0.1.3/hugpy_harness/tui/discovery.py +75 -0
  34. hugpy_harness-0.1.3/hugpy_harness/tui/layout.py +54 -0
  35. hugpy_harness-0.1.3/hugpy_harness/tui/loci.py +255 -0
  36. hugpy_harness-0.1.3/hugpy_harness/tui/output.py +101 -0
  37. hugpy_harness-0.1.3/hugpy_harness/tui/state.py +649 -0
  38. hugpy_harness-0.1.3/hugpy_harness/tui/toolcalls.py +305 -0
  39. hugpy_harness-0.1.3/hugpy_harness/tui/views/__init__.py +1 -0
  40. hugpy_harness-0.1.3/hugpy_harness/tui/views/composer.py +161 -0
  41. hugpy_harness-0.1.3/hugpy_harness/tui/views/modals.py +259 -0
  42. hugpy_harness-0.1.3/hugpy_harness/tui/views/panels.py +281 -0
  43. hugpy_harness-0.1.3/hugpy_harness/tui/views/resources.py +141 -0
  44. hugpy_harness-0.1.3/hugpy_harness/tui/views/text.py +75 -0
  45. hugpy_harness-0.1.3/hugpy_harness/tui/views/theme.py +50 -0
  46. hugpy_harness-0.1.3/hugpy_harness/tui/views/transcript.py +189 -0
  47. hugpy_harness-0.1.3/hugpy_harness.egg-info/PKG-INFO +114 -0
  48. hugpy_harness-0.1.3/hugpy_harness.egg-info/SOURCES.txt +53 -0
  49. hugpy_harness-0.1.3/hugpy_harness.egg-info/dependency_links.txt +1 -0
  50. hugpy_harness-0.1.3/hugpy_harness.egg-info/entry_points.txt +3 -0
  51. hugpy_harness-0.1.3/hugpy_harness.egg-info/requires.txt +1 -0
  52. hugpy_harness-0.1.3/hugpy_harness.egg-info/top_level.txt +1 -0
  53. hugpy_harness-0.1.3/pyproject.toml +22 -0
  54. hugpy_harness-0.1.3/setup.cfg +4 -0
  55. hugpy_harness-0.1.3/tests/test_portable_tools.py +124 -0
@@ -0,0 +1,114 @@
1
+ Metadata-Version: 2.4
2
+ Name: hugpy-harness
3
+ Version: 0.1.3
4
+ Summary: Optional standalone terminal chat and agent harness for a Hugpy wrapper or fleet
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: hugpy-tools>=0.2.7
8
+
9
+ # Hugpy Harness
10
+
11
+ Connect to either a standalone wrapper or a basic Core fleet endpoint with
12
+ `hugpy-harness --base http://host:port`. The harness displays fleet resource
13
+ snapshots per worker, including stale/offline state. Conversations remain in the
14
+ same local workspace journal when changing endpoints.
15
+
16
+ Optional standalone terminal interface for a local or remote Hugpy wrapper.
17
+ No dependency on hugpy-agent or the hugpy-wrapper Python package. Communication
18
+ uses HTTP; no background service, engine installation or worker enrollment.
19
+
20
+ ## Install
21
+
22
+ Build with `bash packaging/debian/build.sh`. The output directory contains the
23
+ harness `.deb`, a separate wrapper `.deb` when its local build is available,
24
+ and `install.sh`. Distribute these together for installation without an APT
25
+ repository (system Python packages must still be available).
26
+
27
+ ```sh
28
+ cd build/debian
29
+ ./install.sh # missing local wrapper: prompt [Y/n]
30
+ ./install.sh --yes # default yes without prompts
31
+ ./install.sh --without-wrapper # harness only, e.g. remote wrapper
32
+ ./install.sh --dry-run # show APT plan without changing packages
33
+ ```
34
+
35
+ A compatible installed wrapper is reused. The installer checks all required
36
+ local package files before calling APT. Noninteractive default is yes; use
37
+ `--without-wrapper` explicitly for a remote-only client.
38
+
39
+ The `.deb` declares the wrapper as `Recommends`, so standard APT installations
40
+ include it by default when a repository provides it. It is optional, not a
41
+ hard dependency. For the current local release use `install.sh`, which passes
42
+ the separate wrapper package to APT when needed. Alternatively:
43
+
44
+ ```sh
45
+ sudo apt install ./hugpy-wrapper_0.1.62_all.deb ./hugpy-harness_0.1.1_all.deb
46
+ sudo apt install --no-install-recommends ./hugpy-harness_0.1.1_all.deb
47
+ ```
48
+
49
+ The harness runtime is `/opt/hugpy-harness/venv`; the wrapper retains its own
50
+ runtime and service. Neither package embeds the other. Installing the wrapper
51
+ alone does not install the harness.
52
+
53
+ ## Launch
54
+
55
+ ```sh
56
+ hugpy-harness
57
+ hugpy-harness launch --workspace /path/to/project
58
+ hugpy-harness --base http://HOST:PORT --workspace /path/to/project
59
+ hugpy-harness chat --model MODEL_ID
60
+ ```
61
+
62
+ A local endpoint is discovered from the wrapper endpoint file. Remote access
63
+ uses `--base` and `HUGPY_WRAPPER_API_KEY` when authentication is required.
64
+ `hugpy-chat` is an alias for the plain chat interface. `/model` opens the model
65
+ picker; `/resources` toggles telemetry and `/resources full` opens the monitor.
66
+
67
+ Existing sessions remain in each workspace's `.hugpy_wrapper/chat` directory
68
+ for compatibility. Reopen using the same `--workspace` and `/session`.
69
+ Removal (`sudo apt remove hugpy-harness`) leaves chat history, the wrapper,
70
+ models, and original Hugpy Agent untouched. Purge removes only this package's
71
+ runtime, not workspace data. The wrapper never installs this optional package.
72
+
73
+ Chat accepts plain replies; tools are optional when the request needs them.
74
+ Each user message has its own bounded agent loop. Empty answers and engine
75
+ errors are reported without demanding a tool call.
76
+
77
+ ## Model tools
78
+
79
+ The harness imports the standalone `hugpy_tools` catalog. Core file, search,
80
+ text, data, hash, time, and web tools are available automatically in both the
81
+ full-screen interface and plain chat. Schemas reach models through prompted
82
+ tool instructions or native function calling, and results feed back into the
83
+ conversation through the existing journaled loop.
84
+
85
+ Existing `fs_read`, `fs_write`, `fs_glob`, and `shell` calls remain supported.
86
+ The harness keeps its workspace-relative `fs_glob(pattern)` contract when the
87
+ portable catalog contains the same name. File arguments are resolved inside
88
+ `--workspace`; writes, network requests, and host operations use `--policy`
89
+ (`ask` by default). Tools execute on the harness machine, even when the model
90
+ runs on a remote wrapper or fleet.
91
+
92
+ ```sh
93
+ hugpy-harness --workspace /path/to/project
94
+ hugpy-harness chat --workspace /path/to/project --policy readonly
95
+ # Add optional document, media, rendering, image, desktop, and VM tools:
96
+ hugpy-harness --workspace /path/to/project --optional-tools
97
+ hugpy-harness chat --workspace /path/to/project --optional-tools
98
+ ```
99
+
100
+ Optional tools load their backends only when called. Install the relevant
101
+ `hugpy-tools` extras in the harness environment, for example
102
+ `pip install 'hugpy-tools[images,files,render]'`; rendering also needs Playwright
103
+ Chromium, and desktop/VM tools need the corresponding host software. Missing
104
+ backends return a tool error to the model. Generated image and screenshot
105
+ outputs default to `.hugpy_wrapper/tool-artifacts` inside the workspace.
106
+
107
+ Python installations require `hugpy-tools>=0.2.7`. The Debian build bundles
108
+ the core tools wheel alongside the harness wheel and installs both offline.
109
+ Neither mode requires a Toolserver service. Optional backend dependencies are
110
+ not bundled. To install the unreleased workspace versions together:
111
+
112
+ ```sh
113
+ pip install ../hugpy_tools .
114
+ ```
@@ -0,0 +1,106 @@
1
+ # Hugpy Harness
2
+
3
+ Connect to either a standalone wrapper or a basic Core fleet endpoint with
4
+ `hugpy-harness --base http://host:port`. The harness displays fleet resource
5
+ snapshots per worker, including stale/offline state. Conversations remain in the
6
+ same local workspace journal when changing endpoints.
7
+
8
+ Optional standalone terminal interface for a local or remote Hugpy wrapper.
9
+ No dependency on hugpy-agent or the hugpy-wrapper Python package. Communication
10
+ uses HTTP; no background service, engine installation or worker enrollment.
11
+
12
+ ## Install
13
+
14
+ Build with `bash packaging/debian/build.sh`. The output directory contains the
15
+ harness `.deb`, a separate wrapper `.deb` when its local build is available,
16
+ and `install.sh`. Distribute these together for installation without an APT
17
+ repository (system Python packages must still be available).
18
+
19
+ ```sh
20
+ cd build/debian
21
+ ./install.sh # missing local wrapper: prompt [Y/n]
22
+ ./install.sh --yes # default yes without prompts
23
+ ./install.sh --without-wrapper # harness only, e.g. remote wrapper
24
+ ./install.sh --dry-run # show APT plan without changing packages
25
+ ```
26
+
27
+ A compatible installed wrapper is reused. The installer checks all required
28
+ local package files before calling APT. Noninteractive default is yes; use
29
+ `--without-wrapper` explicitly for a remote-only client.
30
+
31
+ The `.deb` declares the wrapper as `Recommends`, so standard APT installations
32
+ include it by default when a repository provides it. It is optional, not a
33
+ hard dependency. For the current local release use `install.sh`, which passes
34
+ the separate wrapper package to APT when needed. Alternatively:
35
+
36
+ ```sh
37
+ sudo apt install ./hugpy-wrapper_0.1.62_all.deb ./hugpy-harness_0.1.1_all.deb
38
+ sudo apt install --no-install-recommends ./hugpy-harness_0.1.1_all.deb
39
+ ```
40
+
41
+ The harness runtime is `/opt/hugpy-harness/venv`; the wrapper retains its own
42
+ runtime and service. Neither package embeds the other. Installing the wrapper
43
+ alone does not install the harness.
44
+
45
+ ## Launch
46
+
47
+ ```sh
48
+ hugpy-harness
49
+ hugpy-harness launch --workspace /path/to/project
50
+ hugpy-harness --base http://HOST:PORT --workspace /path/to/project
51
+ hugpy-harness chat --model MODEL_ID
52
+ ```
53
+
54
+ A local endpoint is discovered from the wrapper endpoint file. Remote access
55
+ uses `--base` and `HUGPY_WRAPPER_API_KEY` when authentication is required.
56
+ `hugpy-chat` is an alias for the plain chat interface. `/model` opens the model
57
+ picker; `/resources` toggles telemetry and `/resources full` opens the monitor.
58
+
59
+ Existing sessions remain in each workspace's `.hugpy_wrapper/chat` directory
60
+ for compatibility. Reopen using the same `--workspace` and `/session`.
61
+ Removal (`sudo apt remove hugpy-harness`) leaves chat history, the wrapper,
62
+ models, and original Hugpy Agent untouched. Purge removes only this package's
63
+ runtime, not workspace data. The wrapper never installs this optional package.
64
+
65
+ Chat accepts plain replies; tools are optional when the request needs them.
66
+ Each user message has its own bounded agent loop. Empty answers and engine
67
+ errors are reported without demanding a tool call.
68
+
69
+ ## Model tools
70
+
71
+ The harness imports the standalone `hugpy_tools` catalog. Core file, search,
72
+ text, data, hash, time, and web tools are available automatically in both the
73
+ full-screen interface and plain chat. Schemas reach models through prompted
74
+ tool instructions or native function calling, and results feed back into the
75
+ conversation through the existing journaled loop.
76
+
77
+ Existing `fs_read`, `fs_write`, `fs_glob`, and `shell` calls remain supported.
78
+ The harness keeps its workspace-relative `fs_glob(pattern)` contract when the
79
+ portable catalog contains the same name. File arguments are resolved inside
80
+ `--workspace`; writes, network requests, and host operations use `--policy`
81
+ (`ask` by default). Tools execute on the harness machine, even when the model
82
+ runs on a remote wrapper or fleet.
83
+
84
+ ```sh
85
+ hugpy-harness --workspace /path/to/project
86
+ hugpy-harness chat --workspace /path/to/project --policy readonly
87
+ # Add optional document, media, rendering, image, desktop, and VM tools:
88
+ hugpy-harness --workspace /path/to/project --optional-tools
89
+ hugpy-harness chat --workspace /path/to/project --optional-tools
90
+ ```
91
+
92
+ Optional tools load their backends only when called. Install the relevant
93
+ `hugpy-tools` extras in the harness environment, for example
94
+ `pip install 'hugpy-tools[images,files,render]'`; rendering also needs Playwright
95
+ Chromium, and desktop/VM tools need the corresponding host software. Missing
96
+ backends return a tool error to the model. Generated image and screenshot
97
+ outputs default to `.hugpy_wrapper/tool-artifacts` inside the workspace.
98
+
99
+ Python installations require `hugpy-tools>=0.2.7`. The Debian build bundles
100
+ the core tools wheel alongside the harness wheel and installs both offline.
101
+ Neither mode requires a Toolserver service. Optional backend dependencies are
102
+ not bundled. To install the unreleased workspace versions together:
103
+
104
+ ```sh
105
+ pip install ../hugpy_tools .
106
+ ```
@@ -0,0 +1,41 @@
1
+ hugpy — Source-Available License
2
+
3
+ Copyright (c) 2026 putkoff (hugpy.ai). All rights reserved.
4
+
5
+ Permission is granted, free of charge, to use this software ("hugpy") for
6
+ personal and non-commercial purposes, and for time-limited commercial
7
+ evaluation, subject to the following conditions:
8
+
9
+ 1. Non-commercial use means use by an individual for personal purposes, or
10
+ use by a non-profit or educational institution for its own internal
11
+ purposes. Any use by, for, or on behalf of a for-profit business or in
12
+ connection with revenue-generating activity is commercial use — including
13
+ internal business use, use in producing goods or services, and use on
14
+ paid engagements.
15
+
16
+ 2. Commercial use requires a commercial license from the copyright holder.
17
+ Exception: a business may evaluate the software internally for up to
18
+ thirty (30) days free of charge; continued use after that requires a
19
+ commercial license.
20
+
21
+ 3. Redistribution of this software, in source or binary form, modified or
22
+ unmodified, is not permitted without prior written permission from the
23
+ copyright holder. Downloading the software from an official distribution
24
+ channel (PyPI, npm, hugpy.ai) is not redistribution.
25
+
26
+ 4. Modification for personal use or internal evaluation is permitted;
27
+ distribution of modified versions is not.
28
+
29
+ 5. This notice must be retained in all copies or substantial portions of
30
+ the software.
31
+
32
+ 6. Any use outside these terms automatically terminates this license.
33
+
34
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
35
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
36
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
37
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY ARISING
38
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
39
+ IN THE SOFTWARE.
40
+
41
+ For commercial licensing or redistribution permission: https://hugpy.ai
@@ -0,0 +1,37 @@
1
+ # Hugpy Agent chat extraction
2
+
3
+ Source: `/srv/hugpy/app/packages/hugpy_agent`, version 0.1.114.
4
+ The AgentLoop, adapter, gateway, journal, memory, audit and policy code are
5
+ retained. Config is its dataclass without fleet endpoint discovery. Tools use
6
+ the existing filesystem and shell implementations plus final_answer and a
7
+ terminal operator channel. Fleet leases, remote tools, subagents and embedding
8
+ RAG are omitted. State lives in `.hugpy_wrapper/chat` within the workspace.
9
+ The CLI turn sequence is extracted from `hugpy_agent.cli.cmd_chat`.
10
+ Original file SHA-256 values:
11
+
12
+ ```
13
+ loop.py 9cdb541f090367eba65aec54561845cb09e5258249a512aa54c68255999e0934
14
+ gateway.py 5df914e06e2edc3f3a91cbcc7207df5da78abd5e63684d304f39eb9829c15440
15
+ adapter.py 25259f038bfb117e341db7d27d4588a1bbcffe35fd3947ce4f98f5941cfa15a3
16
+ journal.py 3acf8ab60c4d5194207cb05e3a17633bdb21276bbed4938f591c829189b5451f
17
+ memory.py 6e187ce5f2ab653bb4a67fb1d2060f9438a226a67428608c363a07f56a6269d8
18
+ audit.py b58a8f9ada3698f81970cf37d6d90a496987b2251d917f8c278a9858bc2ca466
19
+ policy.py ab4e391739db83dd31b38d1e28b12367ef4c5aad9853bdc708e2230755f17006
20
+ tools/fs.py 810bf6ea730a15412f693e3b5a7773b5cf75e5623c2e54f76cae08a6039858d4
21
+ tools/shell.py 868ae9aeb93bcce25563f5ffd427872c0ede4ae421054e424f4e679b7d6cd54d
22
+ ```
23
+
24
+ Local fixes: conversation mode permits plain chat replies; terminal approvals
25
+ replace remote comms. A final_answer with an unambiguous top-level answer is
26
+ normalized; invalid final answers request repair instead of displaying `{}`.
27
+
28
+ The `tui/`, `serve_client/`, and `branding.py` sources are also extracted from
29
+ Hugpy Agent 0.1.114. The original curses screens, command menu, model/session
30
+ pickers, tool cards and approval UI are retained. `serve_client/wrapper.py`
31
+ adapts them to the standalone wrapper and local AgentLoop journals. Remote-only
32
+ commands are hidden from the local menu. `hugpy-agent launch` and `tui` both
33
+ open this interface; `chat` remains the plain REPL. No OpenCode launch is used.
34
+
35
+ Wrapper additions: the resources pane and full resource monitor poll the
36
+ connected wrapper independently of the chat/event loop, displaying telemetry
37
+ freshness, unavailable counters, resident health, and admission queue reasons.
@@ -0,0 +1 @@
1
+ """Standalone extraction of Hugpy Agent 0.1.114 chat runtime."""