Skip to content

云能力不用等新版本就能出现在定制中心(cloud@1 档案与表单) (#1527) - #1535

Merged
jinjunnn merged 11 commits into
alphafrom
feat/1527-cloud-profile-form
Oct 15, 2026
Merged

jinjunnn merged 11 commits into
alphafrom
feat/1527-cloud-profile-form

Conversation

@jinjunnn

Copy link
Copy Markdown
Owner

用户能看到什么

目录里新增一种「云能力」组件(cloud@1):目录写明要填哪些输入,定制中心就照着显示表单、发起云端任务、取回结果和生成的文件,不用为每个新云能力发新版。发起前写明这次预留多少钱、按实际用量结算;安装授权框如实列出「发送任务到云端」。原有云能力卡片不变。首批卡片(网页生成、图片生成)要等 0.1.20 发出后由 alpha-web#270 上架。

实现

  • 宿主合同 cloud@1 档案(decoder + schema + 合同文档,fixed.value 受 4096 UTF-8 字节界约束)。
  • 定制中心按档案渲染表单、派发、取回产物;授权文案。
  • 跨仓 checkpoint:alpha-web#273(b87abdf)已按本分支的 checkpoint 1167048b8 重生宿主产物;本 PR 把 vendored alpha-web 产物 pin 到 b87abdf(与 b02fc0fd 同 tree)。合并后 alpha-web 侧把 pin 改指本 PR 的 squash 提交并关闭过渡窗口(alpha-web#270)。

审查与门

  • Claude fable 合并前审计 R1(L,预算 ≤3):无 Blocker/Major;3 条 Minor 已修(新测试登记 gate-files 精确条数、fixed.value 字节口径写进合同文档、CHANGELOG 措辞)。
  • bash scripts/alpha-check.sh rc=0(本机)。

Fixes #1527
Refs jinjunnn/alpha-work#114

🤖 Generated with Claude Code

jinjunnn and others added 11 commits October 15, 2026 01:05
… extraction (#1527)

Exact envelopes, input gating, run saving and result/artifact display for
research/docs/word/excel/powerpoint, office gating without an Office
identity, code-review diff and upload contracts, foreign job events,
failed terminals and not-ready gating. Written against unmodified
cloud-dispatch-box.tsx so the extraction must pass them unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…le.ts (#1527)

Mechanical move of beginJob/finish/cancelJob and dispatchError out of
cloud-dispatch-box.tsx so the catalog-described form can share them
(baseline section 2.4, R1-7). The legacy box keeps its own consent
reset that beginJob used to perform. The freeze tests from the previous
commit pass unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er (#1527)

Registers cloud@1 (F3) in the host registry with a closed form schema:
pipelineKind, 0..16 text/textarea/select fields, 0..16 fixed inputs,
display-only holdUsd and 1..16 upstreamData lines. The decoder mirrors
every schema bound and enforces the three invariants the schema cannot
express (unique names across fields and fixed, unique options with
default among them, minChars <= maxChars); any violation refuses the
whole payload. A cloud payload derives no host support token. Adds the
cloud-v1 corpus case, regenerates the artifact and documents the profile
in CONTRACT.md. Schema/decoder bound parity is pinned by
cloud-payload-v1.test.ts reading bounds from the published schema.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… authorization (#1527)

- package-installability: compatible cloud roots project the decoded
  behavior as CatalogPackageViewV1.cloud (F4); cloud component names
  pass the same fs-safe gate as skill/agent/command.
- ext-package-lifecycle: cloud profile -> cloud child kind, tx key
  cloud--<name> (same key as legacy cloud receipts).
- package-admission: packageAuthorizationCapabilitiesV1 derives
  [cloud:dispatch] from the verified profile once; confirmation diff,
  plan preview, capabilityDigest binding and transaction items all
  consume it (I10). Cloud routes to buildCloudTxItems.
- ext-package-tx-builders: receipts-only buildCloudTxItems.
- ext-package-uninstall: cloud arm removes grants.json idempotently.
- shared/package-admission: plan item kind gains cloud.

package-cloud.test.ts drives the corpus cloud-v1 package through the
production evaluator, admission, real transaction, ledger and uninstall.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… packages (#1527)

- cloud-form-box.tsx (new): renders cloud@1 fields in order as text,
  textarea or select (default preselected), labels/help/upstreamData as
  text nodes only (I4), fixed inputs merged from the signed payload and
  never rendered (I5), gating on required and trimmed minChars, envelope
  {autonomy, kind: pipelineKind, input, constraints} without budget
  through window.api.cloud.dispatch, shared job lifecycle for status,
  saving, artifacts and cancel, display-only hold line.
- cloud-job-lifecycle.ts: dispatchError maps pipeline_input_invalid and
  unknown_pipeline_kind to a refresh-or-update message.
- extension-hub.tsx: cloud section lists cloud packages beside legacy
  cloud entries; extension-detail.tsx: package detail mounts the form
  when the safe view carries cloud.
- i18n en/zh/zht: cloudErrRequirementsChanged, cloudHold.
- Tests: cloud-form-box.test.ts; ext-package-detail-wiring gains the
  production hub/detail path for a cloud package (14 -> 15).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-type residue rows (#1527)

- gate-files.tsv: cloud-payload-v1.test.ts (exact 9); wiring prose 15.
- alpha-path-residue.tsv: the four contract/main files whose lines
  moved now list their application/vnd.alpha.* media-type identifiers at
  the current lines, including the new cloud.v1 identifier rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1527)

The required-select gate masked the trimmed-minChars gate; choosing the
select first makes a dropped minChars check turn the test red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1527)

- docs/contracts/host-extension-package-v1.md: six profiles, the cloud
  view projection and authorization derivation, and the expected
  cross-repository reverse-pin red until alpha-web republishes and this
  repository re-vendors (same hop as #840/#1312).
- CHANGELOG [Unreleased] Added entry.
- ui-mac 0.1.19 -> 0.1.20 with the two consumer-pin fixtures and the
  bun.lock workspace version, as shipped-version-propagation requires.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Return re-vendor of the alpha-web producer artifact that pins this branch's
host contract checkpoint 1167048
(alpha-web#270, transition pair d41c5fdc… -> 485f1de9…). The vendored host
artifact copy is byte-identical to the live host artifact again.

- vendor pin: alpha-web@b02fc0fd8b71f9b17d621bceb3de9fb9698aa425,
  artifact 95da7a8b…, 40 files (no file added or removed); also absorbs the
  alpha-web#265 declaration-schema change (two officialRecipe consts) that
  was never re-vendored.
- closure test: the host registry now lists six profiles including cloud;
  producer mappings stay five and cloud stays excluded until the compiler
  half of alpha-web#270.

After alpha-web squash-merges #270, replace b02fc0fd… with the squash commit
in vendor-alpha-contracts.ts, the lock, extension-package-artifact.test.ts and
vendor-lock-degradation.test.ts (bytes and artifactSha256 unchanged).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed.value byte bound, align changelog wording (#1527)

- gate-files.tsv: exact counts for cloud-dispatch-box (24),
  package-cloud (4) and cloud-form-box (9), confirmed by
  assert-gate-files.sh --update writing nothing else.
- host-extension-package-v1.md: fixed[].value is bound by the host's
  4096 UTF-8 byte maxStringBytes (decoder.ts:1755), not only the
  schema's 4096-character maxLength; producers measure bytes.
- CHANGELOG: use the UI label for cloud:dispatch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…b87abdf (#1527)

Checkpoint step 3: alpha-web#273 squash-merged as b87abdf with the same tree as b02fc0fd.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jinjunnn
jinjunnn merged commit 133f463 into alpha Oct 15, 2026
@jinjunnn
jinjunnn deleted the feat/1527-cloud-profile-form branch October 15, 2026 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[REQ-235][CODE] 让定制中心按目录描述画云能力表单并派发,旧云卡片保持原样

1 participant