ads-agent-bridge 0.1.0a17__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.
- ads_agent_bridge-0.1.0a17/.github/workflows/ci.yml +27 -0
- ads_agent_bridge-0.1.0a17/.gitignore +10 -0
- ads_agent_bridge-0.1.0a17/AGENTS.md +31 -0
- ads_agent_bridge-0.1.0a17/CHANGELOG.md +23 -0
- ads_agent_bridge-0.1.0a17/CONTRIBUTING.md +29 -0
- ads_agent_bridge-0.1.0a17/LICENSE +21 -0
- ads_agent_bridge-0.1.0a17/PKG-INFO +163 -0
- ads_agent_bridge-0.1.0a17/README.md +114 -0
- ads_agent_bridge-0.1.0a17/SECURITY.md +15 -0
- ads_agent_bridge-0.1.0a17/docs/RELEASE_CONTRACT.md +66 -0
- ads_agent_bridge-0.1.0a17/docs/VALIDATION_2026-08-05.md +96 -0
- ads_agent_bridge-0.1.0a17/examples/dds_readback.py +66 -0
- ads_agent_bridge-0.1.0a17/examples/minimal_ac.py +100 -0
- ads_agent_bridge-0.1.0a17/pyproject.toml +48 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/__init__.py +3 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/__main__.py +3 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/addon/AdsAgentBridge/__init__.py +59 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/addon/AdsAgentBridge/server.py +356 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/addon/__init__.py +1 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/addon_installer.py +167 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/bridge_client.py +69 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/cli.py +200 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/compatibility.py +42 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/config.py +77 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/discovery.py +227 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/docs_kb.py +201 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/models.py +31 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/onboarding.py +146 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/paths.py +55 -0
- ads_agent_bridge-0.1.0a17/src/ads_agent_bridge/quickstart_circuit.py +103 -0
- ads_agent_bridge-0.1.0a17/tests/test_addon_installer.py +69 -0
- ads_agent_bridge-0.1.0a17/tests/test_bridge_client.py +28 -0
- ads_agent_bridge-0.1.0a17/tests/test_cli.py +31 -0
- ads_agent_bridge-0.1.0a17/tests/test_compatibility.py +10 -0
- ads_agent_bridge-0.1.0a17/tests/test_discovery.py +63 -0
- ads_agent_bridge-0.1.0a17/tests/test_docs_kb.py +33 -0
- ads_agent_bridge-0.1.0a17/tests/test_onboarding.py +93 -0
- ads_agent_bridge-0.1.0a17/tests/test_paths.py +10 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
os: [ubuntu-latest, windows-latest]
|
|
16
|
+
python-version: ["3.10", "3.13"]
|
|
17
|
+
runs-on: ${{ matrix.os }}
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
- run: python -m pip install --upgrade pip
|
|
24
|
+
- run: python -m pip install ".[test]" build
|
|
25
|
+
- run: python -m pytest
|
|
26
|
+
- run: python -m build
|
|
27
|
+
- run: python -m pip check
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# ADS Agent Bridge Development Contract
|
|
2
|
+
|
|
3
|
+
This repository is the clean, public product repository. Keep research,
|
|
4
|
+
customer workspaces, vendor documentation, generated indexes, and private
|
|
5
|
+
paths out of Git.
|
|
6
|
+
|
|
7
|
+
The critical user path is:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
pipx install ads-agent-bridge
|
|
11
|
+
ads-agent setup
|
|
12
|
+
ads-agent quickstart
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Work that does not improve or protect that path is not a v0.1 release blocker.
|
|
16
|
+
Read `docs/RELEASE_CONTRACT.md` before expanding scope.
|
|
17
|
+
|
|
18
|
+
Rules:
|
|
19
|
+
|
|
20
|
+
- Windows and Linux are equal release gates.
|
|
21
|
+
- ADS 2025 and later are the stable support target. Earlier Python-capable
|
|
22
|
+
generations remain preview or experimental until their real runtime gates
|
|
23
|
+
pass.
|
|
24
|
+
- Bind docs, capabilities, sessions, and examples to an explicit ADS instance.
|
|
25
|
+
- Prefer runtime feature probes over version-only assumptions.
|
|
26
|
+
- Keep the ADS embedded addon standard-library-only when practical.
|
|
27
|
+
- Listen on localhost and require a random session token.
|
|
28
|
+
- Never distribute Keysight documentation or a generated copy of it.
|
|
29
|
+
- Run tests from a non-system-drive temporary directory when available.
|
|
30
|
+
- A partial quickstart must return a non-zero status and name every unpassed
|
|
31
|
+
gate; never report docs lookup as a completed automation roundtrip.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable public changes are documented here.
|
|
4
|
+
|
|
5
|
+
## 0.1.0a17 — 2026-08-05
|
|
6
|
+
|
|
7
|
+
Initial limited public alpha.
|
|
8
|
+
|
|
9
|
+
- Discover and explicitly select local ADS installations on Windows and Linux.
|
|
10
|
+
- Classify stable, preview, experimental, and unsupported ADS generations.
|
|
11
|
+
- Build a private per-installation search index from locally installed HTML
|
|
12
|
+
documentation without redistributing Keysight content.
|
|
13
|
+
- Install, inspect, upgrade, and uninstall the DE/DDS user add-on with backups.
|
|
14
|
+
- Connect to authenticated localhost-only DE and DDS bridge sessions.
|
|
15
|
+
- Keep arbitrary Python and AEL execution behind explicit two-sided unsafe
|
|
16
|
+
opt-in.
|
|
17
|
+
- Run a disposable headless minimal-AC workspace and validate its ADS dataset.
|
|
18
|
+
- Locate Windows ADS user configuration through Keysight `eeenv/HOME` registry
|
|
19
|
+
values, with an explicit config-directory override.
|
|
20
|
+
- Redact session bearer tokens from public CLI output.
|
|
21
|
+
|
|
22
|
+
Momentum, RFPro, FEM, SIPro, and PIPro are not part of this alpha's supported
|
|
23
|
+
workflow claim.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Contributions should keep the three-command path reliable:
|
|
4
|
+
|
|
5
|
+
```console
|
|
6
|
+
pipx install ads-agent-bridge
|
|
7
|
+
ads-agent setup
|
|
8
|
+
ads-agent quickstart
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Local checks
|
|
12
|
+
|
|
13
|
+
Use Python 3.10 or later in an isolated environment:
|
|
14
|
+
|
|
15
|
+
```console
|
|
16
|
+
python -m pip install -e ".[test]"
|
|
17
|
+
python -m pytest
|
|
18
|
+
python -m build
|
|
19
|
+
python -m pip check
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Do not commit Keysight documentation, generated indexes, ADS workspaces,
|
|
23
|
+
session files, license data, private paths, or customer material. Live ADS and
|
|
24
|
+
solver claims need observable evidence from a disposable or explicitly
|
|
25
|
+
authorized workspace.
|
|
26
|
+
|
|
27
|
+
Keep pull requests focused and explain the user-facing capability or failure
|
|
28
|
+
mode they change. Security reports belong in private vulnerability reporting,
|
|
29
|
+
not public issues.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ADS Agent Bridge contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ads-agent-bridge
|
|
3
|
+
Version: 0.1.0a17
|
|
4
|
+
Summary: Unofficial local documentation and automation bridge for Keysight ADS
|
|
5
|
+
Project-URL: Homepage, https://github.com/cottman99/ads-agent-bridge
|
|
6
|
+
Project-URL: Repository, https://github.com/cottman99/ads-agent-bridge
|
|
7
|
+
Project-URL: Issues, https://github.com/cottman99/ads-agent-bridge/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/cottman99/ads-agent-bridge/blob/main/CHANGELOG.md
|
|
9
|
+
Author: ADS Agent Bridge contributors
|
|
10
|
+
License: MIT License
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2026 ADS Agent Bridge contributors
|
|
13
|
+
|
|
14
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
15
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
16
|
+
in the Software without restriction, including without limitation the rights
|
|
17
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
18
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
19
|
+
furnished to do so, subject to the following conditions:
|
|
20
|
+
|
|
21
|
+
The above copyright notice and this permission notice shall be included in all
|
|
22
|
+
copies or substantial portions of the Software.
|
|
23
|
+
|
|
24
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
25
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
26
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
27
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
28
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
29
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
30
|
+
SOFTWARE.
|
|
31
|
+
License-File: LICENSE
|
|
32
|
+
Keywords: ads,automation,eda,keysight,rf
|
|
33
|
+
Classifier: Development Status :: 3 - Alpha
|
|
34
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
35
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
36
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
37
|
+
Classifier: Programming Language :: Python :: 3
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
42
|
+
Requires-Python: >=3.10
|
|
43
|
+
Requires-Dist: beautifulsoup4<5,>=4.12
|
|
44
|
+
Requires-Dist: html2text<2027,>=2024.2.26
|
|
45
|
+
Requires-Dist: platformdirs<5,>=4
|
|
46
|
+
Provides-Extra: test
|
|
47
|
+
Requires-Dist: pytest<10,>=8; extra == 'test'
|
|
48
|
+
Description-Content-Type: text/markdown
|
|
49
|
+
|
|
50
|
+
# ADS Agent Bridge
|
|
51
|
+
|
|
52
|
+
An unofficial, local-first documentation and automation bridge for Keysight
|
|
53
|
+
Advanced Design System (ADS).
|
|
54
|
+
|
|
55
|
+
> [!IMPORTANT]
|
|
56
|
+
> This is a limited public alpha. Use disposable ADS workspaces and review the
|
|
57
|
+
> reported capability gates before relying on automation results.
|
|
58
|
+
> Keysight and ADS are trademarks of Keysight Technologies. This project is
|
|
59
|
+
> not affiliated with or endorsed by Keysight.
|
|
60
|
+
|
|
61
|
+
The first release is designed around three commands:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
pipx install ads-agent-bridge
|
|
65
|
+
ads-agent setup
|
|
66
|
+
ads-agent quickstart
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The current alpha slice implements cross-platform ADS installation discovery,
|
|
70
|
+
capability/support reporting, per-installation local documentation indexing,
|
|
71
|
+
DE/DDS add-on registration, and a headless minimal-AC quickstart with dataset
|
|
72
|
+
readback.
|
|
73
|
+
|
|
74
|
+
It does **not** currently claim a completed Momentum, RFPro, FEM, SIPro, or
|
|
75
|
+
PIPro workflow. Those lanes require separate solver-side acceptance evidence.
|
|
76
|
+
|
|
77
|
+
Official ADS documentation is never distributed with this package. Indexes
|
|
78
|
+
are built privately from documentation already installed on the user's
|
|
79
|
+
machine.
|
|
80
|
+
|
|
81
|
+
Set `ADS_AGENT_HOME` to place configuration, data, and caches under an explicit
|
|
82
|
+
directory. This is useful for isolated tests, remote servers, and systems where
|
|
83
|
+
the normal user cache location is not appropriate.
|
|
84
|
+
|
|
85
|
+
## Install and verify
|
|
86
|
+
|
|
87
|
+
Prerequisites:
|
|
88
|
+
|
|
89
|
+
- a locally licensed ADS installation;
|
|
90
|
+
- Python 3.10 or later for the `ads-agent` command;
|
|
91
|
+
- `pipx` (recommended) or an isolated virtual environment.
|
|
92
|
+
|
|
93
|
+
```console
|
|
94
|
+
pipx install ads-agent-bridge
|
|
95
|
+
ads-agent setup
|
|
96
|
+
ads-agent quickstart
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
When several ADS versions are found, interactive setup asks which one to use.
|
|
100
|
+
For an unattended or version-specific setup:
|
|
101
|
+
|
|
102
|
+
```console
|
|
103
|
+
ads-agent setup --ads-root /path/to/ADS2026_Update2 --non-interactive
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
A successful quickstart independently reports documentation, add-on,
|
|
107
|
+
workspace, circuit simulation, and dataset readback gates. It creates a new
|
|
108
|
+
disposable workspace and refuses to overwrite an existing path.
|
|
109
|
+
|
|
110
|
+
## Current commands
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
ads-agent instances scan [--ads-root PATH]
|
|
114
|
+
ads-agent instances list
|
|
115
|
+
ads-agent instances use INSTANCE_ID
|
|
116
|
+
ads-agent compatibility explain [--ads INSTANCE_ID]
|
|
117
|
+
ads-agent docs ensure [--ads INSTANCE_ID]
|
|
118
|
+
ads-agent docs status [--ads INSTANCE_ID]
|
|
119
|
+
ads-agent docs query QUERY [--ads INSTANCE_ID]
|
|
120
|
+
ads-agent setup [--ads-root PATH] [--non-interactive] [--config-dir PATH]
|
|
121
|
+
ads-agent quickstart [--ads INSTANCE_ID] [--workspace PATH] [--config-dir PATH]
|
|
122
|
+
ads-agent addon status
|
|
123
|
+
ads-agent bridge sessions
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Documentation queries stay on the local machine:
|
|
127
|
+
|
|
128
|
+
```console
|
|
129
|
+
ads-agent docs query "keysight.ads.de workspace" --limit 5
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The bridge listens only on localhost and uses a random token per session.
|
|
133
|
+
Arbitrary embedded Python and dynamic AEL calls are disabled unless ADS is
|
|
134
|
+
launched with `ADS_AGENT_UNSAFE=1` and the client command also includes
|
|
135
|
+
`--unsafe`.
|
|
136
|
+
|
|
137
|
+
On Windows, `setup` reads Keysight's per-version `eeenv/HOME` registry values
|
|
138
|
+
to locate the real `hpeesof/config` directory. Use `--config-dir` (or
|
|
139
|
+
`ADS_AGENT_ADS_CONFIG_DIR`) when maintaining separate ADS profiles.
|
|
140
|
+
|
|
141
|
+
On Linux, ADS Python may still require an available X display even though the
|
|
142
|
+
quickstart opens no ADS window. Set `DISPLAY` to the intended isolated display
|
|
143
|
+
before running it. `setup` edits only the current user's ADS add-on XML files,
|
|
144
|
+
creates timestamped backups, and preserves unrelated add-ons.
|
|
145
|
+
|
|
146
|
+
Stable support is targeted at ADS 2025 and later. ADS 2024 Update 2 is a
|
|
147
|
+
preview target; ADS 2023 Update 2 through ADS 2024 Update 1 are experimental.
|
|
148
|
+
Runtime capability probes, rather than version numbers alone, decide which
|
|
149
|
+
features are actually available.
|
|
150
|
+
|
|
151
|
+
## Remove the integration
|
|
152
|
+
|
|
153
|
+
```console
|
|
154
|
+
ads-agent addon uninstall
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The installer preserves unrelated ADS add-ons and creates timestamped XML
|
|
158
|
+
backups before changing an existing configuration.
|
|
159
|
+
|
|
160
|
+
## Development
|
|
161
|
+
|
|
162
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and the evidence-backed
|
|
163
|
+
[validation record](docs/VALIDATION_2026-08-05.md).
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# ADS Agent Bridge
|
|
2
|
+
|
|
3
|
+
An unofficial, local-first documentation and automation bridge for Keysight
|
|
4
|
+
Advanced Design System (ADS).
|
|
5
|
+
|
|
6
|
+
> [!IMPORTANT]
|
|
7
|
+
> This is a limited public alpha. Use disposable ADS workspaces and review the
|
|
8
|
+
> reported capability gates before relying on automation results.
|
|
9
|
+
> Keysight and ADS are trademarks of Keysight Technologies. This project is
|
|
10
|
+
> not affiliated with or endorsed by Keysight.
|
|
11
|
+
|
|
12
|
+
The first release is designed around three commands:
|
|
13
|
+
|
|
14
|
+
```text
|
|
15
|
+
pipx install ads-agent-bridge
|
|
16
|
+
ads-agent setup
|
|
17
|
+
ads-agent quickstart
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The current alpha slice implements cross-platform ADS installation discovery,
|
|
21
|
+
capability/support reporting, per-installation local documentation indexing,
|
|
22
|
+
DE/DDS add-on registration, and a headless minimal-AC quickstart with dataset
|
|
23
|
+
readback.
|
|
24
|
+
|
|
25
|
+
It does **not** currently claim a completed Momentum, RFPro, FEM, SIPro, or
|
|
26
|
+
PIPro workflow. Those lanes require separate solver-side acceptance evidence.
|
|
27
|
+
|
|
28
|
+
Official ADS documentation is never distributed with this package. Indexes
|
|
29
|
+
are built privately from documentation already installed on the user's
|
|
30
|
+
machine.
|
|
31
|
+
|
|
32
|
+
Set `ADS_AGENT_HOME` to place configuration, data, and caches under an explicit
|
|
33
|
+
directory. This is useful for isolated tests, remote servers, and systems where
|
|
34
|
+
the normal user cache location is not appropriate.
|
|
35
|
+
|
|
36
|
+
## Install and verify
|
|
37
|
+
|
|
38
|
+
Prerequisites:
|
|
39
|
+
|
|
40
|
+
- a locally licensed ADS installation;
|
|
41
|
+
- Python 3.10 or later for the `ads-agent` command;
|
|
42
|
+
- `pipx` (recommended) or an isolated virtual environment.
|
|
43
|
+
|
|
44
|
+
```console
|
|
45
|
+
pipx install ads-agent-bridge
|
|
46
|
+
ads-agent setup
|
|
47
|
+
ads-agent quickstart
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
When several ADS versions are found, interactive setup asks which one to use.
|
|
51
|
+
For an unattended or version-specific setup:
|
|
52
|
+
|
|
53
|
+
```console
|
|
54
|
+
ads-agent setup --ads-root /path/to/ADS2026_Update2 --non-interactive
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
A successful quickstart independently reports documentation, add-on,
|
|
58
|
+
workspace, circuit simulation, and dataset readback gates. It creates a new
|
|
59
|
+
disposable workspace and refuses to overwrite an existing path.
|
|
60
|
+
|
|
61
|
+
## Current commands
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
ads-agent instances scan [--ads-root PATH]
|
|
65
|
+
ads-agent instances list
|
|
66
|
+
ads-agent instances use INSTANCE_ID
|
|
67
|
+
ads-agent compatibility explain [--ads INSTANCE_ID]
|
|
68
|
+
ads-agent docs ensure [--ads INSTANCE_ID]
|
|
69
|
+
ads-agent docs status [--ads INSTANCE_ID]
|
|
70
|
+
ads-agent docs query QUERY [--ads INSTANCE_ID]
|
|
71
|
+
ads-agent setup [--ads-root PATH] [--non-interactive] [--config-dir PATH]
|
|
72
|
+
ads-agent quickstart [--ads INSTANCE_ID] [--workspace PATH] [--config-dir PATH]
|
|
73
|
+
ads-agent addon status
|
|
74
|
+
ads-agent bridge sessions
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Documentation queries stay on the local machine:
|
|
78
|
+
|
|
79
|
+
```console
|
|
80
|
+
ads-agent docs query "keysight.ads.de workspace" --limit 5
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The bridge listens only on localhost and uses a random token per session.
|
|
84
|
+
Arbitrary embedded Python and dynamic AEL calls are disabled unless ADS is
|
|
85
|
+
launched with `ADS_AGENT_UNSAFE=1` and the client command also includes
|
|
86
|
+
`--unsafe`.
|
|
87
|
+
|
|
88
|
+
On Windows, `setup` reads Keysight's per-version `eeenv/HOME` registry values
|
|
89
|
+
to locate the real `hpeesof/config` directory. Use `--config-dir` (or
|
|
90
|
+
`ADS_AGENT_ADS_CONFIG_DIR`) when maintaining separate ADS profiles.
|
|
91
|
+
|
|
92
|
+
On Linux, ADS Python may still require an available X display even though the
|
|
93
|
+
quickstart opens no ADS window. Set `DISPLAY` to the intended isolated display
|
|
94
|
+
before running it. `setup` edits only the current user's ADS add-on XML files,
|
|
95
|
+
creates timestamped backups, and preserves unrelated add-ons.
|
|
96
|
+
|
|
97
|
+
Stable support is targeted at ADS 2025 and later. ADS 2024 Update 2 is a
|
|
98
|
+
preview target; ADS 2023 Update 2 through ADS 2024 Update 1 are experimental.
|
|
99
|
+
Runtime capability probes, rather than version numbers alone, decide which
|
|
100
|
+
features are actually available.
|
|
101
|
+
|
|
102
|
+
## Remove the integration
|
|
103
|
+
|
|
104
|
+
```console
|
|
105
|
+
ads-agent addon uninstall
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The installer preserves unrelated ADS add-ons and creates timestamped XML
|
|
109
|
+
backups before changing an existing configuration.
|
|
110
|
+
|
|
111
|
+
## Development
|
|
112
|
+
|
|
113
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and the evidence-backed
|
|
114
|
+
[validation record](docs/VALIDATION_2026-08-05.md).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Security
|
|
2
|
+
|
|
3
|
+
Do not report security vulnerabilities through a public issue. Use GitHub's
|
|
4
|
+
private vulnerability reporting for this repository.
|
|
5
|
+
|
|
6
|
+
The product security boundary is localhost-only transport with a random token
|
|
7
|
+
per ADS session. Arbitrary Python or AEL execution will require explicit unsafe
|
|
8
|
+
mode and is not part of the default quickstart path.
|
|
9
|
+
|
|
10
|
+
Session JSON files contain bearer tokens. They are written to the local runtime
|
|
11
|
+
directory with restrictive permissions where supported. The public
|
|
12
|
+
`bridge sessions` command redacts tokens.
|
|
13
|
+
|
|
14
|
+
This alpha is intended for local ADS installations and disposable workspaces.
|
|
15
|
+
Do not expose bridge ports through a proxy, port forward, or public interface.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# v0.1 Release Contract
|
|
2
|
+
|
|
3
|
+
## Product promise
|
|
4
|
+
|
|
5
|
+
A new user can install one package, select the intended local ADS installation,
|
|
6
|
+
query that installation's private local documentation, and run one verified
|
|
7
|
+
circuit workflow without learning the internal adapter or plugin architecture.
|
|
8
|
+
|
|
9
|
+
## User path
|
|
10
|
+
|
|
11
|
+
```text
|
|
12
|
+
pipx install ads-agent-bridge
|
|
13
|
+
ads-agent setup
|
|
14
|
+
ads-agent quickstart
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`setup` must discover installed ADS instances, select one without silently
|
|
18
|
+
preferring the newest version, probe capabilities, install recoverable user
|
|
19
|
+
integration, and make documentation lookup immediately useful.
|
|
20
|
+
|
|
21
|
+
`quickstart` must report these gates independently:
|
|
22
|
+
|
|
23
|
+
1. documentation index;
|
|
24
|
+
2. documentation query;
|
|
25
|
+
3. add-on registration when the selected ADS supports Python add-ons;
|
|
26
|
+
4. disposable workspace creation;
|
|
27
|
+
5. circuit simulation;
|
|
28
|
+
6. dataset readback.
|
|
29
|
+
|
|
30
|
+
It passes only when all required gates pass.
|
|
31
|
+
|
|
32
|
+
## Support tiers
|
|
33
|
+
|
|
34
|
+
- ADS 2025 and later: stable target.
|
|
35
|
+
- ADS 2024 Update 2: preview target.
|
|
36
|
+
- ADS 2023 Update 2 through ADS 2024 Update 1: experimental target.
|
|
37
|
+
- Older versions: documentation-only when local docs can be discovered; no
|
|
38
|
+
live Python bridge promise.
|
|
39
|
+
|
|
40
|
+
Version is a starting hint. Runtime capability probes decide whether DE, DDS,
|
|
41
|
+
addons, AEL interoperability, headless automation, or EM routes are available.
|
|
42
|
+
|
|
43
|
+
## v0.1 release blockers
|
|
44
|
+
|
|
45
|
+
- clean wheel and offline wheelhouse installation;
|
|
46
|
+
- automatic dependency installation;
|
|
47
|
+
- multi-instance discovery and explicit selection;
|
|
48
|
+
- Windows and Linux setup/docs/bridge gates;
|
|
49
|
+
- resumable private documentation indexing;
|
|
50
|
+
- recoverable addon install, upgrade, and uninstall;
|
|
51
|
+
- localhost token-authenticated live bridge;
|
|
52
|
+
- disposable-workspace headless circuit simulation and dataset readback;
|
|
53
|
+
- one real two-port Momentum golden path;
|
|
54
|
+
- no vendor docs, private paths, or monorepo runtime imports.
|
|
55
|
+
|
|
56
|
+
## Non-blocking extensions
|
|
57
|
+
|
|
58
|
+
The full plugin platform, RFPro/FEM completeness, SIPro/PIPro, broad PDK
|
|
59
|
+
automation, AEL debugging, built-in SSH orchestration, and large example
|
|
60
|
+
catalogs do not block the first public beta.
|
|
61
|
+
|
|
62
|
+
## Evidence language
|
|
63
|
+
|
|
64
|
+
Use `discovered`, `indexed`, `installed`, `connected`, `created`, `saved`,
|
|
65
|
+
`reopened`, `simulated`, and `read_back` only when the corresponding observable
|
|
66
|
+
gate passed. Filesystem presence alone is not live ADS or solver evidence.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Validation record — 2026-08-05
|
|
2
|
+
|
|
3
|
+
## Outcome
|
|
4
|
+
|
|
5
|
+
`ads-agent-bridge 0.1.0a17` passes the minimum public core on Windows and
|
|
6
|
+
Linux. The alpha package is suitable for a limited public release that claims
|
|
7
|
+
installation discovery, private local documentation indexing, recoverable
|
|
8
|
+
DE/DDS add-on registration, authenticated localhost bridge connectivity, and
|
|
9
|
+
the minimal headless AC workflow.
|
|
10
|
+
|
|
11
|
+
The full v0.1 contract is not yet complete because the real two-port Momentum
|
|
12
|
+
golden path has not passed. No EM or RFPro solver-completion claim is made by
|
|
13
|
+
this record.
|
|
14
|
+
|
|
15
|
+
## Release artifact
|
|
16
|
+
|
|
17
|
+
- Wheel: `ads_agent_bridge-0.1.0a17-py3-none-any.whl`
|
|
18
|
+
- Source distribution: `ads_agent_bridge-0.1.0a17.tar.gz`
|
|
19
|
+
- Clean Python 3.10 installation: passed, including declared dependencies.
|
|
20
|
+
- `pip check`: no broken requirements.
|
|
21
|
+
- Unit tests: 18 passed.
|
|
22
|
+
- Wheel inspection: contains only the public package, metadata, and MIT
|
|
23
|
+
license; no documentation corpus, generated index, private path, host, or
|
|
24
|
+
monorepo runtime dependency was found.
|
|
25
|
+
|
|
26
|
+
## Linux acceptance
|
|
27
|
+
|
|
28
|
+
Target: ADS 2026 Update 2.1 with its bundled Python 3.13, using an isolated X
|
|
29
|
+
display, state directory, user profile, workspace, slot, and ports.
|
|
30
|
+
|
|
31
|
+
- Automatic installation discovery: passed.
|
|
32
|
+
- Local documentation roots: ADS, Python, AEL, and DDS discovered.
|
|
33
|
+
- Fast private index: 9,422 HTML pages indexed; repeat run reused the index.
|
|
34
|
+
- `setup`: passed, including isolated DE and DDS registration.
|
|
35
|
+
- Final a16 `quickstart`: passed all six reported gates.
|
|
36
|
+
- Circuit evidence: 30-line generated netlist; 31 dataset rows; columns
|
|
37
|
+
`freq`, `R1_v`, and `SRC1.i`; frequency range 1 Hz to 1 MHz.
|
|
38
|
+
- Live DE and DDS sessions: authenticated ping/status passed.
|
|
39
|
+
- Safe/unsafe boundary: arbitrary Python rejected by default and worked only
|
|
40
|
+
after explicit process and client opt-in.
|
|
41
|
+
- Project management: copied workspace open/readback passed.
|
|
42
|
+
- AEL interoperability: bounded function discovery and workspace refresh
|
|
43
|
+
passed.
|
|
44
|
+
- DDS: equation readback was valid with 31 complex samples.
|
|
45
|
+
- Headless route: separate workspace simulation and dataset readback passed.
|
|
46
|
+
- Cleanup: test ADS processes were terminated; pre-existing add-on XML files
|
|
47
|
+
were restored to their exact pre-test SHA-256 values.
|
|
48
|
+
|
|
49
|
+
## Windows acceptance
|
|
50
|
+
|
|
51
|
+
Stable-version headless matrix:
|
|
52
|
+
|
|
53
|
+
| ADS version | Support | Indexed pages | Quickstart | Dataset rows |
|
|
54
|
+
|---|---:|---:|---:|---:|
|
|
55
|
+
| 2026 Update 2 | stable | 9,422 | passed | 31 |
|
|
56
|
+
| 2026 Update 1 | stable | 8,825 | passed | 31 |
|
|
57
|
+
| 2025 Update 2 | stable | 7,649 | passed | 31 |
|
|
58
|
+
|
|
59
|
+
Additional Windows gates:
|
|
60
|
+
|
|
61
|
+
- Clean wheel installation under Python 3.10: passed.
|
|
62
|
+
- Multi-installation discovery found the three stable installations plus an
|
|
63
|
+
older ADS 2023 Update 1 installation without silently changing the default.
|
|
64
|
+
- ADS user configuration discovery followed Keysight's per-version
|
|
65
|
+
`eeenv/HOME` registry value instead of assuming `%USERPROFILE%`.
|
|
66
|
+
- Real isolated ADS 2026 Update 2 DE and DDS add-on startup: passed.
|
|
67
|
+
- New DE and DDS sessions used localhost, random tokens, separate profiles,
|
|
68
|
+
and the expected disposable workspace; ping/status passed.
|
|
69
|
+
- Public session listing redacted the token and reported only `has_token`;
|
|
70
|
+
authenticated requests continued to use the private session record.
|
|
71
|
+
- Add-on XML recovery: byte-identical SHA-256 values before and after the live
|
|
72
|
+
test.
|
|
73
|
+
- Test processes were terminated by exact new PID; the pre-existing user ADS
|
|
74
|
+
process set remained unchanged.
|
|
75
|
+
- The final quickstart did not write ADS `.cfg` files into the caller's
|
|
76
|
+
current directory.
|
|
77
|
+
|
|
78
|
+
## Older-version boundary
|
|
79
|
+
|
|
80
|
+
ADS 2023 Update 1 was discovered and `setup` degraded cleanly: missing local
|
|
81
|
+
HTML documentation was reported as `not_available`, and unsupported Python
|
|
82
|
+
add-on registration was skipped. Its bundled Python lacks `keysight.ads.de`,
|
|
83
|
+
so the circuit quickstart correctly failed. This is evidence for the current
|
|
84
|
+
unsupported boundary, not a failure of the stable ADS 2025+ claim.
|
|
85
|
+
|
|
86
|
+
## Remaining gates
|
|
87
|
+
|
|
88
|
+
1. Build and accept a distributable two-port Momentum fixture with solver-side
|
|
89
|
+
port, terminal status, result-artifact, and numeric S-parameter evidence.
|
|
90
|
+
2. Make the maintained RFPro/Momentum acceptance harness cross-platform; the
|
|
91
|
+
current external harness assumes the Windows `tools/python/python.exe`
|
|
92
|
+
layout and cannot validate a Linux solver run.
|
|
93
|
+
3. Run the ADS 2024 Update 2 preview and ADS 2023 Update 2 experimental lanes
|
|
94
|
+
on real installations before strengthening their support language.
|
|
95
|
+
4. Publishing to a public package index and creating a signed/tagged release
|
|
96
|
+
were not performed by this validation.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"""Create a DDS file and validate an ADS dataset through an equation.
|
|
2
|
+
|
|
3
|
+
Set ``WORKSPACE`` and ``DATASET`` in the DDS bridge namespace before running.
|
|
4
|
+
The final stdout line is a JSON acceptance record. This intentionally avoids
|
|
5
|
+
adding a plot, because raw complex data can open an interactive chooser.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import json
|
|
11
|
+
import traceback
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from keysight.ads import dds
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def json_safe(value):
|
|
18
|
+
if isinstance(value, complex):
|
|
19
|
+
return {"real": value.real, "imag": value.imag}
|
|
20
|
+
if isinstance(value, (str, int, float, bool)) or value is None:
|
|
21
|
+
return value
|
|
22
|
+
if isinstance(value, (list, tuple)):
|
|
23
|
+
return [json_safe(item) for item in value]
|
|
24
|
+
if isinstance(value, dict):
|
|
25
|
+
return {str(key): json_safe(item) for key, item in value.items()}
|
|
26
|
+
return repr(value)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def main() -> dict:
|
|
30
|
+
record = {"ok": False}
|
|
31
|
+
try:
|
|
32
|
+
workspace = Path(globals()["WORKSPACE"]).resolve()
|
|
33
|
+
dataset_path = Path(globals()["DATASET"]).resolve()
|
|
34
|
+
if not dataset_path.is_file():
|
|
35
|
+
raise FileNotFoundError(dataset_path)
|
|
36
|
+
dds.init_dds_path(workspace)
|
|
37
|
+
dds_file = dds.new_dds_file(dataset_path, workspace)
|
|
38
|
+
dds_file.add_dataset_alias("minimal_ac", str(dataset_path))
|
|
39
|
+
page = dds_file.pages[0]
|
|
40
|
+
page.name = "Minimal AC dataset"
|
|
41
|
+
equation = page.add_equation("node_voltage", "R1_v")
|
|
42
|
+
values = equation.variable.to_dataframe().values.tolist()
|
|
43
|
+
dds_name = "minimal_ac_readback.dds"
|
|
44
|
+
dds_path = workspace / dds_name
|
|
45
|
+
dds_file.save(dds_name, workspace)
|
|
46
|
+
record.update(
|
|
47
|
+
{
|
|
48
|
+
"ok": equation.status == "Valid" and len(values) > 0 and dds_path.is_file(),
|
|
49
|
+
"workspace": str(workspace),
|
|
50
|
+
"dataset_path": str(dataset_path),
|
|
51
|
+
"dds_path": str(dds_path),
|
|
52
|
+
"dds_exists": dds_path.is_file(),
|
|
53
|
+
"equation": equation.expression,
|
|
54
|
+
"equation_status": equation.status,
|
|
55
|
+
"row_count": len(values),
|
|
56
|
+
"values_preview": json_safe(values[:3]),
|
|
57
|
+
"dataset_aliases": dict(dds_file.dataset_aliases),
|
|
58
|
+
"is_dds_app": bool(dds.is_dds_app()),
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
except Exception as exc:
|
|
62
|
+
record.update({"error": repr(exc), "traceback": traceback.format_exc()})
|
|
63
|
+
return record
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
print(json.dumps(main(), ensure_ascii=False))
|