traceforge-pcb 1.0.0__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.
- traceforge_pcb-1.0.0/.gitignore +29 -0
- traceforge_pcb-1.0.0/CHANGELOG.md +66 -0
- traceforge_pcb-1.0.0/CONTRIBUTING.md +70 -0
- traceforge_pcb-1.0.0/LICENSE +21 -0
- traceforge_pcb-1.0.0/PKG-INFO +463 -0
- traceforge_pcb-1.0.0/README.md +374 -0
- traceforge_pcb-1.0.0/RELEASE.md +66 -0
- traceforge_pcb-1.0.0/benchmarks/SCORING.md +101 -0
- traceforge_pcb-1.0.0/benchmarks/designs/atmega32u4_usb.yaml +74 -0
- traceforge_pcb-1.0.0/benchmarks/designs/attiny_usbc.yaml +52 -0
- traceforge_pcb-1.0.0/benchmarks/designs/blinker555.yaml +27 -0
- traceforge_pcb-1.0.0/benchmarks/designs/tiny85_usb.yaml +162 -0
- traceforge_pcb-1.0.0/benchmarks/prices.yaml +28 -0
- traceforge_pcb-1.0.0/benchmarks/projects/edit-01-reverse-polarity/blinker555.kicad_pcb +2043 -0
- traceforge_pcb-1.0.0/benchmarks/projects/edit-01-reverse-polarity/blinker555.kicad_pro +110 -0
- traceforge_pcb-1.0.0/benchmarks/projects/edit-01-reverse-polarity/blinker555.kicad_sch +1168 -0
- traceforge_pcb-1.0.0/benchmarks/projects/edit-02-status-led/attiny_usbc.kicad_pcb +4183 -0
- traceforge_pcb-1.0.0/benchmarks/projects/edit-02-status-led/attiny_usbc.kicad_pro +112 -0
- traceforge_pcb-1.0.0/benchmarks/projects/edit-02-status-led/attiny_usbc.kicad_sch +2210 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-01-tiny85-usb/tiny85_usb.kicad_pcb +5222 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-01-tiny85-usb/tiny85_usb.kicad_pro +112 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-01-tiny85-usb/tiny85_usb.kicad_sch +3235 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-02-attiny-usbc/attiny_usbc.kicad_pcb +4054 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-02-attiny-usbc/attiny_usbc.kicad_pro +112 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-02-attiny-usbc/attiny_usbc.kicad_sch +2210 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-03-atmega32u4/atmega32u4_usb.kicad_pcb +7096 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-03-atmega32u4/atmega32u4_usb.kicad_pro +174 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-03-atmega32u4/atmega32u4_usb.kicad_sch +3290 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-04-blinker555/blinker555.kicad_pcb +1827 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-04-blinker555/blinker555.kicad_pro +110 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-04-blinker555/blinker555.kicad_sch +1114 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-05-sensor-node/sensor_node.kicad_pcb +5663 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-05-sensor-node/sensor_node.kicad_pro +275 -0
- traceforge_pcb-1.0.0/benchmarks/projects/review-05-sensor-node/sensor_node.kicad_sch +2023 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e01-555-blinker.yaml +29 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e02-ldo-breakout.yaml +27 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e03-usbc-power.yaml +27 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e04-bme280-breakout.yaml +27 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e05-attiny-blinker.yaml +29 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e06-usbc-ldo.yaml +28 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e07-mosfet-switch.yaml +27 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-e08-sht31-qwiic.yaml +28 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-h01-rp2040-4layer.yaml +43 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-h02-ft232h-hs.yaml +43 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-h03-stm32g4-buck.yaml +49 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-h04-usb2514-hub.yaml +42 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-h05-carrier-6layer.yaml +51 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m01-attiny85-usbc.yaml +47 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m02-atmega32u4-usb.yaml +43 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m03-buck-12v-5v.yaml +29 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m04-rs485.yaml +32 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m05-esp32c3.yaml +40 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m06-atmega328p-ch340.yaml +45 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m07-ch340-uart.yaml +37 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/build-m08-tp4056-charger.yaml +37 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/edit-01-reverse-polarity.yaml +25 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/edit-02-status-led.yaml +28 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/review-01-tiny85-usb.yaml +32 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/review-02-attiny-usbc.yaml +31 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/review-03-atmega32u4.yaml +38 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/review-04-blinker555.yaml +31 -0
- traceforge_pcb-1.0.0/benchmarks/tasks/review-05-sensor-node.yaml +25 -0
- traceforge_pcb-1.0.0/docs/RELEASE_NOTES_1.0.0.md +33 -0
- traceforge_pcb-1.0.0/docs/altium.md +56 -0
- traceforge_pcb-1.0.0/docs/app-design-spec.md +116 -0
- traceforge_pcb-1.0.0/docs/app-packaging.md +64 -0
- traceforge_pcb-1.0.0/docs/architecture.md +153 -0
- traceforge_pcb-1.0.0/docs/design-spec.md +321 -0
- traceforge_pcb-1.0.0/docs/features/README.md +16 -0
- traceforge_pcb-1.0.0/docs/features/layout-candidates.md +33 -0
- traceforge_pcb-1.0.0/docs/features/release-package.md +45 -0
- traceforge_pcb-1.0.0/docs/features/revision-diff.md +27 -0
- traceforge_pcb-1.0.0/docs/features/sarif-ci.md +38 -0
- traceforge_pcb-1.0.0/docs/features/viewer.md +26 -0
- traceforge_pcb-1.0.0/docs/firmware.md +57 -0
- traceforge_pcb-1.0.0/docs/hosting-threat-model.md +50 -0
- traceforge_pcb-1.0.0/docs/images/attiny_usbc_board.png +0 -0
- traceforge_pcb-1.0.0/docs/images/attiny_usbc_schematic.png +0 -0
- traceforge_pcb-1.0.0/docs/images/schematic-atmega32u4-usb.png +0 -0
- traceforge_pcb-1.0.0/docs/images/schematic-attiny-usbc.png +0 -0
- traceforge_pcb-1.0.0/docs/images/schematic-hub-mcu.png +0 -0
- traceforge_pcb-1.0.0/docs/images/schematic-hub-root.png +0 -0
- traceforge_pcb-1.0.0/docs/images/schematic-hub-usb.png +0 -0
- traceforge_pcb-1.0.0/docs/index.md +39 -0
- traceforge_pcb-1.0.0/docs/multilayer-plan.md +144 -0
- traceforge_pcb-1.0.0/docs/multilayer-results.md +362 -0
- traceforge_pcb-1.0.0/docs/multilayer.md +195 -0
- traceforge_pcb-1.0.0/docs/outline.md +76 -0
- traceforge_pcb-1.0.0/docs/roadmap.md +166 -0
- traceforge_pcb-1.0.0/docs/schematics.md +42 -0
- traceforge_pcb-1.0.0/docs/simulation.md +63 -0
- traceforge_pcb-1.0.0/docs/terminal-and-editors.md +63 -0
- traceforge_pcb-1.0.0/docs/tutorials/README.md +17 -0
- traceforge_pcb-1.0.0/docs/tutorials/carrier-6layer.md +64 -0
- traceforge_pcb-1.0.0/docs/tutorials/rp2040-4layer.md +69 -0
- traceforge_pcb-1.0.0/docs/tutorials/usb-hub.md +59 -0
- traceforge_pcb-1.0.0/examples/555_blinker/design.yaml +27 -0
- traceforge_pcb-1.0.0/examples/README.md +37 -0
- traceforge_pcb-1.0.0/examples/atmega32u4_usb/design.yaml +74 -0
- traceforge_pcb-1.0.0/examples/attiny_usbc/design.yaml +52 -0
- traceforge_pcb-1.0.0/examples/cm_carrier_6layer/.ci-skip +1 -0
- traceforge_pcb-1.0.0/examples/cm_carrier_6layer/design.yaml +163 -0
- traceforge_pcb-1.0.0/examples/large/hub_sensor/design.yaml +82 -0
- traceforge_pcb-1.0.0/examples/mcu_8layer/.ci-skip +1 -0
- traceforge_pcb-1.0.0/examples/mcu_8layer/design.yaml +120 -0
- traceforge_pcb-1.0.0/examples/rp2040_4layer/.ci-skip +1 -0
- traceforge_pcb-1.0.0/examples/rp2040_4layer/design.yaml +109 -0
- traceforge_pcb-1.0.0/examples/sim/rc_step.cir +5 -0
- traceforge_pcb-1.0.0/examples/sim/rectifier.cir +7 -0
- traceforge_pcb-1.0.0/examples/sim/sallen_key.cir +19 -0
- traceforge_pcb-1.0.0/examples/sourcing_demo/bom.csv +21 -0
- traceforge_pcb-1.0.0/examples/usb_hub_4layer/.ci-skip +1 -0
- traceforge_pcb-1.0.0/examples/usb_hub_4layer/design.yaml +114 -0
- traceforge_pcb-1.0.0/plugins/traceforge/.claude-plugin/plugin.json +7 -0
- traceforge_pcb-1.0.0/plugins/traceforge/.mcp.json +8 -0
- traceforge_pcb-1.0.0/plugins/traceforge/skills/traceforge-review/SKILL.md +16 -0
- traceforge_pcb-1.0.0/pyproject.toml +88 -0
- traceforge_pcb-1.0.0/scripts/ci-local.sh +32 -0
- traceforge_pcb-1.0.0/scripts/multilayer_baseline.py +154 -0
- traceforge_pcb-1.0.0/scripts/score_hard_tier.py +75 -0
- traceforge_pcb-1.0.0/scripts/speed_board.py +45 -0
- traceforge_pcb-1.0.0/src/traceforge/__init__.py +3 -0
- traceforge_pcb-1.0.0/src/traceforge/__main__.py +3 -0
- traceforge_pcb-1.0.0/src/traceforge/acp_server.py +570 -0
- traceforge_pcb-1.0.0/src/traceforge/agent.py +680 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/__init__.py +6 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/cfb.py +70 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/cli.py +60 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/model.py +163 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/outputs.py +24 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/pcb.py +301 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/project.py +328 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/schematic.py +400 -0
- traceforge_pcb-1.0.0/src/traceforge/altium/tools.py +166 -0
- traceforge_pcb-1.0.0/src/traceforge/approval.py +219 -0
- traceforge_pcb-1.0.0/src/traceforge/attachments.py +346 -0
- traceforge_pcb-1.0.0/src/traceforge/background.py +253 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/__init__.py +5 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/adapters.py +337 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/checks.py +410 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/cli.py +121 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/design.py +439 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/kicad.py +99 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/partscheck.py +159 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/review.py +100 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/runner.py +226 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/score.py +204 -0
- traceforge_pcb-1.0.0/src/traceforge/bench/tasks.py +102 -0
- traceforge_pcb-1.0.0/src/traceforge/chat.py +1185 -0
- traceforge_pcb-1.0.0/src/traceforge/checks.py +328 -0
- traceforge_pcb-1.0.0/src/traceforge/checks_sides.py +118 -0
- traceforge_pcb-1.0.0/src/traceforge/cli.py +2224 -0
- traceforge_pcb-1.0.0/src/traceforge/clipboard.py +107 -0
- traceforge_pcb-1.0.0/src/traceforge/config.py +299 -0
- traceforge_pcb-1.0.0/src/traceforge/context.py +276 -0
- traceforge_pcb-1.0.0/src/traceforge/design/__init__.py +1 -0
- traceforge_pcb-1.0.0/src/traceforge/design/constraints.py +397 -0
- traceforge_pcb-1.0.0/src/traceforge/design/generate.py +1789 -0
- traceforge_pcb-1.0.0/src/traceforge/design/outline.py +905 -0
- traceforge_pcb-1.0.0/src/traceforge/design/schematic_layout.py +932 -0
- traceforge_pcb-1.0.0/src/traceforge/design/schematic_lint.py +329 -0
- traceforge_pcb-1.0.0/src/traceforge/design/schematic_route.py +207 -0
- traceforge_pcb-1.0.0/src/traceforge/design/sheets.py +854 -0
- traceforge_pcb-1.0.0/src/traceforge/design/sides.py +328 -0
- traceforge_pcb-1.0.0/src/traceforge/design/spec.py +462 -0
- traceforge_pcb-1.0.0/src/traceforge/design/specsheet.py +2351 -0
- traceforge_pcb-1.0.0/src/traceforge/design/specsheet_render.py +183 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/__init__.py +109 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/keys.py +90 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/project.py +443 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/review.py +20 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/server.py +1277 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/static/app.css +223 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/static/app.js +683 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/static/highlight.js +77 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/static/index.html +89 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/static/md.js +90 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/static/viewer.js +213 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/symbols.py +212 -0
- traceforge_pcb-1.0.0/src/traceforge/desktop/update.py +65 -0
- traceforge_pcb-1.0.0/src/traceforge/diagnostics.py +67 -0
- traceforge_pcb-1.0.0/src/traceforge/errata.py +219 -0
- traceforge_pcb-1.0.0/src/traceforge/fab.py +108 -0
- traceforge_pcb-1.0.0/src/traceforge/fab_layers.py +44 -0
- traceforge_pcb-1.0.0/src/traceforge/features/__init__.py +6 -0
- traceforge_pcb-1.0.0/src/traceforge/features/candidates.py +117 -0
- traceforge_pcb-1.0.0/src/traceforge/features/cli.py +200 -0
- traceforge_pcb-1.0.0/src/traceforge/features/package.py +433 -0
- traceforge_pcb-1.0.0/src/traceforge/features/revdiff.py +224 -0
- traceforge_pcb-1.0.0/src/traceforge/features/sarif.py +145 -0
- traceforge_pcb-1.0.0/src/traceforge/features/viewer.py +265 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/__init__.py +3 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/cli.py +174 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/drivers.py +372 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/drivers_data.py +256 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/mcus.py +177 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/netlist.py +55 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/pinmap.py +296 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/scaffold.py +466 -0
- traceforge_pcb-1.0.0/src/traceforge/firmware/toolchain.py +262 -0
- traceforge_pcb-1.0.0/src/traceforge/hooks.py +237 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/__init__.py +0 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/cli.py +519 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/diffpair.py +174 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/edgegeom.py +191 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/edit.py +405 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/escape.py +1410 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/formats.py +1073 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/impedance.py +320 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/install.py +75 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/libraries.py +490 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/models3d.py +942 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/outputs.py +81 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/pcb.py +787 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/planes.py +1242 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/project.py +136 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/route.py +2698 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/routegeom.py +164 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/schematic.py +268 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/sides.py +34 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad/stackup.py +424 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/__init__.py +12 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/actions.py +92 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/cli.py +66 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/client.py +86 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/context.py +257 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/discovery.py +81 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/install.py +203 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/overlay.py +60 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/payload/action_plugin.py +65 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/payload/ipc_main.py +42 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/payload/plugin.json +90 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/payload/requirements.txt +1 -0
- traceforge_pcb-1.0.0/src/traceforge/kicad_plugin/views.py +202 -0
- traceforge_pcb-1.0.0/src/traceforge/langchain.py +57 -0
- traceforge_pcb-1.0.0/src/traceforge/local.py +580 -0
- traceforge_pcb-1.0.0/src/traceforge/mcp_server.py +304 -0
- traceforge_pcb-1.0.0/src/traceforge/models.py +310 -0
- traceforge_pcb-1.0.0/src/traceforge/next_steps.py +110 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/__init__.py +52 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/alternates.py +488 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/bom.py +423 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/brief.py +705 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/catalog.py +297 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/cli_sourcing.py +156 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/data/duty_rates.yaml +37 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/data/hs_codes.yaml +103 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/datasheet.py +278 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/fx.py +100 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/model.py +185 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/net.py +187 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/offers.py +46 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/packages.py +397 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/pinout.py +714 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/providers/__init__.py +17 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/providers/base.py +100 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/providers/jlc.py +364 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/providers/keyed.py +661 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/report.py +508 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/supply.py +330 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/verify.py +455 -0
- traceforge_pcb-1.0.0/src/traceforge/parts/web.py +575 -0
- traceforge_pcb-1.0.0/src/traceforge/plans.py +70 -0
- traceforge_pcb-1.0.0/src/traceforge/preferences.py +127 -0
- traceforge_pcb-1.0.0/src/traceforge/prices.py +130 -0
- traceforge_pcb-1.0.0/src/traceforge/prices.yaml +28 -0
- traceforge_pcb-1.0.0/src/traceforge/prompts/__init__.py +54 -0
- traceforge_pcb-1.0.0/src/traceforge/prompts/system.md +103 -0
- traceforge_pcb-1.0.0/src/traceforge/providers.py +764 -0
- traceforge_pcb-1.0.0/src/traceforge/remote/__init__.py +33 -0
- traceforge_pcb-1.0.0/src/traceforge/remote/client.py +422 -0
- traceforge_pcb-1.0.0/src/traceforge/remote/oidc.py +240 -0
- traceforge_pcb-1.0.0/src/traceforge/remote/orgs.py +510 -0
- traceforge_pcb-1.0.0/src/traceforge/remote/server.py +690 -0
- traceforge_pcb-1.0.0/src/traceforge/remote/store.py +100 -0
- traceforge_pcb-1.0.0/src/traceforge/review_changes.py +187 -0
- traceforge_pcb-1.0.0/src/traceforge/routing.py +99 -0
- traceforge_pcb-1.0.0/src/traceforge/runtime.py +435 -0
- traceforge_pcb-1.0.0/src/traceforge/sessions.py +324 -0
- traceforge_pcb-1.0.0/src/traceforge/sexpr.py +279 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/__init__.py +17 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/acmath.py +234 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/circuit.py +499 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/cli.py +162 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/engine.py +172 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/ltspice.py +175 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/measure.py +123 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/models.py +76 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/project.py +218 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/rawfile.py +123 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/results.py +298 -0
- traceforge_pcb-1.0.0/src/traceforge/sim/tune.py +172 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_commands.py +165 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/circuit-simulation/SKILL.md +30 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/compliance-review/SKILL.md +51 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/design-review/SKILL.md +47 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/errata-hunt/SKILL.md +30 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/firmware/SKILL.md +26 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/power-budget/SKILL.md +27 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/release-package/SKILL.md +29 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/sourcing-brief/SKILL.md +24 -0
- traceforge_pcb-1.0.0/src/traceforge/skill_library/thermal-review/SKILL.md +15 -0
- traceforge_pcb-1.0.0/src/traceforge/skills.py +131 -0
- traceforge_pcb-1.0.0/src/traceforge/thermal.py +557 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/__init__.py +48 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/agent_tools.py +213 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/base.py +303 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/batch.py +155 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/connections.py +245 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/files.py +777 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/firmware_tools.py +218 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/kicad_tools.py +1072 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/models3d_tools.py +141 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/parts_tools.py +473 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/processes.py +246 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/review_tools.py +178 -0
- traceforge_pcb-1.0.0/src/traceforge/tools/sim_tools.py +230 -0
- traceforge_pcb-1.0.0/src/traceforge/tui.py +620 -0
- traceforge_pcb-1.0.0/src/traceforge/updates.py +124 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/__init__.py +77 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/builtins.py +1091 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/circuits.py +1240 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/config.py +410 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/default.yaml +113 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/design.py +191 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/explain.py +112 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/grounding.py +169 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/ipc2221.py +350 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/multilayer.py +805 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/netmodel.py +261 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/partcheck.py +472 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/report.py +280 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/review.py +322 -0
- traceforge_pcb-1.0.0/src/traceforge/validate/runner.py +662 -0
- traceforge_pcb-1.0.0/src/traceforge/workspace.py +171 -0
- traceforge_pcb-1.0.0/tests/__init__.py +0 -0
- traceforge_pcb-1.0.0/tests/altium_builder.py +342 -0
- traceforge_pcb-1.0.0/tests/conftest.py +162 -0
- traceforge_pcb-1.0.0/tests/escape_boards.py +279 -0
- traceforge_pcb-1.0.0/tests/fake_openai_server.py +158 -0
- traceforge_pcb-1.0.0/tests/fixtures/altium/README.md +19 -0
- traceforge_pcb-1.0.0/tests/fixtures/bench/cp_task1.net +528 -0
- traceforge_pcb-1.0.0/tests/fixtures/cp_task1/attiny85_usbc.kicad_pcb +5276 -0
- traceforge_pcb-1.0.0/tests/fixtures/cp_task1/attiny85_usbc.kicad_pro +251 -0
- traceforge_pcb-1.0.0/tests/fixtures/cp_task1/attiny85_usbc.kicad_sch +1645 -0
- traceforge_pcb-1.0.0/tests/fixtures/datasheets/ams1117_sot223.txt +56 -0
- traceforge_pcb-1.0.0/tests/fixtures/datasheets/attiny85_soic8.txt +50 -0
- traceforge_pcb-1.0.0/tests/fixtures/datasheets/usbc_receptacle_16p.txt +16 -0
- traceforge_pcb-1.0.0/tests/fixtures/esp32s3_cam.yaml +41 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/SOURCES.txt +16 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/reports/drc-v10.json +37 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/reports/drc-v8.json +43 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/reports/drc-v9.json +44 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/reports/erc-v9.json +43 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/component_classes.kicad_pcb +3875 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/footprints/Connector_USB.pretty/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.kicad_mod +310 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/footprints/Package_DIP.pretty/DIP-8_W7.62mm.kicad_mod +234 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/footprints/Resistor_SMD.pretty/R_0805_2012Metric.kicad_mod +112 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/issue25107.kicad_pcb +713 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/issue25107.kicad_sch +656 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/issue25670.kicad_pcb +1887 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/keepout_self_exclude.kicad_pcb +888 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/symbols/Device.kicad_symdir/R.kicad_sym +145 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/symbols/Timer.kicad_symdir/NE555D.kicad_sym +251 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/symbols/Timer.kicad_symdir/NE555P.kicad_sym +86 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/symbols/power.kicad_symdir/GND.kicad_sym +120 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/symbols/power.kicad_symdir/PWR_FLAG.kicad_sym +120 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/symbols/power.kicad_symdir/VCC.kicad_sym +144 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/variant_test.kicad_pcb +1185 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v10/variant_test.kicad_sch +510 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/ecc83-pp.kicad_pcb +6286 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/ecc83-pp.kicad_pro +618 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/ecc83-pp.kicad_sch +3519 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/footprints/Connector_USB.pretty/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.kicad_mod +321 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/footprints/Package_DIP.pretty/DIP-8_W7.62mm.kicad_mod +304 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/footprints/Resistor_SMD.pretty/R_0805_2012Metric.kicad_mod +203 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/symbols/Device.kicad_sym +431 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/symbols/Timer.kicad_sym +485 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v8/symbols/power.kicad_sym +317 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/ecc83-pp.kicad_pcb +6156 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/ecc83-pp.kicad_pro +644 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/ecc83-pp.kicad_sch +3545 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/footprints/Connector_USB.pretty/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.kicad_mod +309 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/footprints/Package_DIP.pretty/DIP-8_W7.62mm.kicad_mod +217 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/footprints/Resistor_SMD.pretty/R_0805_2012Metric.kicad_mod +100 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/symbols/Device.kicad_sym +451 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/symbols/Timer.kicad_sym +301 -0
- traceforge_pcb-1.0.0/tests/fixtures/kicad/v9/symbols/power.kicad_sym +332 -0
- traceforge_pcb-1.0.0/tests/fixtures/outline/castellated.yaml +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/outline/l_shape.yaml +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/outline/panel.yaml +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/outline/panel_vscore.yaml +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/outline/round.yaml +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/outline/slot.yaml +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/ddg_challenge.html +178 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/digikey_error_429.json +7 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/digikey_keyword_ATMEGA32U4-AU.json +103 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/digikey_keyword_STM32G431CBU6.json +139 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/digikey_keyword_none.json +6 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/digikey_token.json +6 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C2286.json +256 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C24853.json +5 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C25804.json +221 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C2765186.json +256 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C2939374.json +256 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C45783.json +255 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C6186.json +295 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C7171.json +211 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C72043.json +305 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_detail_C89852.json +251 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlc_search_attiny85-20s.json +1312 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlcsearch_capacitors_100n_0603.json +1 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlcsearch_resistors_10k_0603.json +88 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/jlcsearch_resistors_10k_0603_instock.json +1 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C2286.json +296 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C24853.json +6 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C25804.json +233 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C2765186.json +299 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C2939374.json +289 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C7171.json +233 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/lcsc_C89852.json +299 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/mouser_error_invalid_key.json +13 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/mouser_error_toomany.json +13 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/mouser_partnumber_ATMEGA32U4-AU.json +69 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/mouser_partnumber_STM32G431CBU6.json +74 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/mouser_partnumber_none.json +8 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/mouser_price_formats.json +59 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/nexar_error_limit.json +9 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/nexar_supsearchmpn_STM32G431CBU6.json +154 -0
- traceforge_pcb-1.0.0/tests/fixtures/parts/nexar_token.json +6 -0
- traceforge_pcb-1.0.0/tests/fixtures/review_board/sensor_node.kicad_pcb +5663 -0
- traceforge_pcb-1.0.0/tests/fixtures/review_board/sensor_node.kicad_pro +275 -0
- traceforge_pcb-1.0.0/tests/fixtures/review_board/sensor_node.kicad_sch +2023 -0
- traceforge_pcb-1.0.0/tests/fixtures/tiny85_usb.yaml +162 -0
- traceforge_pcb-1.0.0/tests/test_acp.py +194 -0
- traceforge_pcb-1.0.0/tests/test_agent.py +133 -0
- traceforge_pcb-1.0.0/tests/test_agent_context.py +133 -0
- traceforge_pcb-1.0.0/tests/test_altium.py +305 -0
- traceforge_pcb-1.0.0/tests/test_batch_and_output.py +185 -0
- traceforge_pcb-1.0.0/tests/test_bench.py +492 -0
- traceforge_pcb-1.0.0/tests/test_board.py +101 -0
- traceforge_pcb-1.0.0/tests/test_chat_branches.py +112 -0
- traceforge_pcb-1.0.0/tests/test_chat_cli.py +94 -0
- traceforge_pcb-1.0.0/tests/test_cli_mcp.py +103 -0
- traceforge_pcb-1.0.0/tests/test_cli_usability.py +183 -0
- traceforge_pcb-1.0.0/tests/test_connections.py +57 -0
- traceforge_pcb-1.0.0/tests/test_constraints.py +229 -0
- traceforge_pcb-1.0.0/tests/test_design.py +329 -0
- traceforge_pcb-1.0.0/tests/test_desktop.py +486 -0
- traceforge_pcb-1.0.0/tests/test_desktop_app.py +161 -0
- traceforge_pcb-1.0.0/tests/test_desktop_smoke.py +138 -0
- traceforge_pcb-1.0.0/tests/test_diffpair.py +51 -0
- traceforge_pcb-1.0.0/tests/test_escape.py +428 -0
- traceforge_pcb-1.0.0/tests/test_features_candidates.py +93 -0
- traceforge_pcb-1.0.0/tests/test_features_cli.py +107 -0
- traceforge_pcb-1.0.0/tests/test_features_package_sarif.py +225 -0
- traceforge_pcb-1.0.0/tests/test_features_viewer_diff.py +150 -0
- traceforge_pcb-1.0.0/tests/test_file_tools.py +220 -0
- traceforge_pcb-1.0.0/tests/test_firmware.py +373 -0
- traceforge_pcb-1.0.0/tests/test_foundations.py +433 -0
- traceforge_pcb-1.0.0/tests/test_gemini_provider.py +354 -0
- traceforge_pcb-1.0.0/tests/test_grounding.py +65 -0
- traceforge_pcb-1.0.0/tests/test_impedance.py +95 -0
- traceforge_pcb-1.0.0/tests/test_install.py +48 -0
- traceforge_pcb-1.0.0/tests/test_kicad_plugin.py +737 -0
- traceforge_pcb-1.0.0/tests/test_kicad_reports.py +104 -0
- traceforge_pcb-1.0.0/tests/test_kicad_versions.py +479 -0
- traceforge_pcb-1.0.0/tests/test_local_provider.py +144 -0
- traceforge_pcb-1.0.0/tests/test_models3d.py +653 -0
- traceforge_pcb-1.0.0/tests/test_multilayer_checks.py +327 -0
- traceforge_pcb-1.0.0/tests/test_multilayer_integration.py +95 -0
- traceforge_pcb-1.0.0/tests/test_oidc.py +214 -0
- traceforge_pcb-1.0.0/tests/test_openai_provider.py +145 -0
- traceforge_pcb-1.0.0/tests/test_orgs.py +214 -0
- traceforge_pcb-1.0.0/tests/test_outline.py +149 -0
- traceforge_pcb-1.0.0/tests/test_pairs_groups.py +116 -0
- traceforge_pcb-1.0.0/tests/test_parts.py +542 -0
- traceforge_pcb-1.0.0/tests/test_parts_keyed.py +264 -0
- traceforge_pcb-1.0.0/tests/test_parts_sourcing.py +411 -0
- traceforge_pcb-1.0.0/tests/test_partsguard.py +254 -0
- traceforge_pcb-1.0.0/tests/test_planes.py +295 -0
- traceforge_pcb-1.0.0/tests/test_prices.py +115 -0
- traceforge_pcb-1.0.0/tests/test_remote.py +171 -0
- traceforge_pcb-1.0.0/tests/test_review_quality.py +185 -0
- traceforge_pcb-1.0.0/tests/test_route.py +90 -0
- traceforge_pcb-1.0.0/tests/test_route_layers.py +92 -0
- traceforge_pcb-1.0.0/tests/test_router_repair.py +119 -0
- traceforge_pcb-1.0.0/tests/test_routing.py +55 -0
- traceforge_pcb-1.0.0/tests/test_schematic.py +108 -0
- traceforge_pcb-1.0.0/tests/test_sexpr.py +48 -0
- traceforge_pcb-1.0.0/tests/test_sides.py +537 -0
- traceforge_pcb-1.0.0/tests/test_sim_tools.py +399 -0
- traceforge_pcb-1.0.0/tests/test_specsheet.py +339 -0
- traceforge_pcb-1.0.0/tests/test_specsheet_tool.py +28 -0
- traceforge_pcb-1.0.0/tests/test_stackup.py +138 -0
- traceforge_pcb-1.0.0/tests/test_tools.py +103 -0
- traceforge_pcb-1.0.0/tests/test_tui.py +281 -0
- traceforge_pcb-1.0.0/tests/test_tutorials.py +58 -0
- traceforge_pcb-1.0.0/tests/test_validate.py +62 -0
- traceforge_pcb-1.0.0/tests/test_validate_checks.py +239 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
.venv/
|
|
4
|
+
venv/
|
|
5
|
+
build/
|
|
6
|
+
dist/
|
|
7
|
+
*.egg-info/
|
|
8
|
+
.pytest_cache/
|
|
9
|
+
.ruff_cache/
|
|
10
|
+
.coverage
|
|
11
|
+
htmlcov/
|
|
12
|
+
|
|
13
|
+
# traceforge working files
|
|
14
|
+
.traceforge/scratch/
|
|
15
|
+
.traceforge/reports/
|
|
16
|
+
|
|
17
|
+
# KiCad backups and caches
|
|
18
|
+
*-backups/
|
|
19
|
+
*.kicad_prl
|
|
20
|
+
fp-info-cache
|
|
21
|
+
*.lck
|
|
22
|
+
_autosave-*
|
|
23
|
+
|
|
24
|
+
# outputs generated from the examples
|
|
25
|
+
examples/**/*.kicad_pro
|
|
26
|
+
examples/**/*.kicad_sch
|
|
27
|
+
examples/**/*.kicad_pcb
|
|
28
|
+
examples/**/outputs/
|
|
29
|
+
.venv
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes. Versions follow semantic versioning. Dates are release dates.
|
|
4
|
+
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- Installing the `mcp` extra (and so `.[dev]`) on Intel Macs no longer tries to build `cryptography`
|
|
9
|
+
from source (which needs Rust, OpenSSL and pkg-config): it stays on 48.x, the last release with
|
|
10
|
+
x86_64 macOS wheels.
|
|
11
|
+
|
|
12
|
+
## 1.0.0
|
|
13
|
+
|
|
14
|
+
First public release. The package is published on PyPI as `traceforge-pcb`; the import
|
|
15
|
+
package and the command are still `traceforge`.
|
|
16
|
+
|
|
17
|
+
### Agent and interfaces
|
|
18
|
+
- Terminal agent (`traceforge`, `run`, `plan`, `ask`) with approvals, saved threads, skills, hooks,
|
|
19
|
+
background commands, image attachments, context compaction and cost metering.
|
|
20
|
+
- Providers: Anthropic, OpenAI (Responses API), Gemini and local OpenAI-compatible servers; model
|
|
21
|
+
routing by kind of work.
|
|
22
|
+
- MCP server for editors and agent hosts, a plugin for Claude Code, an ACP server (Zed and others),
|
|
23
|
+
a full-screen terminal UI, a LangChain Runnable, and a hosted mode with organisations, roles,
|
|
24
|
+
pooled quotas, spend caps, an audit log and OIDC sign-in.
|
|
25
|
+
- Desktop app (local server, board viewer, editor, update check, PyInstaller packaging) and a KiCad
|
|
26
|
+
plugin (action plugin for KiCad 7/8, IPC plugin for KiCad 9/10).
|
|
27
|
+
|
|
28
|
+
### Design, schematic and board
|
|
29
|
+
- Design spec compiler: parts, footprints and pin-to-net maps become a KiCad project with a grouped,
|
|
30
|
+
wired schematic (power symbols, hierarchical sheets, layout linter) and a board with outline, net
|
|
31
|
+
classes and fab rules. Writes KiCad 7, 8, 9 and 10 files; reads KiCad 6 to 10 and Altium projects.
|
|
32
|
+
- Placement by pins and function (decoupling, crystals, series parts, edge connectors, both board sides),
|
|
33
|
+
shaped outlines, cut-outs, slots, castellated edges, mounting holes, fiducials and panels.
|
|
34
|
+
- Router: any layer count, per-layer roles and directions, inner signal layers, negotiated rip-up,
|
|
35
|
+
off-grid fine-pitch escapes, coupled differential pairs with length tuning and per-layer
|
|
36
|
+
impedance widths, length-matching groups, power and ground planes (split planes, pad vias,
|
|
37
|
+
stitching, island check, fill and re-check), dense-package fan-out (QFN, QFP, BGA, fine-pitch connectors),
|
|
38
|
+
net-class layer limits and keep-outs, a per-net report with impedance and reference planes.
|
|
39
|
+
- Stackup model with JLCPCB presets and a closed-form impedance calculator.
|
|
40
|
+
|
|
41
|
+
### Verification and outputs
|
|
42
|
+
- KiCad ERC and DRC with schematic parity, built-in fab-limit, courtyard, edge-connector, silkscreen and
|
|
43
|
+
routing checks, multi-layer checks (plane gaps and splits, return vias, via stubs, balance, rings,
|
|
44
|
+
fab stackup), deterministic circuit checks, parts verification gate against datasheet pinouts.
|
|
45
|
+
- `traceforge validate`: staged pre-fab review with grounded findings, JUnit output and a fix prompt.
|
|
46
|
+
- Gerbers, drill, BOM (with supplier merge, alternates and sourcing brief), placement file, netlist,
|
|
47
|
+
SVG renders, 3D model assignment, SPICE simulation (ngspice, LTspice export), firmware scaffolds
|
|
48
|
+
from the pin map.
|
|
49
|
+
- `traceforge bench`: an open benchmark (build, review and edit tasks) with a neutral scorer.
|
|
50
|
+
|
|
51
|
+
### Known limits
|
|
52
|
+
- Not every multi-layer example routes to zero open connections with zero DRC errors. Measured on KiCad 7
|
|
53
|
+
with the examples' finer clearance rules: `usb_hub_4layer` 0 open but one placer courtyard overlap;
|
|
54
|
+
`rp2040_4layer` 2 to 3 open (the +1V1 pin of the 0.4 mm QFN is boxed in); `cm_carrier_6layer` 4 open (three
|
|
55
|
+
nets cross the 0.5 mm connector fan-out band); `mcu_8layer` about 24 open (the interior balls of the 0.8 mm
|
|
56
|
+
BGA need via-in-pad, an extra-cost fab option, or finer rules than through vias allow). These four are
|
|
57
|
+
skipped in the example gate (`.ci-skip`); the numbers and causes are in `docs/multilayer-results.md`.
|
|
58
|
+
Pair lengths and skew in the route report are measured on the written board.
|
|
59
|
+
- Through vias only: no blind or buried vias, no microvias. Impedance is from closed-form formulas, not a
|
|
60
|
+
field solver; the fab's own stackup has the final say. Length matching covers pairs and groups, not
|
|
61
|
+
DDR timing budgets.
|
|
62
|
+
- Schematic labels can still overlap power-symbol text on dense ICs (`docs/schematics.md`).
|
|
63
|
+
- JLCPCB 4/6/8 layer limits and bottom-side placement-file rotation were not verified against the fab.
|
|
64
|
+
- Verified on Linux with KiCad 7, 8, 9 and 10. macOS, Windows and Python 3.14 have not been run in
|
|
65
|
+
full; the KiCad plugin has not been run in a live KiCad GUI. KiCad 7 runs with reduced checks.
|
|
66
|
+
- No head-to-head benchmark scores are published.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for helping. Bug reports with a small KiCad project that reproduces the problem are the most useful thing you can send. The documentation index is [docs/index.md](docs/index.md).
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/ashutosh-rath02/traceforge && cd traceforge
|
|
9
|
+
python -m venv .venv && . .venv/bin/activate
|
|
10
|
+
pip install -e ".[dev]"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The distribution is published as `traceforge-pcb`; the package and the command are `traceforge`. Python 3.11 or newer.
|
|
14
|
+
|
|
15
|
+
Install KiCad with its standard symbol and footprint libraries to run the full test suite; tests that need KiCad skip themselves otherwise. Traceforge supports KiCad 7, 8, 9 and 10 and the suite is expected to pass on all four.
|
|
16
|
+
|
|
17
|
+
## Testing
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pytest -q # your local KiCad; the full suite takes about 15 minutes
|
|
21
|
+
pytest -q tests/test_route.py # one file while you work
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Run the suite on every KiCad version you did not install with the official images (needs Docker; each run takes
|
|
25
|
+
about 15 to 20 minutes and installs the package fresh inside the container):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
scripts/ci-local.sh 8.0 # also 9.0 and 10.0; extra arguments go to pytest
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
The script runs the full test suite, then builds every example and runs KiCad ERC on it (examples with a
|
|
32
|
+
`.ci-skip` file are skipped: they do not yet route to zero unrouted nets, see
|
|
33
|
+
[docs/multilayer-results.md](docs/multilayer-results.md)). If `docker info` fails, start the daemon first
|
|
34
|
+
(`dockerd`). The hosted CI workflows in `.github/workflows/` run the same jobs plus macOS and Windows installs;
|
|
35
|
+
those two have not produced results yet, so a change that touches paths, process launching or the desktop app
|
|
36
|
+
should be tried on those systems by hand if you can.
|
|
37
|
+
|
|
38
|
+
Notes:
|
|
39
|
+
|
|
40
|
+
- The ACP server needs `agent-client-protocol` below 1.0 (the 1.0 release changed the module API); `pyproject.toml`
|
|
41
|
+
caps it. If `tests/test_acp.py` fails with `module acp has no attribute ...`, you have 1.0 installed:
|
|
42
|
+
`pip install "agent-client-protocol>=0.12,<1.0"`.
|
|
43
|
+
- Agent tests use the scripted `FakeClient` in `tests/conftest.py`, so no test calls a real API and none needs a key.
|
|
44
|
+
- Router changes are measured, not eyeballed: `scripts/multilayer_baseline.py` routes the multi-layer examples and
|
|
45
|
+
reports unrouted connections and KiCad DRC errors, `scripts/speed_board.py out.yaml` writes the synthetic 150-net
|
|
46
|
+
board for timing, and `scripts/score_hard_tier.py --route --offline` scores the hard-tier reference boards. Routing
|
|
47
|
+
is time-limited, so compare several runs before claiming an improvement, and never weaken a check or a scoring rule
|
|
48
|
+
to make a number go green.
|
|
49
|
+
|
|
50
|
+
## Before opening a pull request
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
ruff format .
|
|
54
|
+
ruff check .
|
|
55
|
+
pytest -q
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- Keep changes focused, and add or update tests for behaviour changes.
|
|
59
|
+
- Generated KiCad output must still pass KiCad's netlist export and DRC; `tests/test_board.py` checks this for the examples, `tests/test_tutorials.py` runs the offline commands of the tutorials.
|
|
60
|
+
- If you change the system prompt or tool descriptions, describe what behaviour you expect to change and how you checked it.
|
|
61
|
+
- If you change a spec option, update [docs/multilayer.md](docs/multilayer.md) or the relevant page in `docs/`, and the schema in `src/traceforge/design/spec.py`.
|
|
62
|
+
|
|
63
|
+
## Good first areas
|
|
64
|
+
|
|
65
|
+
- Router: dense-connector escape (the open connections on `cm_carrier_6layer`, `rp2040_4layer` and `usb_hub_4layer`), return vias next to a pair's layer changes, plane-gap-aware pair routing.
|
|
66
|
+
- Schematics: label placement next to dense ICs ([docs/schematics.md](docs/schematics.md)).
|
|
67
|
+
- Placement: rotation search, keeping decoupling capacitors next to their pins.
|
|
68
|
+
- Fab profiles: more manufacturers, with links to their published capabilities; checking the JLCPCB 4, 6 and 8 layer limits against a real order.
|
|
69
|
+
- Validation: more deterministic checks (fiducials, test points, thermal relief, acid traps).
|
|
70
|
+
- Platforms: running the test suite and the desktop app on macOS and Windows, and the KiCad plugin inside a live KiCad window.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Traceforge 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.
|