firmwareloop 0.1.1__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/PKG-INFO +3 -3
  2. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/README.md +2 -2
  3. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/firmwareloop.egg-info/PKG-INFO +3 -3
  4. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/pyproject.toml +1 -1
  5. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/__init__.py +1 -1
  6. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/fw_mcp_server.py +17 -8
  7. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/ndtdbg_bridge.ps1 +6 -4
  8. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/setup-agent-mcp.ps1 +2 -2
  9. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/LICENSE +0 -0
  10. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/firmwareloop.egg-info/SOURCES.txt +0 -0
  11. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/firmwareloop.egg-info/dependency_links.txt +0 -0
  12. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/firmwareloop.egg-info/entry_points.txt +0 -0
  13. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/firmwareloop.egg-info/requires.txt +0 -0
  14. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/firmwareloop.egg-info/top_level.txt +0 -0
  15. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/setup.cfg +0 -0
  16. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/acceptance-scenario.ps1 +0 -0
  17. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/build.ps1 +0 -0
  18. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/can.ps1 +0 -0
  19. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/check-qoder-mcp.ps1 +0 -0
  20. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/common/build-backends.psm1 +0 -0
  21. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/common/fw.psm1 +0 -0
  22. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/common/uart_probe.py +0 -0
  23. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/doctor.ps1 +0 -0
  24. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/flash.ps1 +0 -0
  25. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/instrument_cli.py +0 -0
  26. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/lib/__init__.py +0 -0
  27. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/lib/instruments.py +0 -0
  28. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/lib/ndtdbg.py +0 -0
  29. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/logic_capture.ps1 +0 -0
  30. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/logic_decode.ps1 +0 -0
  31. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/ndtdbg_cli.py +0 -0
  32. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/reset.ps1 +0 -0
  33. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/sigrok_csv_to_fwloop.py +0 -0
  34. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/test-backends.ps1 +0 -0
  35. {firmwareloop-0.1.1 → firmwareloop-0.1.2}/tools/test.ps1 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firmwareloop
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: AI Agent Firmware Development and Lab Automation Platform (Dual-Tier MCP Server)
5
5
  Author-email: WeilinZhang <19523330249@163.com>
6
6
  License: MIT
@@ -338,7 +338,7 @@ claude mcp remove --scope user agentic-hil
338
338
  ├── demo-firmware/ 示例固件(CMake;宿主编译模拟 MCU,闭环验证载体)
339
339
  ├── demo-make/ 示例固件(Make;构建测试载体)
340
340
  ├── docs/ DEPENDENCY_MATRIX / REUSE_PLAN / V0.0.2_GAP_VERIFICATION
341
- ├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.1.1)
341
+ ├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.1.2)
342
342
  ├── .mcp.example.json 双层 MCP 配置模板(firmwareloop + agentic-hil)
343
343
  ├── AGENTS.md 通用智能体规范(Antigravity / Qoder / Cursor 等)
344
344
  ├── CLAUDE.md Claude Code CLI 指南
@@ -348,7 +348,7 @@ claude mcp remove --scope user agentic-hil
348
348
 
349
349
  ---
350
350
 
351
- ## 能力验证状态(v0.1.1
351
+ ## 能力验证状态(v0.1.2
352
352
 
353
353
  > 状态定义:`Implemented`(已实现)/ `Simulator Validated`(模拟验证)/
354
354
  > `Real Hardware Validated`(真机验证)/ `Experimental` / `Not Implemented`
@@ -310,7 +310,7 @@ claude mcp remove --scope user agentic-hil
310
310
  ├── demo-firmware/ 示例固件(CMake;宿主编译模拟 MCU,闭环验证载体)
311
311
  ├── demo-make/ 示例固件(Make;构建测试载体)
312
312
  ├── docs/ DEPENDENCY_MATRIX / REUSE_PLAN / V0.0.2_GAP_VERIFICATION
313
- ├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.1.1)
313
+ ├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.1.2)
314
314
  ├── .mcp.example.json 双层 MCP 配置模板(firmwareloop + agentic-hil)
315
315
  ├── AGENTS.md 通用智能体规范(Antigravity / Qoder / Cursor 等)
316
316
  ├── CLAUDE.md Claude Code CLI 指南
@@ -320,7 +320,7 @@ claude mcp remove --scope user agentic-hil
320
320
 
321
321
  ---
322
322
 
323
- ## 能力验证状态(v0.1.1
323
+ ## 能力验证状态(v0.1.2
324
324
 
325
325
  > 状态定义:`Implemented`(已实现)/ `Simulator Validated`(模拟验证)/
326
326
  > `Real Hardware Validated`(真机验证)/ `Experimental` / `Not Implemented`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firmwareloop
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: AI Agent Firmware Development and Lab Automation Platform (Dual-Tier MCP Server)
5
5
  Author-email: WeilinZhang <19523330249@163.com>
6
6
  License: MIT
@@ -338,7 +338,7 @@ claude mcp remove --scope user agentic-hil
338
338
  ├── demo-firmware/ 示例固件(CMake;宿主编译模拟 MCU,闭环验证载体)
339
339
  ├── demo-make/ 示例固件(Make;构建测试载体)
340
340
  ├── docs/ DEPENDENCY_MATRIX / REUSE_PLAN / V0.0.2_GAP_VERIFICATION
341
- ├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.1.1)
341
+ ├── pyproject.toml 标准 Python 包配置与 CLI 入口声明 (v0.1.2)
342
342
  ├── .mcp.example.json 双层 MCP 配置模板(firmwareloop + agentic-hil)
343
343
  ├── AGENTS.md 通用智能体规范(Antigravity / Qoder / Cursor 等)
344
344
  ├── CLAUDE.md Claude Code CLI 指南
@@ -348,7 +348,7 @@ claude mcp remove --scope user agentic-hil
348
348
 
349
349
  ---
350
350
 
351
- ## 能力验证状态(v0.1.1
351
+ ## 能力验证状态(v0.1.2
352
352
 
353
353
  > 状态定义:`Implemented`(已实现)/ `Simulator Validated`(模拟验证)/
354
354
  > `Real Hardware Validated`(真机验证)/ `Experimental` / `Not Implemented`
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "firmwareloop"
7
- version = "0.1.1"
7
+ version = "0.1.2"
8
8
  description = "AI Agent Firmware Development and Lab Automation Platform (Dual-Tier MCP Server)"
9
9
  readme = "README.md"
10
10
  authors = [
@@ -2,4 +2,4 @@
2
2
  FirmwareLoop - AI Agent Firmware Development and Lab Automation Platform.
3
3
  """
4
4
 
5
- __version__ = "0.1.1"
5
+ __version__ = "0.1.2"
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  """
3
- fw_mcp_server.py - FirmwareLoop High-Level Workflow & Device MCP Server (v0.1.1).
3
+ fw_mcp_server.py - FirmwareLoop High-Level Workflow & Device MCP Server (v0.1.2).
4
4
 
5
5
  Exposes high-level firmware engineering and hardware management tools to AI Coding
6
6
  Agents (Antigravity CLI, Claude Code CLI, Qoder IDE, Cursor) via the Model Context
@@ -1336,7 +1336,7 @@ def process_request(req: Dict[str, Any]) -> Optional[Dict[str, Any]]:
1336
1336
  },
1337
1337
  "serverInfo": {
1338
1338
  "name": "firmwareloop",
1339
- "version": "0.1.1"
1339
+ "version": "0.1.2"
1340
1340
  }
1341
1341
  }
1342
1342
  }
@@ -1428,7 +1428,7 @@ def process_request(req: Dict[str, Any]) -> Optional[Dict[str, Any]]:
1428
1428
  def handle_cli_update() -> int:
1429
1429
  """Handle `firmwareloop update` command."""
1430
1430
  print("============================================================")
1431
- print(" FirmwareLoop Auto-Updater (v0.1.1)")
1431
+ print(" FirmwareLoop Auto-Updater (v0.1.2)")
1432
1432
  print("============================================================")
1433
1433
 
1434
1434
  is_git_repo = os.path.exists(os.path.join(REPO_ROOT, ".git"))
@@ -1526,7 +1526,16 @@ def upsert_qoder_mcp_json(mcp_path: str, servers: Optional[Dict[str, Any]] = Non
1526
1526
  mcp_servers = data.get("mcpServers")
1527
1527
  if not isinstance(mcp_servers, dict):
1528
1528
  mcp_servers = {}
1529
- mcp_servers.update(payload)
1529
+ # Merge per-entry (not whole-key replace): keep existing per-server extras
1530
+ # like "env" (e.g. FW_LAB_CONFIG) that this payload does not define.
1531
+ for name, entry in payload.items():
1532
+ old = mcp_servers.get(name)
1533
+ if isinstance(old, dict) and isinstance(entry, dict):
1534
+ merged = dict(old)
1535
+ merged.update(entry)
1536
+ mcp_servers[name] = merged
1537
+ else:
1538
+ mcp_servers[name] = entry
1530
1539
  data["mcpServers"] = mcp_servers
1531
1540
  parent = os.path.dirname(mcp_path)
1532
1541
  if parent:
@@ -1571,7 +1580,7 @@ def configure_qoder_user_mcp(user_home: str) -> List[Dict[str, Any]]:
1571
1580
  def handle_cli_setup() -> int:
1572
1581
  """Handle `firmwareloop setup` command: simultaneously configure Antigravity CLI, Claude Code CLI, and Qoder IDE."""
1573
1582
  print("============================================================")
1574
- print(" FirmwareLoop Multi-Agent Global Setup Helper (v0.1.1)")
1583
+ print(" FirmwareLoop Multi-Agent Global Setup Helper (v0.1.2)")
1575
1584
  print("============================================================")
1576
1585
  print("")
1577
1586
 
@@ -1676,7 +1685,7 @@ def handle_cli_setup() -> int:
1676
1685
  def handle_cli_init() -> int:
1677
1686
  """Handle `firmwareloop init` command."""
1678
1687
  print("============================================================")
1679
- print(" FirmwareLoop Multi-Agent Project Initializer (v0.1.1)")
1688
+ print(" FirmwareLoop Multi-Agent Project Initializer (v0.1.2)")
1680
1689
  print("============================================================")
1681
1690
  cwd = os.getcwd()
1682
1691
  print(f"[*] Initializing multi-agent guidelines & bench config in:\n {cwd}\n")
@@ -1697,7 +1706,7 @@ def handle_cli_init() -> int:
1697
1706
 
1698
1707
 
1699
1708
  def print_cli_help() -> None:
1700
- print("""FirmwareLoop (fwloop) — AI Agent Firmware Engineering & Lab Automation Platform (v0.1.1)
1709
+ print("""FirmwareLoop (fwloop) — AI Agent Firmware Engineering & Lab Automation Platform (v0.1.2)
1701
1710
 
1702
1711
  Usage:
1703
1712
  fwloop [command] (or: firmwareloop [command])
@@ -1728,7 +1737,7 @@ def main() -> None:
1728
1737
  elif cmd in ["setup", "register"]:
1729
1738
  sys.exit(handle_cli_setup())
1730
1739
  elif cmd in ["version", "-v", "--version"]:
1731
- print("FirmwareLoop v0.1.1")
1740
+ print("FirmwareLoop v0.1.2")
1732
1741
  sys.exit(0)
1733
1742
  elif cmd in ["help", "-h", "--help"]:
1734
1743
  print_cli_help()
@@ -68,7 +68,7 @@ function Parse-Hex([string]$s) {
68
68
  try { $bytes[[int]($i / 2)] = [Convert]::ToByte($clean.Substring($i, 2), 16) }
69
69
  catch { Fail "CONFIG_ERROR" "Data 含非法十六进制字符" $clean.Substring($i, 2) }
70
70
  }
71
- return $bytes
71
+ return ,$bytes # PS 函数返回会展开单元素数组, 一元数组符保护类型
72
72
  }
73
73
 
74
74
  function Open-Device([int]$iIndex) {
@@ -103,10 +103,12 @@ function Read-Reg([uint32]$h, [int]$addr, [int]$reg, [int]$len) {
103
103
  return $rb
104
104
  }
105
105
 
106
- function Write-Reg([uint32]$h, [int]$addr, [int]$reg, [byte[]]$data) {
107
- $wb = New-Object byte[] (2 + $data.Length)
106
+ function Write-Reg([uint32]$h, [int]$addr, [int]$reg, $data) {
107
+ # 无类型约束 + 函数内强转: 兼容标量/单元素数组/byte[] 各种传参形态 (PS5.1 会展开单元素数组)
108
+ $bytes = [byte[]]@($data)
109
+ $wb = New-Object byte[] (2 + $bytes.Length)
108
110
  for ($i = 0; $i -lt $wb.Length; $i++) {
109
- if ($i -eq 0) { $wb[0] = $addr } elseif ($i -eq 1) { $wb[1] = $reg } else { $wb[$i] = $data[$i - 2] }
111
+ if ($i -eq 0) { $wb[0] = $addr } elseif ($i -eq 1) { $wb[1] = $reg } else { $wb[$i] = $bytes[$i - 2] }
110
112
  }
111
113
  if (-not (Invoke-WriteRead $h $wb (New-Object byte[] 0))) { Fail "TARGET_MISMATCH" ("IIC 写无应答 addr=0x{0:X2} reg=0x{1:X2}" -f $addr, $reg) ("{0:X2}/{1:X2}" -f $addr, $reg) }
112
114
  }
@@ -1,6 +1,6 @@
1
1
  <#
2
2
  .SYNOPSIS
3
- Dual-Tier MCP setup and registration helper (v0.1.1).
3
+ Dual-Tier MCP setup and registration helper (v0.1.2).
4
4
  Inspects installed AI coding agents (Qoder, Claude Code, Antigravity, Cursor)
5
5
  and configures global MCP / skills or prints exact registration commands.
6
6
 
@@ -242,7 +242,7 @@ if ($Json) {
242
242
  Write-FwJson ([pscustomobject]$report)
243
243
  } else {
244
244
  Write-Host "============================================================" -ForegroundColor Cyan
245
- Write-Host " FirmwareLoop Dual-Tier MCP & Agent Setup Helper (v0.1.1)" -ForegroundColor Green
245
+ Write-Host " FirmwareLoop Dual-Tier MCP & Agent Setup Helper (v0.1.2)" -ForegroundColor Green
246
246
  Write-Host "============================================================" -ForegroundColor Cyan
247
247
  Write-Host ""
248
248
  Write-Host "[1] Google Antigravity / Gemini CLI:" -ForegroundColor Yellow
File without changes
File without changes
File without changes