web-presentation-cli 0.3.0__tar.gz → 0.3.1__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.
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/PKG-INFO +6 -2
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/README.md +5 -1
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/catalog.toml +1 -1
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/component-standards.md +1 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/source-standards.md +12 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/pyproject.toml +1 -1
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/__init__.py +1 -1
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/component.py +20 -2
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/output_fields.py +4 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_cli_commands.py +53 -1
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_output_profiles.py +46 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/.gitignore +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/SKILL.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/agents/openai.yaml +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/cli-usage.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/design-system-and-assets.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/page-generation.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/platform-model.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/platform-overview.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/route-and-navigation.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/references/validation-and-delivery.md +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/hatch_build.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/cli.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/client.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/__init__.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/asset.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/auth.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/catalog.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/common.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/doctor.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/job.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/page.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/preview.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/profile.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/project.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/screenshot.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/skill.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/style.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/system.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/theme.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/commands/workspace.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/config.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/formatter.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/openapi_contracts.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/openapi_help.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/output_profiles.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/skills/__init__.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/skills/catalog.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/skills/installer.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp/skills/targets.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp_api_client/__init__.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp_api_client/client.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/src/wp_api_client/openapi.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/conftest.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_backend_openapi_contract.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_capability_commands.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_openapi_help.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_openapi_strict.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_preview_command.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_screenshot_command.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_skill_management.py +0 -0
- {web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/verify_skill_distribution.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: web-presentation-cli
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Summary: Web Presentation CLI - 面向 AI 演示文稿创作平台的命令行与 Agent 工具包
|
|
5
5
|
Project-URL: Homepage, https://github.com/LLMxPM/web-presentation-agent-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/LLMxPM/web-presentation-agent-kit
|
|
@@ -116,7 +116,7 @@ wp --raw project list
|
|
|
116
116
|
|
|
117
117
|
Skill 与 CLI 一起发布,但使用独立版本。`wp skill status` 会识别缺失、过期、较新、不兼容、用户修改和未受管理等状态;普通升级不会覆盖用户修改,`--force` 会先保留同级备份。CLI 升级不会隐式改写已安装 Skill,需要重新运行 `wp skill install` 完成同步。
|
|
118
118
|
|
|
119
|
-
当前版本关系:CLI `0.3.
|
|
119
|
+
当前版本关系:CLI `0.3.1` 内置 `web-presentation` Skill `1.3.2`,Skill 声明的 CLI 兼容范围为 `>=0.3.0,<0.4.0`。构建时会把这组关系与规范化内容 SHA-256 写入 manifest。
|
|
120
120
|
|
|
121
121
|
Windsurf 不属于本地目录安装目标。`wp skill export` 生成的标准 ZIP 可用于支持本地上传的产品;CLI 不从 URL 或第三方仓库下载 Skill。
|
|
122
122
|
|
|
@@ -158,6 +158,10 @@ wp job wait <job_id>
|
|
|
158
158
|
写入命令支持 `--idempotency-key <key>`;网络超时后需要重放同一业务请求时复用原 key,不要把同一个 key 用于不同请求。
|
|
159
159
|
|
|
160
160
|
|
|
161
|
+
### 0.3.1 行为变更
|
|
162
|
+
|
|
163
|
+
`wp component list` 表格新增「引用路径」列,未发布组件显示 `未发布`;`--json` 的组件列表与建议组件投影新增 `import_path` 与 `import_statement` 字段,取自 Backend 返回,供页面源码直接拼接 `@workspace-components/<code>/v/<version_no>` 别名。内置 Skill `1.3.2` 同步补充工作空间组件的版本化引用契约,禁止引用草稿、自增 ID 或本地相对路径。
|
|
164
|
+
|
|
161
165
|
### 0.3.0 行为变更
|
|
162
166
|
|
|
163
167
|
`--json` 现在输出面向 Agent 的稳定字段投影;`--raw` 输出完整 Backend 原始 JSON,二者不能同时使用。Project、Page、Component、Asset、Theme、Style、Validation 和 Preview 命令按场景区分列表、详情、源码和诊断字段;成功响应不再注入 `_client` 元数据。预览地址通过 `wp preview get` 获取,属于短期 Preview Artifact。
|
|
@@ -101,7 +101,7 @@ wp --raw project list
|
|
|
101
101
|
|
|
102
102
|
Skill 与 CLI 一起发布,但使用独立版本。`wp skill status` 会识别缺失、过期、较新、不兼容、用户修改和未受管理等状态;普通升级不会覆盖用户修改,`--force` 会先保留同级备份。CLI 升级不会隐式改写已安装 Skill,需要重新运行 `wp skill install` 完成同步。
|
|
103
103
|
|
|
104
|
-
当前版本关系:CLI `0.3.
|
|
104
|
+
当前版本关系:CLI `0.3.1` 内置 `web-presentation` Skill `1.3.2`,Skill 声明的 CLI 兼容范围为 `>=0.3.0,<0.4.0`。构建时会把这组关系与规范化内容 SHA-256 写入 manifest。
|
|
105
105
|
|
|
106
106
|
Windsurf 不属于本地目录安装目标。`wp skill export` 生成的标准 ZIP 可用于支持本地上传的产品;CLI 不从 URL 或第三方仓库下载 Skill。
|
|
107
107
|
|
|
@@ -143,6 +143,10 @@ wp job wait <job_id>
|
|
|
143
143
|
写入命令支持 `--idempotency-key <key>`;网络超时后需要重放同一业务请求时复用原 key,不要把同一个 key 用于不同请求。
|
|
144
144
|
|
|
145
145
|
|
|
146
|
+
### 0.3.1 行为变更
|
|
147
|
+
|
|
148
|
+
`wp component list` 表格新增「引用路径」列,未发布组件显示 `未发布`;`--json` 的组件列表与建议组件投影新增 `import_path` 与 `import_statement` 字段,取自 Backend 返回,供页面源码直接拼接 `@workspace-components/<code>/v/<version_no>` 别名。内置 Skill `1.3.2` 同步补充工作空间组件的版本化引用契约,禁止引用草稿、自增 ID 或本地相对路径。
|
|
149
|
+
|
|
146
150
|
### 0.3.0 行为变更
|
|
147
151
|
|
|
148
152
|
`--json` 现在输出面向 Agent 的稳定字段投影;`--raw` 输出完整 Backend 原始 JSON,二者不能同时使用。Project、Page、Component、Asset、Theme、Style、Validation 和 Preview 命令按场景区分列表、详情、源码和诊断字段;成功响应不再注入 `_client` 元数据。预览地址通过 `wp preview get` 获取,属于短期 Preview Artifact。
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
- `props` 字段与 `defineProps` 一致,字段的 `type`、`label`、`default` 和 `options` 必须真实可用;预览值不要放在 Schema 根节点。
|
|
29
29
|
- 支持的 prop 类型以当前平台规范为准,常见为 `string`、`textarea`、`number`、`boolean`、`select`、`json`。
|
|
30
30
|
- `slots` 使用声明式 `text`、`html`、`component` 节点;slot component 只能引用版本化 Runtime Kit 或已发布工作空间组件,不能引用 Runtime 私有路径或动态 import。
|
|
31
|
+
- 引用工作空间组件(作为 slot component 或在组件源码中引用子组件)时,必须使用 `@workspace-components/<component_code>/v/<version_no>`,且被引用组件必须为已发布的正式版本(`current_version_no > 0`),禁止引用草稿或使用自增主键 ID。
|
|
31
32
|
- `mocks` 只保存 JSON/文本级静态值,不放函数、表达式、HTTP 请求或 component-preview 内部能力。
|
|
32
33
|
- `presets` 只写覆盖值;key 稳定、label 清晰,优先提供 2~3 个高质量真实场景。
|
|
33
34
|
- 资源名、默认值和 mock 数据必须来自真实工具结果;没有资源时使用空值或明确占位,不编造名称。
|
|
@@ -10,6 +10,18 @@
|
|
|
10
10
|
- 只能引用平台真实返回的版本化 Runtime Kit 能力、已发布工作空间组件、可见工作空间资源和自身代码。
|
|
11
11
|
- Tailwind class 必须以完整静态字符串出现在模板、脚本常量或顶层枚举映射中;禁止 `text-${tone}`、`from-${color}` 等运行时拼接。Arbitrary value 也要以完整静态类出现在源码中。
|
|
12
12
|
|
|
13
|
+
## 工作空间组件引用契约
|
|
14
|
+
|
|
15
|
+
- 页面源码引用工作空间组件时,统一使用已发布组件的版本化别名:
|
|
16
|
+
```ts
|
|
17
|
+
import <ImportName> from '@workspace-components/<component_code>/v/<version_no>'
|
|
18
|
+
```
|
|
19
|
+
- 约束说明:
|
|
20
|
+
- 路径中的编码必须是组件业务编码 `code`(如 `CMP20260503001`),不能使用自增 ID、本地相对路径或 `@/` 别名;
|
|
21
|
+
- 版本号必须是当前大于 0 的正式发布版本 `current_version_no`,未发布或草稿状态的组件不可在页面中引用;
|
|
22
|
+
- 导入标识符优先使用组件元数据中的 `import_name`(或展示名 PascalCase);
|
|
23
|
+
- 可直接通过 `wp component get <component_id>` 或 `wp component list` 查询已发布的 `import_path` 与 `import_statement`。
|
|
24
|
+
|
|
13
25
|
## 画布和布局
|
|
14
26
|
|
|
15
27
|
- 页面根部优先使用项目建议的已发布页面组件,其次是工作空间已发布页面组件,最后才是版本化 `DefaultContainer`。
|
|
@@ -47,11 +47,29 @@ def list_components_cmd(ctx: click.Context, page: int, page_size: int, keyword:
|
|
|
47
47
|
if ctx.obj.get("as_json"):
|
|
48
48
|
output_result(ctx, result, profile="component_list")
|
|
49
49
|
return
|
|
50
|
+
def _resolve_import_path(item: dict) -> str:
|
|
51
|
+
if item.get("import_path"):
|
|
52
|
+
return str(item["import_path"])
|
|
53
|
+
code = item.get("code")
|
|
54
|
+
version_no = item.get("current_version_no")
|
|
55
|
+
if code and isinstance(version_no, int) and version_no > 0:
|
|
56
|
+
return f"@workspace-components/{code}/v/{version_no}"
|
|
57
|
+
if isinstance(version_no, int) and version_no <= 0:
|
|
58
|
+
return "未发布"
|
|
59
|
+
return "-"
|
|
60
|
+
|
|
50
61
|
rows = [
|
|
51
|
-
[
|
|
62
|
+
[
|
|
63
|
+
item.get("id"),
|
|
64
|
+
item.get("import_name", "-"),
|
|
65
|
+
item.get("name", "-"),
|
|
66
|
+
item.get("component_type", "-"),
|
|
67
|
+
item.get("status", "-"),
|
|
68
|
+
_resolve_import_path(item),
|
|
69
|
+
]
|
|
52
70
|
for item in result.get("items", [])
|
|
53
71
|
]
|
|
54
|
-
print_table("组件列表", ["ID", "导入标识", "名称", "类型", "状态"], rows)
|
|
72
|
+
print_table("组件列表", ["ID", "导入标识", "名称", "类型", "状态", "引用路径"], rows)
|
|
55
73
|
except ApiClientError as err:
|
|
56
74
|
handle_api_error("获取组件列表失败", err)
|
|
57
75
|
|
|
@@ -80,6 +80,8 @@ COMPONENT_LIST_FIELDS = (
|
|
|
80
80
|
"status",
|
|
81
81
|
"created_at",
|
|
82
82
|
"updated_at",
|
|
83
|
+
"import_path",
|
|
84
|
+
"import_statement",
|
|
83
85
|
)
|
|
84
86
|
SUGGESTED_COMPONENT_FIELDS = (
|
|
85
87
|
"id",
|
|
@@ -91,6 +93,8 @@ SUGGESTED_COMPONENT_FIELDS = (
|
|
|
91
93
|
"current_version_no",
|
|
92
94
|
"available",
|
|
93
95
|
"unavailable_reason",
|
|
96
|
+
"import_path",
|
|
97
|
+
"import_statement",
|
|
94
98
|
)
|
|
95
99
|
COMPONENT_DETAIL_FIELDS = COMPONENT_LIST_FIELDS + ("content", "preview_schema", "draft_hash")
|
|
96
100
|
|
|
@@ -44,7 +44,7 @@ def test_cli_version() -> None:
|
|
|
44
44
|
result = CliRunner().invoke(main, ["--version"])
|
|
45
45
|
|
|
46
46
|
assert result.exit_code == 0, result.output
|
|
47
|
-
assert result.output.strip() == "wp, version 0.3.
|
|
47
|
+
assert result.output.strip() == "wp, version 0.3.1"
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
def test_raw_option_is_exposed_and_mutually_exclusive_with_json() -> None:
|
|
@@ -344,3 +344,55 @@ def test_command_idempotency_key_is_passed_to_client(monkeypatch, tmp_path) -> N
|
|
|
344
344
|
assert result.exit_code == 0, result.output
|
|
345
345
|
assert client_class.call_args.kwargs["idempotency_key"] == "replay-key"
|
|
346
346
|
fake_client.post.assert_called_once_with("/projects", json_data={"name": "演示项目", "description": None})
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
def test_component_list_displays_import_path_column(monkeypatch, tmp_path) -> None:
|
|
350
|
+
"""组件列表表格必须包含'引用路径'列并正确展示已发布与未发布组件的路径提示。"""
|
|
351
|
+
|
|
352
|
+
monkeypatch.setattr(config_module, "CONFIG_DIR", tmp_path)
|
|
353
|
+
monkeypatch.setattr(config_module, "CONFIG_FILE", tmp_path / "config.json")
|
|
354
|
+
save_config(CliConfig(current_profile="default", profiles={"default": ProfileConfig(api_url="http://localhost:8000", pat="test-pat", default_workspace_id=1)}))
|
|
355
|
+
|
|
356
|
+
fake_client = MagicMock()
|
|
357
|
+
fake_client.get.return_value = {
|
|
358
|
+
"items": [
|
|
359
|
+
{
|
|
360
|
+
"id": 1,
|
|
361
|
+
"code": "CMP001",
|
|
362
|
+
"import_name": "MetricCard",
|
|
363
|
+
"name": "指标卡",
|
|
364
|
+
"component_type": "content",
|
|
365
|
+
"status": "active",
|
|
366
|
+
"current_version_no": 2,
|
|
367
|
+
"import_path": "@workspace-components/CMP001/v/2",
|
|
368
|
+
"import_statement": "import MetricCard from '@workspace-components/CMP001/v/2'",
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
"id": 2,
|
|
372
|
+
"code": "CMP002",
|
|
373
|
+
"import_name": "DraftCard",
|
|
374
|
+
"name": "草稿卡",
|
|
375
|
+
"component_type": "content",
|
|
376
|
+
"status": "active",
|
|
377
|
+
"current_version_no": 0,
|
|
378
|
+
},
|
|
379
|
+
],
|
|
380
|
+
"total": 2,
|
|
381
|
+
"page": 1,
|
|
382
|
+
"page_size": 50,
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
with patch("wp.commands.common.ApiClient", return_value=fake_client):
|
|
386
|
+
table_result = CliRunner(env={"COLUMNS": "120"}).invoke(main, ["component", "list"])
|
|
387
|
+
json_result = CliRunner().invoke(main, ["--json", "component", "list"])
|
|
388
|
+
|
|
389
|
+
assert table_result.exit_code == 0, table_result.output
|
|
390
|
+
assert "引用路径" in table_result.output
|
|
391
|
+
assert "@workspace-components/CMP001/v/2" in table_result.output
|
|
392
|
+
assert "未发布" in table_result.output
|
|
393
|
+
|
|
394
|
+
assert json_result.exit_code == 0, json_result.output
|
|
395
|
+
data = json.loads(json_result.output)
|
|
396
|
+
assert data["items"][0]["import_path"] == "@workspace-components/CMP001/v/2"
|
|
397
|
+
assert data["items"][0]["import_statement"] == "import MetricCard from '@workspace-components/CMP001/v/2'"
|
|
398
|
+
assert data["items"][1].get("import_path") is None
|
|
@@ -124,3 +124,49 @@ def test_json_and_raw_are_mutually_exclusive() -> None:
|
|
|
124
124
|
|
|
125
125
|
assert result.exit_code != 0
|
|
126
126
|
assert "不能同时使用" in result.output
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def test_component_projection_includes_import_usage() -> None:
|
|
130
|
+
"""组件列表和详情投影中必须保留 import_path 和 import_statement。"""
|
|
131
|
+
|
|
132
|
+
component_list = project_response(
|
|
133
|
+
{
|
|
134
|
+
"items": [
|
|
135
|
+
{
|
|
136
|
+
"id": 4,
|
|
137
|
+
"code": "CMP001",
|
|
138
|
+
"name": "卡片",
|
|
139
|
+
"import_name": "MyCard",
|
|
140
|
+
"current_version_no": 1,
|
|
141
|
+
"import_path": "@workspace-components/CMP001/v/1",
|
|
142
|
+
"import_statement": "import MyCard from '@workspace-components/CMP001/v/1'",
|
|
143
|
+
"content": "<template />",
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
"page": 1,
|
|
147
|
+
"page_size": 20,
|
|
148
|
+
"total": 1,
|
|
149
|
+
},
|
|
150
|
+
"component_list",
|
|
151
|
+
)
|
|
152
|
+
assert component_list["items"][0]["import_path"] == "@workspace-components/CMP001/v/1"
|
|
153
|
+
assert component_list["items"][0]["import_statement"] == "import MyCard from '@workspace-components/CMP001/v/1'"
|
|
154
|
+
assert "content" not in component_list["items"][0]
|
|
155
|
+
|
|
156
|
+
component_detail = project_response(
|
|
157
|
+
{
|
|
158
|
+
"id": 4,
|
|
159
|
+
"code": "CMP001",
|
|
160
|
+
"name": "卡片",
|
|
161
|
+
"import_name": "MyCard",
|
|
162
|
+
"current_version_no": 1,
|
|
163
|
+
"import_path": "@workspace-components/CMP001/v/1",
|
|
164
|
+
"import_statement": "import MyCard from '@workspace-components/CMP001/v/1'",
|
|
165
|
+
"content": "<template />",
|
|
166
|
+
"preview_schema": "{}",
|
|
167
|
+
"draft_hash": "hash123",
|
|
168
|
+
},
|
|
169
|
+
"component_detail",
|
|
170
|
+
)
|
|
171
|
+
assert component_detail["import_path"] == "@workspace-components/CMP001/v/1"
|
|
172
|
+
assert component_detail["import_statement"] == "import MyCard from '@workspace-components/CMP001/v/1'"
|
|
File without changes
|
{web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/_skill_sources/web-presentation/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/test_backend_openapi_contract.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{web_presentation_cli-0.3.0 → web_presentation_cli-0.3.1}/tests/verify_skill_distribution.py
RENAMED
|
File without changes
|