@huaqiu/dsh-hqsch 0.4.8

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 (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +43 -0
  3. package/cordis.patch.yml +13 -0
  4. package/lib/index.d.mts +98 -0
  5. package/lib/index.mjs +159 -0
  6. package/package.json +40 -0
  7. package/skills/hqsch-scenario-b/AGENTS.md +209 -0
  8. package/skills/hqsch-scenario-b/CLAUDE.md +209 -0
  9. package/skills/hqsch-scenario-b/INSTALL.md +140 -0
  10. package/skills/hqsch-scenario-b/SKILL.md +107 -0
  11. package/skills/hqsch-scenario-b/SYSTEM-PROMPT.md +209 -0
  12. package/skills/hqsch-scenario-b/docs/circuit-pattern-layout.md +304 -0
  13. package/skills/hqsch-scenario-b/docs/editing-a-circuit.md +167 -0
  14. package/skills/hqsch-scenario-b/docs/part-search.md +244 -0
  15. package/skills/hqsch-scenario-b/docs/placement-conventions.md +714 -0
  16. package/skills/hqsch-scenario-b/docs/property-conventions.md +225 -0
  17. package/skills/hqsch-scenario-b/docs/quickstart.md +99 -0
  18. package/skills/hqsch-scenario-b/docs/reading-a-circuit.md +317 -0
  19. package/skills/hqsch-scenario-b/docs/rpc/canvas-auto-connect-objects-by-id.md +98 -0
  20. package/skills/hqsch-scenario-b/docs/rpc/canvas-delete-objects-by-ids.md +94 -0
  21. package/skills/hqsch-scenario-b/docs/rpc/canvas-find-object-by-property.md +101 -0
  22. package/skills/hqsch-scenario-b/docs/rpc/canvas-list-wire-segments.md +94 -0
  23. package/skills/hqsch-scenario-b/docs/rpc/canvas-mirror-objects-by-ids.md +96 -0
  24. package/skills/hqsch-scenario-b/docs/rpc/canvas-rotate-objects-by-ids.md +94 -0
  25. package/skills/hqsch-scenario-b/docs/rpc/canvas-set-object-property.md +99 -0
  26. package/skills/hqsch-scenario-b/docs/rpc/canvas-zoom-all.md +92 -0
  27. package/skills/hqsch-scenario-b/docs/rpc/find-find-object.md +96 -0
  28. package/skills/hqsch-scenario-b/docs/rpc/kernel-get-snapshot.md +104 -0
  29. package/skills/hqsch-scenario-b/docs/rpc/netlist-get-active-page-net-list.md +87 -0
  30. package/skills/hqsch-scenario-b/docs/rpc/netlist-get-port-pairing.md +34 -0
  31. package/skills/hqsch-scenario-b/docs/rpc/obj-place-place-pin-stub-wire-and-net-alias.md +114 -0
  32. package/skills/hqsch-scenario-b/docs/rpc/pattern-layout-apply-circuit-pattern.md +125 -0
  33. package/skills/hqsch-scenario-b/docs/rpc/pattern-layout-get-page-occupancy.md +100 -0
  34. package/skills/hqsch-scenario-b/docs/rpc/pattern-layout-list-circuit-patterns.md +97 -0
  35. package/skills/hqsch-scenario-b/docs/rpc/placement-list-part-libraries.md +94 -0
  36. package/skills/hqsch-scenario-b/docs/rpc/placement-list-symbol-libraries.md +94 -0
  37. package/skills/hqsch-scenario-b/docs/rpc/placement-place-kicad-symbol.md +105 -0
  38. package/skills/hqsch-scenario-b/docs/rpc/placement-place-part-from-library.md +106 -0
  39. package/skills/hqsch-scenario-b/docs/rpc/placement-place-symbol-from-library.md +108 -0
  40. package/skills/hqsch-scenario-b/docs/rpc/project-get-active-project.md +96 -0
  41. package/skills/hqsch-scenario-b/docs/rpc/project-list-open-projects.md +99 -0
  42. package/skills/hqsch-scenario-b/docs/rpc-availability.md +97 -0
  43. package/skills/hqsch-scenario-b/docs/rpc-index/canvas.md +81 -0
  44. package/skills/hqsch-scenario-b/docs/rpc-index/find.md +36 -0
  45. package/skills/hqsch-scenario-b/docs/rpc-index/kernel.md +36 -0
  46. package/skills/hqsch-scenario-b/docs/rpc-index/netlist.md +38 -0
  47. package/skills/hqsch-scenario-b/docs/rpc-index/obj-place.md +76 -0
  48. package/skills/hqsch-scenario-b/docs/rpc-index/pattern-layout.md +38 -0
  49. package/skills/hqsch-scenario-b/docs/rpc-index/placement.md +48 -0
  50. package/skills/hqsch-scenario-b/docs/rpc-index/project.md +47 -0
  51. package/skills/hqsch-scenario-b/docs/serialization.md +60 -0
  52. package/skills/hqsch-scenario-b/docs/skill-dependencies.md +93 -0
  53. package/skills/hqsch-scenario-b/skill.json +13 -0
  54. package/skills/hqsch-scenario-b/template/package.json +16 -0
  55. package/skills/hqsch-scenario-b/template/scripts/edit-property-by-ref.ts +44 -0
  56. package/skills/hqsch-scenario-b/template/scripts/fix-designators.ts +52 -0
  57. package/skills/hqsch-scenario-b/template/scripts/hello.ts +46 -0
  58. package/skills/hqsch-scenario-b/template/scripts/read-circuit.ts +357 -0
  59. package/skills/hqsch-scenario-b/template/scripts/replace-part-by-ref.ts +44 -0
  60. package/skills/hqsch-scenario-b/template/scripts/rewire-pin-by-ref.ts +42 -0
  61. package/skills/hqsch-scenario-b/template/tsconfig.json +11 -0
  62. package/src/config.ts +25 -0
  63. package/src/index.ts +186 -0
  64. package/src/paths.ts +48 -0
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: placement-place-symbol-from-library
3
+ metadata:
4
+ category: placement
5
+ service: ComponentPlaceService
6
+ method: PlaceSymbolFromLibrary
7
+ rpcKind: unary
8
+ description: >-
9
+ Place GND/VCC/power, port, or off-page symbol from symbol libraries. Invoke for power symbols and connectivity markers — call ListSymbolLibraries first; do NOT use PlaceSymbol.
10
+ version: 0.1.0
11
+ vendor: Huaqiu Electronics
12
+ tags:
13
+ - eda
14
+ - huaqiu
15
+ - placement
16
+ entry: "@huaqiu/hqeda"
17
+ manifest: "@huaqiu/hqeda/skill.json"
18
+ inputSchema:
19
+ name: PlaceSymbolFromLibraryRequestSchema
20
+ namespace: HqServicesV1ComponentPlaceService
21
+ ---
22
+
23
+ # Place Symbol From Library
24
+
25
+ Place GND/VCC/power, port, or off-page symbol from symbol libraries. Invoke for power symbols and connectivity markers — call ListSymbolLibraries first; do NOT use PlaceSymbol.
26
+
27
+ ## Overview
28
+
29
+ This skill provides access to the **`ComponentPlaceService.PlaceSymbolFromLibrary`** RPC method on the Huaqiu EDA engine. It is part of the **placement** domain and executes against the `componentPlace` client.
30
+
31
+ | Property | Value |
32
+ | --- | --- |
33
+ | Skill ID | `placement-place-symbol-from-library` |
34
+ | Service | `ComponentPlaceService` |
35
+ | Method | `PlaceSymbolFromLibrary` |
36
+ | Transport | Unary (unary) |
37
+ | Domain | placement |
38
+ | Request type | `PlaceSymbolFromLibraryRequest` |
39
+ | Response type | `ObjectPlaceResponse` |
40
+
41
+ ## Parameters
42
+
43
+ | Name | Type | Required | Repeated | Description |
44
+ | --- | --- | --- | --- | --- |
45
+ | `context` | `ProjectContext` | no | no | — |
46
+ | `localPos` | `Vector2i64` | no | no | — |
47
+ | `libraryName` | `string` | yes | no | — |
48
+ | `symbolName` | `string` | yes | no | Desired symbol / net name such as "VCC_5V" — matched approximately, but only among the symbols of the library resolved from library_name / library_file_path (never across libraries, so keep calling ListSymbolLibraries first to pick the library); exact, case-insensitive and separator-boundary hits outrank plain substring hits, so "VCC_5V" resolves to the library symbol "VCC" while "GND" never resolves to "VCC_5V". |
49
+ | `libraryFilePath` | `string` | yes | no | — |
50
+ | `kind` | `LibrarySymbolKind` | yes | no | — |
51
+ | `netName` | `string` | yes | no | Written to the "Name" user property of this placed instance only — the shared library / design cache definition keeps its original name; empty means "same as symbol_name", so passing symbol_name = "VCC_5V" alone places the "VCC" symbol labelled "VCC_5V". |
52
+
53
+ ## Response
54
+
55
+ Returns a `ObjectPlaceResponse` message with the following fields:
56
+
57
+ | Name | Type | Repeated | Description |
58
+ | --- | --- | --- | --- |
59
+ | `success` | `boolean` | no | — |
60
+ | `objectId` | `bigint` | no | Canvas object id (objBase::m_nID). For part/symbol placement (PlacePart / PlacePartFromLibrary / PlaceKicadSymbol / PlaceSymbol / PlaceSymbolFromLibrary), this is the schem_part_enc container id — same as kernel snapshot symbol_instances[].canvas_object_id and pin_instances[].canvas_object_id. |
61
+ | `objectIds` | `bigint[]` | yes | All placed section object ids (PlaceKicadSymbol multi-section loop). |
62
+ | `sectionCount` | `number` | no | Number of sections in the package (GetSectionCount); set by PlaceKicadSymbol when available. |
63
+
64
+ ## Response Example
65
+
66
+ Representative response structure (field values are placeholders):
67
+
68
+ ```json
69
+ {
70
+ "success": false,
71
+ "objectId": "123456789",
72
+ "objectIds": [
73
+ "123456789"
74
+ ],
75
+ "sectionCount": 0
76
+ }
77
+ ```
78
+
79
+ ## Prerequisites
80
+
81
+ - [project-get-active-project](../../project/get-active-project/SKILL.md) — Discover the active project before building project-scoped context.
82
+
83
+ See also [skill-dependencies.md](../../references/skill-dependencies.md) for common workflows.
84
+
85
+ ## How to Use
86
+
87
+ Execute via the HQ EDA skill runtime with a connected `EditorClient`. See [quickstart.md](../../references/quickstart.md) for the full `listEditors` → `connect` → `getSkill` → `execute` chain.
88
+
89
+ ```typescript
90
+ import { getSkill, toJsonString } from "@huaqiu/hqeda";
91
+
92
+ const skill = getSkill("placement-place-symbol-from-library");
93
+ const result = await skill.execute({ client }, {
94
+ context: "<ProjectContext via client.createProjectContext('my-project')>",
95
+ localPos: {"x":0,"y":0},
96
+ libraryName: "Device",
97
+ });
98
+ console.log(toJsonString(result, { prettySpaces: 2 }));
99
+ ```
100
+
101
+ Serialize responses with `toJsonString()` — see [serialization.md](../../references/serialization.md).
102
+
103
+ ## Related Skills
104
+
105
+ - Other **placement** skills: [`placement/`](../)
106
+ - Full index: [All EDA skills](../../SKILL.md)
107
+ - Install: `npx skills add Huaqiu-Electronics/skills --path eda/placement/place-symbol-from-library`
108
+
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: project-get-active-project
3
+ metadata:
4
+ category: project
5
+ service: ProjectService
6
+ method: GetActiveProject
7
+ rpcKind: unary
8
+ description: >-
9
+ Returns the project currently active in the editor UI.
10
+ version: 0.1.0
11
+ vendor: Huaqiu Electronics
12
+ tags:
13
+ - eda
14
+ - huaqiu
15
+ - project
16
+ entry: "@huaqiu/hqeda"
17
+ manifest: "@huaqiu/hqeda/skill.json"
18
+ inputSchema:
19
+ name: GetActiveProjectRequestSchema
20
+ namespace: HqServicesV1ProjectService
21
+ ---
22
+
23
+ # Get Active Project
24
+
25
+ Returns the project currently active in the editor UI.
26
+
27
+ ## Overview
28
+
29
+ This skill provides access to the **`ProjectService.GetActiveProject`** RPC method on the Huaqiu EDA engine. It is part of the **project** domain and executes against the `project` client.
30
+
31
+ | Property | Value |
32
+ | --- | --- |
33
+ | Skill ID | `project-get-active-project` |
34
+ | Service | `ProjectService` |
35
+ | Method | `GetActiveProject` |
36
+ | Transport | Unary (unary) |
37
+ | Domain | project |
38
+ | Request type | `GetActiveProjectRequest` |
39
+ | Response type | `GetActiveProjectResponse` |
40
+
41
+ ## Parameters
42
+
43
+ | Name | Type | Required | Repeated | Description |
44
+ | --- | --- | --- | --- | --- |
45
+ | `context` | `EditorContext` | no | no | — |
46
+
47
+ ## Response
48
+
49
+ Returns a `GetActiveProjectResponse` message with the following fields:
50
+
51
+ | Name | Type | Repeated | Description |
52
+ | --- | --- | --- | --- |
53
+ | `project` | `ProjectMetadata` | no | — |
54
+
55
+ ## Usage Examples
56
+
57
+ ### getActiveProject returns the active project
58
+
59
+ ```json
60
+ {
61
+ "context": "<ProjectContext via client.createProjectContext('my-project')>"
62
+ }
63
+ ```
64
+
65
+ ## Response Example
66
+
67
+ Representative response structure (field values are placeholders):
68
+
69
+ ```json
70
+ {
71
+ "project": {}
72
+ }
73
+ ```
74
+
75
+ ## How to Use
76
+
77
+ Execute via the HQ EDA skill runtime with a connected `EditorClient`. See [quickstart.md](../../references/quickstart.md) for the full `listEditors` → `connect` → `getSkill` → `execute` chain.
78
+
79
+ ```typescript
80
+ import { getSkill, toJsonString } from "@huaqiu/hqeda";
81
+
82
+ const skill = getSkill("project-get-active-project");
83
+ const result = await skill.execute({ client }, {
84
+ context: "<ProjectContext via client.createProjectContext('my-project')>",
85
+ });
86
+ console.log(toJsonString(result, { prettySpaces: 2 }));
87
+ ```
88
+
89
+ Serialize responses with `toJsonString()` — see [serialization.md](../../references/serialization.md).
90
+
91
+ ## Related Skills
92
+
93
+ - Other **project** skills: [`project/`](../)
94
+ - Full index: [All EDA skills](../../SKILL.md)
95
+ - Install: `npx skills add Huaqiu-Electronics/skills --path eda/project/get-active-project`
96
+
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: project-list-open-projects
3
+ metadata:
4
+ category: project
5
+ service: ProjectService
6
+ method: ListOpenProjects
7
+ rpcKind: unary
8
+ description: >-
9
+ Returns all projects currently opened in this HQ EDA process. Use response.projects[].name as project_name in subsequent RPCs.
10
+ version: 0.1.0
11
+ vendor: Huaqiu Electronics
12
+ tags:
13
+ - eda
14
+ - huaqiu
15
+ - project
16
+ entry: "@huaqiu/hqeda"
17
+ manifest: "@huaqiu/hqeda/skill.json"
18
+ inputSchema:
19
+ name: ListOpenProjectsRequestSchema
20
+ namespace: HqServicesV1ProjectService
21
+ ---
22
+
23
+ # List Open Projects
24
+
25
+ Returns all projects currently opened in this HQ EDA process.
26
+ Use response.projects[].name as project_name in subsequent RPCs.
27
+
28
+ ## Overview
29
+
30
+ This skill provides access to the **`ProjectService.ListOpenProjects`** RPC method on the Huaqiu EDA engine. It is part of the **project** domain and executes against the `project` client.
31
+
32
+ | Property | Value |
33
+ | --- | --- |
34
+ | Skill ID | `project-list-open-projects` |
35
+ | Service | `ProjectService` |
36
+ | Method | `ListOpenProjects` |
37
+ | Transport | Unary (unary) |
38
+ | Domain | project |
39
+ | Request type | `ListOpenProjectsRequest` |
40
+ | Response type | `ListOpenProjectsResponse` |
41
+
42
+ ## Parameters
43
+
44
+ | Name | Type | Required | Repeated | Description |
45
+ | --- | --- | --- | --- | --- |
46
+ | `context` | `EditorContext` | no | no | — |
47
+
48
+ ## Response
49
+
50
+ Returns a `ListOpenProjectsResponse` message with the following fields:
51
+
52
+ | Name | Type | Repeated | Description |
53
+ | --- | --- | --- | --- |
54
+ | `projects` | `ProjectMetadata[]` | yes | Use ProjectMetadata.name as project_name in AddPageToProject / ActivatePageInProject. |
55
+
56
+ ## Usage Examples
57
+
58
+ ### lists open projects via editor context
59
+
60
+ ```json
61
+ {
62
+ "context": "<ProjectContext via client.createProjectContext('my-project')>"
63
+ }
64
+ ```
65
+
66
+ ## Response Example
67
+
68
+ Representative response structure (field values are placeholders):
69
+
70
+ ```json
71
+ {
72
+ "projects": [
73
+ {}
74
+ ]
75
+ }
76
+ ```
77
+
78
+ ## How to Use
79
+
80
+ Execute via the HQ EDA skill runtime with a connected `EditorClient`. See [quickstart.md](../../references/quickstart.md) for the full `listEditors` → `connect` → `getSkill` → `execute` chain.
81
+
82
+ ```typescript
83
+ import { getSkill, toJsonString } from "@huaqiu/hqeda";
84
+
85
+ const skill = getSkill("project-list-open-projects");
86
+ const result = await skill.execute({ client }, {
87
+ context: "<ProjectContext via client.createProjectContext('my-project')>",
88
+ });
89
+ console.log(toJsonString(result, { prettySpaces: 2 }));
90
+ ```
91
+
92
+ Serialize responses with `toJsonString()` — see [serialization.md](../../references/serialization.md).
93
+
94
+ ## Related Skills
95
+
96
+ - Other **project** skills: [`project/`](../)
97
+ - Full index: [All EDA skills](../../SKILL.md)
98
+ - Install: `npx skills add Huaqiu-Electronics/skills --path eda/project/list-open-projects`
99
+
@@ -0,0 +1,97 @@
1
+ # RPC availability (scenario-b engine build)
2
+
3
+ Use this table instead of trial-and-error. **Do not build flows on unimplemented
4
+ or hollow APIs.** Comprehension toolbox = `kernel.GetSnapshot` + `netList.*`.
5
+
6
+ Measured against a live HQ EDA build used with this skill. Status can change
7
+ across builds; when in doubt, prefer the ban list below over optimistic use.
8
+ You do **not** need to call `GetCapabilities` on every task — keep this table
9
+ as the default map.
10
+
11
+ ## Performance baselines (order-of-magnitude, not SLA)
12
+
13
+ | Operation | Typical range |
14
+ | --- | --- |
15
+ | `kernel.GetSnapshot` (whole project) | ~1.6–3.2 s |
16
+ | `netList.GetProjectNetList` | ~2.3–3.1 s (page netlist often ~20–30 ms) |
17
+ | Single `applyCircuitPattern` / host placement script | ~15–20 s (jitter OK; do not treat as a bug) |
18
+
19
+ Do not reverse-engineer “performance regression” from a single hang: some
20
+ unimplemented RPCs historically blocked for minutes before returning a clean
21
+ `unimplemented` in ~2 ms. Prefer this table over timeout guessing.
22
+
23
+ ## Works — OK for flows
24
+
25
+ | Service | Method | Role |
26
+ | --- | --- | --- |
27
+ | `kernel` | `GetSnapshot` | **Primary** read-circuit / verify source (project-wide) |
28
+ | `netList` | `GetProjectNetList` / `GetActivePageNetList` / `GetSelectionNetList` | Netlist semantics; accessor is **`netList`** (capital L) |
29
+ | `canvasOps` / pattern host | `GetPageOccupancy` | Object registration poll after place |
30
+ | `canvasOps` | `ListWireSegments` | Wire stats — field is **`wires`**, not `wireSegments` |
31
+ | `canvasOps` | `GetObjectsJsonByIds` / `GetObjectJsonById` | Optional deep object JSON (advanced) |
32
+ | `find` | `FindObject` | Optional object query (advanced; not Flow B primary) |
33
+ | `project` | `ListOpenProjects` / `GetProject` / `GetActiveProject` | Project identity |
34
+ | `capability` | `GetCapabilities` | Optional probe; not required every task |
35
+ | placement / pattern / part-search RPCs | (see placement + pattern docs) | Draw path |
36
+
37
+ ## Unimplemented — **forbid** as flow dependencies
38
+
39
+ These return `unimplemented` quickly (~2 ms) in current builds. Skill must not
40
+ wait on product to implement them for scenario-b:
41
+
42
+ | Service | Methods |
43
+ | --- | --- |
44
+ | `graph` | `GetConnectivity`, `QueryGraph` |
45
+ | `kernel` | `GetEntity` |
46
+ | `erc` | `RunChecks` |
47
+ | `selection` | `GetSelection`, `SetSelection`, `ClearSelection` |
48
+ | `export` | `ExportBOM`, `ExportTarget` |
49
+ | `runtime` | `Validate` / `ValidateCommands`, `ExecuteCommands` |
50
+ | `context` | `GetContext` |
51
+ | `transaction` | `Open` (and related) |
52
+
53
+ Read-circuit pin↔net joins use **snapshot three-table recipe** instead of a
54
+ real connectivity graph. That is intentional for this skill.
55
+
56
+ ## Hollow / misleading — worse than unimplemented
57
+
58
+ | Service | Method | Behavior | What to do |
59
+ | --- | --- | --- | --- |
60
+ | `project` | `ListProjectTree` | Empty tree / `error:3` | Do not use for navigation |
61
+ | `find` | `FindNet` | Often **`success: false` with no error** | **Never** treat as “net missing”; use snapshot `nets` |
62
+
63
+ Engine-side improvement (optional, not a skill blocker): make `FindNet` return
64
+ explicit `unimplemented` instead of silent false. Until then, agents must
65
+ ignore it.
66
+
67
+ ## Out of main path (ignore for scenario-b flows)
68
+
69
+ | Item | Why ignore |
70
+ | --- | --- |
71
+ | `import.ImportDesign` as a core step | Interface may respond, but depends on `*.kicad_pro` layout; not draw/read main path |
72
+ | Forcing `GetCapabilities` every task | Availability changes slowly; this doc + ban list is enough |
73
+ | Implementing selection / export / runtime / true `GetConnectivity` for skill | Product backlog; skill already bans them |
74
+ | Treating place-time jitter or `ECONNRESET` as skill defects | Retry; keep 15–20 s placement expectation |
75
+
76
+ ## Naming pitfall
77
+
78
+ | Correct | Wrong | Effect |
79
+ | --- | --- | --- |
80
+ | `client.netList` | `client.netlist` | Entire service is `undefined` |
81
+
82
+ ## Skill-side workarounds (until engine P2)
83
+
84
+ These engine gaps are **not blockers** for Flow B (read) or Flow C (local edit).
85
+ The skill documents the workaround; product may implement later.
86
+
87
+ | Gap | Current behavior | Skill workaround |
88
+ | --- | --- | --- |
89
+ | No authoritative connectivity graph | `graph.GetConnectivity` unimplemented | Snapshot three-table join + client BFS for series C/R/L/FB ([reading-a-circuit.md](./reading-a-circuit.md) § Series traversal) |
90
+ | Coupling vs decoupling cap | No `componentClass` / role | Heuristic: shunt cap with one leg on POWER/GROUND netClass → no series bridge |
91
+ | Per-pin wire ids for disconnect | Not exposed | Prefer `autoConnectObjectsById` or `placePinStubWireAndNetAlias`; avoid blind bulk wire delete ([editing-a-circuit.md](./editing-a-circuit.md)) |
92
+ | `FindNet` silent false | Misleading empty result | **Never use**; query `snapshot.nets` by name |
93
+ | `selection.*` | Unimplemented | Locate by designator / net via snapshot + `FindObjectByProperty` |
94
+ | Transaction / undo group | `transaction.Open` unimplemented | Each RPC `commitUndo: true`; accept multi-step undo |
95
+
96
+ When `GetConnectivity` returns typed edges (`sameNet`, `seriesPassive`, …), replace
97
+ the client BFS in `read-circuit.ts` — keep the same CLI flags (`TRACE=1`).
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: eda-canvas
3
+ metadata:
4
+ category: canvas
5
+ description: >-
6
+ Canvas operations for Huaqiu EDA. Invoke when selecting, moving, wiring, or editing objects on the active schematic page.
7
+ version: 0.1.0
8
+ vendor: Huaqiu Electronics
9
+ tags:
10
+ - eda
11
+ - huaqiu
12
+ - canvas
13
+ entry: "@huaqiu/hqeda"
14
+ manifest: "@huaqiu/hqeda/skill.json"
15
+ ---
16
+
17
+ # Canvas Skills
18
+
19
+ Canvas operations for Huaqiu EDA. Invoke when selecting, moving, wiring, or editing objects on the active schematic page.
20
+
21
+ ## Available Capabilities
22
+
23
+ Total: **47** skills in the **canvas** domain.
24
+
25
+ | Skill | Description | Streaming |
26
+ | --- | --- | --- |
27
+ | [`align-objects`](align-objects/SKILL.md) | transform | no |
28
+ | [`align-objects-by-ids`](align-objects-by-ids/SKILL.md) | Align Objects By Ids via CanvasOpsService.AlignObjectsByIds | no |
29
+ | [`auto-connect-objects-by-id`](auto-connect-objects-by-id/SKILL.md) | Auto Connect Objects By Id via CanvasOpsService.AutoConnectObjectsById | no |
30
+ | [`can-paste`](can-paste/SKILL.md) | Can Paste via CanvasOpsService.CanPaste | no |
31
+ | [`clear-all-sel`](clear-all-sel/SKILL.md) | selection | no |
32
+ | [`copy-objects-by-ids`](copy-objects-by-ids/SKILL.md) | Copy Objects By Ids via CanvasOpsService.CopyObjectsByIds | no |
33
+ | [`copy-selected`](copy-selected/SKILL.md) | Copy Selected via CanvasOpsService.CopySelected | no |
34
+ | [`delete-object-by-id`](delete-object-by-id/SKILL.md) | Delete Object By Id via CanvasOpsService.DeleteObjectById | no |
35
+ | [`delete-objects-by-ids`](delete-objects-by-ids/SKILL.md) | Delete Objects By Ids via CanvasOpsService.DeleteObjectsByIds | no |
36
+ | [`delete-selected`](delete-selected/SKILL.md) | edit | no |
37
+ | [`distribute-objects`](distribute-objects/SKILL.md) | Distribute Objects via CanvasOpsService.DistributeObjects | no |
38
+ | [`distribute-objects-by-ids`](distribute-objects-by-ids/SKILL.md) | Distribute Objects By Ids via CanvasOpsService.DistributeObjectsByIds | no |
39
+ | [`find-object-by-property`](find-object-by-property/SKILL.md) | object property | no |
40
+ | [`get-align-type`](get-align-type/SKILL.md) | Get Align Type via CanvasOpsService.GetAlignType | no |
41
+ | [`get-object-json-by-id`](get-object-json-by-id/SKILL.md) | Get Object Json By Id via CanvasOpsService.GetObjectJsonById | no |
42
+ | [`get-object-property`](get-object-property/SKILL.md) | Get Object Property via CanvasOpsService.GetObjectProperty | no |
43
+ | [`get-objects-json-by-ids`](get-objects-json-by-ids/SKILL.md) | Get Objects Json By Ids via CanvasOpsService.GetObjectsJsonByIds | no |
44
+ | [`get-selected-object-json`](get-selected-object-json/SKILL.md) | Get Selected Object Json via CanvasOpsService.GetSelectedObjectJson | no |
45
+ | [`get-selected-objects-json`](get-selected-objects-json/SKILL.md) | Get Selected Objects Json via CanvasOpsService.GetSelectedObjectsJson | no |
46
+ | [`list-wire-segments`](list-wire-segments/SKILL.md) | List Wire Segments via CanvasOpsService.ListWireSegments | no |
47
+ | [`mirror-objects`](mirror-objects/SKILL.md) | mode: 1\|2\|3 required; 0=no-op | no |
48
+ | [`mirror-objects-by-ids`](mirror-objects-by-ids/SKILL.md) | mode: 1\|2\|3 required; 0=no-op | no |
49
+ | [`move-objects-by-ids`](move-objects-by-ids/SKILL.md) | Move Objects By Ids via CanvasOpsService.MoveObjectsByIds | no |
50
+ | [`move-selected-objs`](move-selected-objs/SKILL.md) | Move Selected Objs via CanvasOpsService.MoveSelectedObjs | no |
51
+ | [`on-canvas-escape`](on-canvas-escape/SKILL.md) | state | no |
52
+ | [`pan-canvas`](pan-canvas/SKILL.md) | viewport | no |
53
+ | [`paste-selected`](paste-selected/SKILL.md) | Paste Selected via CanvasOpsService.PasteSelected | no |
54
+ | [`redo`](redo/SKILL.md) | Redo via CanvasOpsService.Redo | no |
55
+ | [`rotate-objects`](rotate-objects/SKILL.md) | Rotate Objects via CanvasOpsService.RotateObjects | no |
56
+ | [`rotate-objects-by-ids`](rotate-objects-by-ids/SKILL.md) | Rotate Objects By Ids via CanvasOpsService.RotateObjectsByIds | no |
57
+ | [`screen-to-canvas-local`](screen-to-canvas-local/SKILL.md) | coordinate | no |
58
+ | [`select-all`](select-all/SKILL.md) | Select All via CanvasOpsService.SelectAll | no |
59
+ | [`select-object-at`](select-object-at/SKILL.md) | Select Object At via CanvasOpsService.SelectObjectAt | no |
60
+ | [`select-object-by-id`](select-object-by-id/SKILL.md) | Select Object By Id via CanvasOpsService.SelectObjectById | no |
61
+ | [`select-objects-by-ids`](select-objects-by-ids/SKILL.md) | Select Objects By Ids via CanvasOpsService.SelectObjectsByIds | no |
62
+ | [`set-align-type`](set-align-type/SKILL.md) | grid align | no |
63
+ | [`set-object-property`](set-object-property/SKILL.md) | Set Object Property via CanvasOpsService.SetObjectProperty | no |
64
+ | [`set-page-size`](set-page-size/SKILL.md) | page | no |
65
+ | [`set-page-size-rect`](set-page-size-rect/SKILL.md) | Set Page Size Rect via CanvasOpsService.SetPageSizeRect | no |
66
+ | [`undo`](undo/SKILL.md) | undo / redo (SCH_Undo / SCH_Redo on active canvas) | no |
67
+ | [`zoom-all`](zoom-all/SKILL.md) | Zoom All via CanvasOpsService.ZoomAll | no |
68
+ | [`zoom-area-by-double-box`](zoom-area-by-double-box/SKILL.md) | Zoom Area By Double Box via CanvasOpsService.ZoomAreaByDoubleBox | no |
69
+ | [`zoom-area-by-int-box`](zoom-area-by-int-box/SKILL.md) | Zoom Area By Int Box via CanvasOpsService.ZoomAreaByIntBox | no |
70
+ | [`zoom-area-by-points`](zoom-area-by-points/SKILL.md) | Zoom Area By Points via CanvasOpsService.ZoomAreaByPoints | no |
71
+ | [`zoom-in`](zoom-in/SKILL.md) | zoom | no |
72
+ | [`zoom-out`](zoom-out/SKILL.md) | Zoom Out via CanvasOpsService.ZoomOut | no |
73
+ | [`zoom-selected`](zoom-selected/SKILL.md) | Zoom Selected via CanvasOpsService.ZoomSelected | no |
74
+
75
+ ## See Also
76
+
77
+ - [All EDA skills](../SKILL.md)
78
+ - [quickstart.md](../references/quickstart.md)
79
+ - [serialization.md](../references/serialization.md)
80
+ - [`@huaqiu/hqeda` npm package](https://www.npmjs.com/package/@huaqiu/hqeda) — shared runtime + capability registry
81
+
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: eda-find
3
+ metadata:
4
+ category: find
5
+ description: >-
6
+ Find operations for Huaqiu EDA. Use this skill when you need to work with find-related operations including find net, find object.
7
+ version: 0.1.0
8
+ vendor: Huaqiu Electronics
9
+ tags:
10
+ - eda
11
+ - huaqiu
12
+ - find
13
+ entry: "@huaqiu/hqeda"
14
+ manifest: "@huaqiu/hqeda/skill.json"
15
+ ---
16
+
17
+ # Find Skills
18
+
19
+ Find operations for Huaqiu EDA. Use this skill when you need to work with find-related operations including find net, find object.
20
+
21
+ ## Available Capabilities
22
+
23
+ Total: **2** skills in the **find** domain.
24
+
25
+ | Skill | Description | Streaming |
26
+ | --- | --- | --- |
27
+ | [`find-net`](find-net/SKILL.md) | Find Net via FindService.FindNet | no |
28
+ | [`find-object`](find-object/SKILL.md) | Find Object via FindService.FindObject | no |
29
+
30
+ ## See Also
31
+
32
+ - [All EDA skills](../SKILL.md)
33
+ - [quickstart.md](../references/quickstart.md)
34
+ - [serialization.md](../references/serialization.md)
35
+ - [`@huaqiu/hqeda` npm package](https://www.npmjs.com/package/@huaqiu/hqeda) — shared runtime + capability registry
36
+
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: eda-kernel
3
+ metadata:
4
+ category: kernel
5
+ description: >-
6
+ Kernel operations for Huaqiu EDA. Use this skill when you need to work with kernel-related operations including get entity, get snapshot.
7
+ version: 0.1.0
8
+ vendor: Huaqiu Electronics
9
+ tags:
10
+ - eda
11
+ - huaqiu
12
+ - kernel
13
+ entry: "@huaqiu/hqeda"
14
+ manifest: "@huaqiu/hqeda/skill.json"
15
+ ---
16
+
17
+ # Kernel Skills
18
+
19
+ Kernel operations for Huaqiu EDA. Use this skill when you need to work with kernel-related operations including get entity, get snapshot.
20
+
21
+ ## Available Capabilities
22
+
23
+ Total: **2** skills in the **kernel** domain.
24
+
25
+ | Skill | Description | Streaming |
26
+ | --- | --- | --- |
27
+ | [`get-entity`](get-entity/SKILL.md) | Get Entity via KernelService.GetEntity | no |
28
+ | [`get-snapshot`](get-snapshot/SKILL.md) | Get Snapshot via KernelService.GetSnapshot | no |
29
+
30
+ ## See Also
31
+
32
+ - [All EDA skills](../SKILL.md)
33
+ - [quickstart.md](../references/quickstart.md)
34
+ - [serialization.md](../references/serialization.md)
35
+ - [`@huaqiu/hqeda` npm package](https://www.npmjs.com/package/@huaqiu/hqeda) — shared runtime + capability registry
36
+
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: eda-netlist
3
+ metadata:
4
+ category: netlist
5
+ description: >-
6
+ Netlist operations for Huaqiu EDA. Invoke when reading net names or connectivity from the active or project scope.
7
+ version: 0.1.0
8
+ vendor: Huaqiu Electronics
9
+ tags:
10
+ - eda
11
+ - huaqiu
12
+ - netlist
13
+ entry: "@huaqiu/hqeda"
14
+ manifest: "@huaqiu/hqeda/skill.json"
15
+ ---
16
+
17
+ # Netlist Skills
18
+
19
+ Netlist operations for Huaqiu EDA. Invoke when reading net names or connectivity from the active or project scope.
20
+
21
+ ## Available Capabilities
22
+
23
+ Total: **4** skills in the **netlist** domain.
24
+
25
+ | Skill | Description | Streaming |
26
+ | --- | --- | --- |
27
+ | [`get-active-page-net-list`](get-active-page-net-list/SKILL.md) | / Gets the netlist for the currently active schematic page (real-time canvas state). | no |
28
+ | [`get-port-pairing`](get-port-pairing/SKILL.md) | / Lists cross-page / cross-hierarchy Port and Off-page pairings on the same design net. | no |
29
+ | [`get-project-net-list`](get-project-net-list/SKILL.md) | / Gets the complete netlist for the current project. | no |
30
+ | [`get-selection-net-list`](get-selection-net-list/SKILL.md) | / Gets the netlist for the currently selected components. | no |
31
+
32
+ ## See Also
33
+
34
+ - [All EDA skills](../SKILL.md)
35
+ - [quickstart.md](../references/quickstart.md)
36
+ - [serialization.md](../references/serialization.md)
37
+ - [`@huaqiu/hqeda` npm package](https://www.npmjs.com/package/@huaqiu/hqeda) — shared runtime + capability registry
38
+
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: eda-obj-place
3
+ metadata:
4
+ category: obj-place
5
+ description: >-
6
+ Obj Place operations for Huaqiu EDA. Use this skill when you need to work with obj-place-related operations including add bus segment, add ellipse, add ellipse arc.
7
+ version: 0.1.0
8
+ vendor: Huaqiu Electronics
9
+ tags:
10
+ - eda
11
+ - huaqiu
12
+ - obj-place
13
+ entry: "@huaqiu/hqeda"
14
+ manifest: "@huaqiu/hqeda/skill.json"
15
+ ---
16
+
17
+ # Obj Place Skills
18
+
19
+ Obj Place operations for Huaqiu EDA. Use this skill when you need to work with obj-place-related operations including add bus segment, add ellipse, add ellipse arc.
20
+
21
+ ## Available Capabilities
22
+
23
+ Total: **42** skills in the **obj-place** domain.
24
+
25
+ | Skill | Description | Streaming |
26
+ | --- | --- | --- |
27
+ | [`add-bus-segment`](add-bus-segment/SKILL.md) | Add Bus Segment via ObjPlaceService.AddBusSegment | no |
28
+ | [`add-ellipse`](add-ellipse/SKILL.md) | Add Ellipse via ObjPlaceService.AddEllipse | no |
29
+ | [`add-ellipse-arc`](add-ellipse-arc/SKILL.md) | Add Ellipse Arc via ObjPlaceService.AddEllipseArc | no |
30
+ | [`add-free-line-segment`](add-free-line-segment/SKILL.md) | Add Free Line Segment via ObjPlaceService.AddFreeLineSegment | no |
31
+ | [`add-line`](add-line/SKILL.md) | Add Line via ObjPlaceService.AddLine | no |
32
+ | [`add-rect`](add-rect/SKILL.md) | Add Rect via ObjPlaceService.AddRect | no |
33
+ | [`add-wire-segment`](add-wire-segment/SKILL.md) | Add Wire Segment via ObjPlaceService.AddWireSegment | no |
34
+ | [`cancel-bus-draw`](cancel-bus-draw/SKILL.md) | Cancel Bus Draw via ObjPlaceService.CancelBusDraw | no |
35
+ | [`cancel-ellipse-arc-draw`](cancel-ellipse-arc-draw/SKILL.md) | Cancel Ellipse Arc Draw via ObjPlaceService.CancelEllipseArcDraw | no |
36
+ | [`cancel-ellipse-draw`](cancel-ellipse-draw/SKILL.md) | Cancel Ellipse Draw via ObjPlaceService.CancelEllipseDraw | no |
37
+ | [`cancel-free-line-draw`](cancel-free-line-draw/SKILL.md) | Cancel Free Line Draw via ObjPlaceService.CancelFreeLineDraw | no |
38
+ | [`cancel-line-draw`](cancel-line-draw/SKILL.md) | Cancel Line Draw via ObjPlaceService.CancelLineDraw | no |
39
+ | [`cancel-rect-draw`](cancel-rect-draw/SKILL.md) | Cancel Rect Draw via ObjPlaceService.CancelRectDraw | no |
40
+ | [`cancel-wire-draw`](cancel-wire-draw/SKILL.md) | Cancel Wire Draw via ObjPlaceService.CancelWireDraw | no |
41
+ | [`handle-bus-draw-click`](handle-bus-draw-click/SKILL.md) | bus | no |
42
+ | [`handle-ellipse-arc-draw-click`](handle-ellipse-arc-draw-click/SKILL.md) | Handle Ellipse Arc Draw Click via ObjPlaceService.HandleEllipseArcDrawClick | no |
43
+ | [`handle-ellipse-draw-click`](handle-ellipse-draw-click/SKILL.md) | Handle Ellipse Draw Click via ObjPlaceService.HandleEllipseDrawClick | no |
44
+ | [`handle-free-line-draw-click`](handle-free-line-draw-click/SKILL.md) | Handle Free Line Draw Click via ObjPlaceService.HandleFreeLineDrawClick | no |
45
+ | [`handle-image-draw-click`](handle-image-draw-click/SKILL.md) | Handle Image Draw Click via ObjPlaceService.HandleImageDrawClick | no |
46
+ | [`handle-line-draw-click`](handle-line-draw-click/SKILL.md) | Handle Line Draw Click via ObjPlaceService.HandleLineDrawClick | no |
47
+ | [`handle-net-alias-draw-click`](handle-net-alias-draw-click/SKILL.md) | Handle Net Alias Draw Click via ObjPlaceService.HandleNetAliasDrawClick | no |
48
+ | [`handle-rect-draw-click`](handle-rect-draw-click/SKILL.md) | Handle Rect Draw Click via ObjPlaceService.HandleRectDrawClick | no |
49
+ | [`handle-table-draw-click`](handle-table-draw-click/SKILL.md) | Handle Table Draw Click via ObjPlaceService.HandleTableDrawClick | no |
50
+ | [`handle-text-draw-click`](handle-text-draw-click/SKILL.md) | Handle Text Draw Click via ObjPlaceService.HandleTextDrawClick | no |
51
+ | [`handle-wire-draw-click`](handle-wire-draw-click/SKILL.md) | wire | no |
52
+ | [`place-bus`](place-bus/SKILL.md) | Place Bus via ObjPlaceService.PlaceBus | no |
53
+ | [`place-ellipse`](place-ellipse/SKILL.md) | ellipse | no |
54
+ | [`place-ellipse-arc`](place-ellipse-arc/SKILL.md) | ellipse arc | no |
55
+ | [`place-ellipse-arc-at`](place-ellipse-arc-at/SKILL.md) | Place Ellipse Arc At via ObjPlaceService.PlaceEllipseArcAt | no |
56
+ | [`place-ellipse-arc-from-virtual`](place-ellipse-arc-from-virtual/SKILL.md) | Place Ellipse Arc From Virtual via ObjPlaceService.PlaceEllipseArcFromVirtual | no |
57
+ | [`place-free-line`](place-free-line/SKILL.md) | free line | no |
58
+ | [`place-image`](place-image/SKILL.md) | image | no |
59
+ | [`place-line`](place-line/SKILL.md) | line | no |
60
+ | [`place-net-alias`](place-net-alias/SKILL.md) | net alias | no |
61
+ | [`place-net-alias-at`](place-net-alias-at/SKILL.md) | Place net label on wire/bus at local_pos. Invoke when naming nets (3V3, GND, PROBE_NET); requires wi | no |
62
+ | [`place-pin-stub-wire-and-net-alias`](place-pin-stub-wire-and-net-alias/SKILL.md) | Pin stub wire + net alias: detect existing wire, extend stub with collision avoidance, place alias; | no |
63
+ | [`place-rect`](place-rect/SKILL.md) | rect | no |
64
+ | [`place-table`](place-table/SKILL.md) | table | no |
65
+ | [`place-table-from-virtual`](place-table-from-virtual/SKILL.md) | Place Table From Virtual via ObjPlaceService.PlaceTableFromVirtual | no |
66
+ | [`place-text`](place-text/SKILL.md) | text | no |
67
+ | [`place-text-from-virtual`](place-text-from-virtual/SKILL.md) | Place Text From Virtual via ObjPlaceService.PlaceTextFromVirtual | no |
68
+ | [`place-wire`](place-wire/SKILL.md) | Place Wire via ObjPlaceService.PlaceWire | no |
69
+
70
+ ## See Also
71
+
72
+ - [All EDA skills](../SKILL.md)
73
+ - [quickstart.md](../references/quickstart.md)
74
+ - [serialization.md](../references/serialization.md)
75
+ - [`@huaqiu/hqeda` npm package](https://www.npmjs.com/package/@huaqiu/hqeda) — shared runtime + capability registry
76
+