Verification
August 24, 2026 · View on GitHub
Simulated (CI gate)
pnpm test
No Tencent credentials. HTTP is mocked at the process boundary (tests/mock/http.ts); defineTool, Loader, SSE assembly, and credential error codes are real.
P0
-
sim-sign— TC3 canonical string differs after host/vendor switch (fixed payload) -
sim-cred-missing— no Tool Key: route remains, call isMISSING_CREDENTIAL -
sim-cred-bad—INVALID_CREDENTIAL; key not in the error -
sim-llm-sse— usage before finish; tool-callargumentsis a JSON string; name survives -
llm-loop— serialize never sends null content; reasoning_content on tool-call turns; empty SSE id/name does not wipe identity -
sim-web-sse— last-frameAnswer;presentResultiscard: 'web', kind: 'search' -
sim-plugin-list—PageNumberstarts at 0; second page kept -
sim-plugin-filter— listAllowExternalAccess=falsebut detail URL kept; no URL / empty header dropped -
sim-plugin-api-sse— canonical value is the last frame -
sim-plugin-mcp-405— wrong transport → 405, no silent retry -
sim-media—saved_filesexists on disk -
sim-hmr— disposing the plugin fiber removes tools -
sim-pack—node lib/without tsx; invalid Config non-zero;lib/client.jsis a ModuleLoader factory;dsh.client+exports["./client"] -
sim-export— function plugins includingadp-corehave nodefault;unwrapExportsusesapply, not theAdpServiceclass -
sim-login-url-proxy— GET/POST proxy returns JSON; empty/non-JSON client parse does not throw -
sim-patch-ids—cordis.patch.ymlinsert ids are unique; applying the layer twice isduplicate loader entry id: adp-core -
sim-login-url—fetchLoginUrlposts{login_platform:"oneid"}and unwrapslogin_url -
sim-site-settings— site section injects['settings', 'adp']; settings.update failure is JSON 500, not an empty 400 -
sim-plugin-item-slot-key— clientsettings.plugin.itemregister useskey: 'adp-core'(DSH ≥ 0.1.0-rc.7 keyed slot);lib/client.jsships that key -
normalizeModelList— flatModelIdand nestedModelBasic.ModelIdboth yield ids; emptyModelBasicis skipped
P1
-
sim-provision— CreateApp → Agent → CreateReleaseReleaseId→ DescribeReleaseSummary{ AppId, ReleaseId }; then FieldMask secret -
sim-spaceid-scope— cloud AKSK fills SpaceId on lists, not DescribeApp / DescribeAgentSummaryList -
sim-adp-call-json-string— stringifiedpayloadis parsed, not dropped as{} -
sim-adp-call-contract—adp_list_actionsships required/hint; missing ModelScene and ChatCompletions fail locally; GetAppSecret remaps AppId→AppBizId -
sim-ask-name— CJK provision name registersadp_ask_claw-demo(the advertised slug) -
sim-release-already— CreateRelease 450027 returns DescribeLatestRelease instead of an error -
sim-appkey-mask— without FieldMaskSecretInfoempty; with it, AppKey -
sim-appkey-absent— failure text is “cannot get AppKey”; no fake ask tool -
sim-ask-sse— interleaved thought+reply; model sees reply only -
sim-ask-file— ClawType=filesaved into workspace -
sim-mutating-gate— DeleteApp unapproved does not call the control plane -
sim-skill-empty-url— listed,getis not Description-as-body -
sim-skill-md—SkillMarkdownUrlbecomes markdown content
Loader composition lives in tests/composition/. Product-visible plugins are started through Loader + mock hosts, not a hand-rolled ctx.plugin of the row under test alone (stubs for credentials / systemPrompt / llm / web / tools / skills are test infrastructure).
with-key (optional)
pnpm test:live
Skips when env is missing. Does not replace the matching sim-*.
Suggested env: ADP_API_KEY, and for catalog tests ADP_SECRET_ID / ADP_SECRET_KEY. Public-cloud e2e (tests/live/cloud-e2e.test.ts) needs all three and sets vendor: ChinaTencentCloud.
Live checks (manual or test:live):
-
adp:Hunyuan/hy3one tool-using turn -
web_searchvia Hunyuan; card replays - public-cloud workspace picked (not
default_space);llm.modelsids matchDescribeModelList/ModelBasic - one API plugin and one MCP plugin; cancel stops the call
- generation tools return
saved_fileson disk - no AKSK: model and search still work
- no Tool Key: catalog may load, calls are
MISSING_CREDENTIAL - unload the plugin row → tools / SkillProvider / MCP sessions gone
-
skills-adplists plaza entries (DescribeSkillSummaryListwithout Perspective) -
control-adpadp_list_actions+ readadp_call; mutating stays gated -
agents-adpCreateApp → CreateAgent → CreateRelease → pollReleaseId→ SSE ask; delete throwawaydsh-e2e-*apps. If CreateApp is4900001(account quota), live-checkDescribeReleaseSummarywith a realReleaseIdon an existing running app, then SSE ask.