feat: 接通原生社区扩展运行链路

This commit is contained in:
2026-09-12 02:15:23 +08:00
parent 46cbe7d711
commit 226a8ce4d8
10 changed files with 621 additions and 14 deletions
+17 -2
View File
@@ -2,12 +2,14 @@
import hashlib
import json
import re
import subprocess
import tempfile
import zipfile
from pathlib import Path
ROOT = Path(__file__).resolve().parent
PACKAGES = [
('plugin', 'markdown-workbench', ['plugin.yaml', 'commands.yaml', 'server.py', 'example.md', 'README.md'], []),
('plugin', 'markdown-workbench', ['plugin.yaml', 'commands.yaml', 'markdown-workbench.exe', 'example.md', 'README.md'], []),
('skill', 'note-reviewer', ['skill.yaml', 'prompt.md', 'README.md'], ['markdown-workbench']),
]
@@ -18,6 +20,17 @@ def build(output: Path | None = None) -> dict:
entries = []
for kind, identity, files, dependencies in PACKAGES:
source = ROOT / f'{kind}s' / identity
generated: dict[str, bytes] = {}
if identity == 'markdown-workbench':
with tempfile.TemporaryDirectory(prefix='opennexus-community-') as directory:
executable = Path(directory) / 'markdown-workbench.exe'
subprocess.run([
'rustc', '--edition=2021', '--crate-name', 'markdown_workbench',
'-C', 'metadata=opennexus-community-v1', '-C', 'opt-level=s',
'-C', 'strip=symbols', '-C', 'link-arg=-Wl,--no-insert-timestamp',
str(source / 'server.rs'), '-o', str(executable),
], check=True)
generated[executable.name] = executable.read_bytes()
manifest = (source / f'{kind}.yaml').read_text(encoding='utf-8')
version = re.search(r'^version: (\d+\.\d+\.\d+)$', manifest, re.M)[1]
path = output / f'{identity}-{version}.zip'
@@ -27,7 +40,9 @@ def build(output: Path | None = None) -> dict:
info.create_system = 3
info.external_attr = 0o100644 << 16
info.compress_type = zipfile.ZIP_DEFLATED
content = (source / name).read_text(encoding='utf-8').replace('\r\n', '\n').encode('utf-8')
content = generated.get(name)
if content is None:
content = (source / name).read_text(encoding='utf-8').replace('\r\n', '\n').encode('utf-8')
archive.writestr(info, content)
data = path.read_bytes()
entries.append({'id': identity, 'kind': kind, 'version': version, 'file': path.name,