@wowok/agent-mcp 3.4.4 → 3.4.5
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.
- package/dist/.build-stamp.json +3 -3
- package/dist/chain-semantics/composition-truth.js +1 -1
- package/dist/composition/audit.js +1 -1
- package/dist/composition/compile.js +1 -1
- package/dist/composition/emit-phases.js +1 -1
- package/dist/composition/guard-fill.js +1 -1
- package/dist/composition/input-normalize.js +1 -1
- package/dist/composition/materialize.js +1 -1
- package/dist/composition/mode-gates.js +1 -1
- package/dist/composition/param-disclosure.js +1 -1
- package/dist/composition/plan-run-store.js +1 -0
- package/dist/composition/reflux.js +1 -1
- package/dist/composition/role-bindings.js +1 -0
- package/dist/composition/shape-expand.js +1 -1
- package/dist/composition/supply-chain-emit.js +1 -1
- package/dist/config/judgment.d.ts +13 -25
- package/dist/config/judgment.js +1 -1
- package/dist/config/match-policy-file.js +1 -1
- package/dist/config/rule-engine.d.ts +4 -10
- package/dist/config/rule-engine.js +1 -1
- package/dist/config/template-params.js +1 -1
- package/dist/evaluation/engine.js +1 -1
- package/dist/experience/realtime-feedback.js +1 -1
- package/dist/extensions/capability.js +1 -1
- package/dist/graph/onchain/expand.js +1 -1
- package/dist/graph/onchain/exposure.js +1 -1
- package/dist/harness/forward-roster-preflight.js +1 -0
- package/dist/keeper/detectors.js +1 -1
- package/dist/knowledge/allocator-rail-verifier.js +1 -1
- package/dist/knowledge/arb-operation-face.js +1 -1
- package/dist/knowledge/arbitration-rail-verifier.js +1 -1
- package/dist/knowledge/audit-rules.d.ts +17 -1
- package/dist/knowledge/audit-rules.js +1 -1
- package/dist/knowledge/baselines/rules/alloc_audit.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/allocation.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/arb.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/arbitration.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/bridge.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/contact.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/demand.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/graph.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/guard.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/machine.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/oracle.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/order.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/payment.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/permission.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/personal.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/plan.json +153 -33
- package/dist/knowledge/baselines/rules/plan.json.good +153 -33
- package/dist/knowledge/baselines/rules/plan.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/progress.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/proof.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/registrar.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/repository.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/resource.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/reward.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/service.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/treasury.json.good.sha256 +1 -0
- package/dist/knowledge/baselines/rules/util.json.good.sha256 +1 -0
- package/dist/knowledge/builtin-templates.d.ts +1 -1
- package/dist/knowledge/builtin-templates.js +1 -1
- package/dist/knowledge/discount-threshold.js +1 -1
- package/dist/knowledge/fee-param-bindings.js +1 -1
- package/dist/knowledge/getting-started.js +1 -1
- package/dist/knowledge/guard-binding-table.js +1 -1
- package/dist/knowledge/guard-design-patterns.js +1 -1
- package/dist/knowledge/guard-templates.d.ts +3 -2
- package/dist/knowledge/guard-templates.js +1 -1
- package/dist/knowledge/index.js +1 -1
- package/dist/knowledge/industry-registry.js +1 -1
- package/dist/knowledge/jsonrpc-enum.js +1 -1
- package/dist/knowledge/knob-docs.js +1 -1
- package/dist/knowledge/machine-topology.js +1 -1
- package/dist/knowledge/param-schema.js +1 -1
- package/dist/knowledge/param-tiers.js +1 -1
- package/dist/knowledge/path-oracle/products/alibaba-1688.js +1 -1
- package/dist/knowledge/path-oracle/products/amazon.js +1 -1
- package/dist/knowledge/path-oracle/products/booking-com.js +1 -1
- package/dist/knowledge/path-oracle/products/contra.js +1 -1
- package/dist/knowledge/path-oracle/products/costco.js +1 -1
- package/dist/knowledge/path-oracle/products/duoduo-maicai.js +1 -1
- package/dist/knowledge/path-oracle/products/etsy.js +1 -1
- package/dist/knowledge/path-oracle/products/gamefound.js +1 -1
- package/dist/knowledge/path-oracle/products/gofundme.js +1 -1
- package/dist/knowledge/path-oracle/products/klook.js +1 -1
- package/dist/knowledge/path-oracle/products/ninety-nine-designs.js +1 -1
- package/dist/knowledge/path-oracle/products/pinduoduo-kuaituantuan.js +1 -1
- package/dist/knowledge/path-oracle/products/shansong.js +1 -1
- package/dist/knowledge/path-oracle/products/taobao-presale.js +1 -1
- package/dist/knowledge/path-oracle/products/upwork-catalog.js +1 -1
- package/dist/knowledge/path-oracle/products/upwork.js +1 -1
- package/dist/knowledge/pattern-resolutions.js +1 -1
- package/dist/knowledge/protocol-facts.js +1 -1
- package/dist/knowledge/publish-gate.js +1 -1
- package/dist/knowledge/publish-surface-contract.js +1 -1
- package/dist/knowledge/template-loader.js +1 -1
- package/dist/knowledge/template-registry.js +1 -1
- package/dist/knowledge/template-scanner.js +1 -1
- package/dist/knowledge/time-units.js +1 -0
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/knowledge/workflow-guidance.js +1 -1
- package/dist/monitor/MonitorLoop.js +1 -1
- package/dist/participation/radar-core.js +1 -1
- package/dist/playbooks/service-build/business-puzzle.js +1 -1
- package/dist/playbooks/service-build/machine-panorama.js +1 -1
- package/dist/playbooks/service-build/merchant-guide.js +1 -1
- package/dist/playbooks/service-build/migration-planner.js +1 -1
- package/dist/playbooks/service-build/object-panorama.js +1 -1
- package/dist/playbooks/service-build/participation-radar.js +1 -1
- package/dist/playbooks/service-build/relationship-profile.js +1 -1
- package/dist/playbooks/service-build/service-panorama.js +1 -1
- package/dist/playbooks/service-build/service-quote.js +1 -1
- package/dist/review/index.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/benchmark-migration/index.d.ts +110 -2
- package/dist/schema/benchmark-migration/index.js +1 -1
- package/dist/schema/boundary-coercion.js +1 -0
- package/dist/schema/call/arbitration.js +1 -1
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/handler.js +1 -1
- package/dist/schema/call/machine.d.ts +56 -8
- package/dist/schema/call/order.d.ts +37 -10
- package/dist/schema/call/order.js +1 -1
- package/dist/schema/call/permission.d.ts +210 -30
- package/dist/schema/call/personal.d.ts +56 -8
- package/dist/schema/call/progress.d.ts +28 -4
- package/dist/schema/call/semantic.js +1 -1
- package/dist/schema/call/service.d.ts +84 -12
- package/dist/schema/common/index.d.ts +14 -2
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/evaluation/index.js +1 -1
- package/dist/schema/goal/index.d.ts +1 -1
- package/dist/schema/goal/planning.js +1 -1
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +168 -24
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +655 -22
- package/dist/schema/operations.js +1 -1
- package/dist/schema/persona/index.d.ts +22 -110
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema/workflow/index.d.ts +4 -0
- package/dist/schema/workflow/index.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/benchmark_migration_operation.schema.json +1 -1
- package/dist/schemas/evaluation_operation.schema.json +1 -1
- package/dist/schemas/goal_operation.schema.json +1 -1
- package/dist/schemas/guard_rebind_replacement.schema.json +1 -0
- package/dist/schemas/index.json +1 -1
- package/dist/schemas/messenger_operation.schema.json +1 -1
- package/dist/schemas/onchain_operations.schema.json +1 -1
- package/dist/schemas/onchain_operations_allocation.schema.json +1 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +1 -1
- package/dist/schemas/onchain_operations_contact.schema.json +1 -1
- package/dist/schemas/onchain_operations_demand.schema.json +1 -1
- package/dist/schemas/onchain_operations_gen_passport.schema.json +1 -1
- package/dist/schemas/onchain_operations_machine.schema.json +1 -1
- package/dist/schemas/onchain_operations_order.schema.json +1 -1
- package/dist/schemas/onchain_operations_permission.schema.json +1 -1
- package/dist/schemas/onchain_operations_personal.schema.json +1 -1
- package/dist/schemas/onchain_operations_progress.schema.json +1 -1
- package/dist/schemas/onchain_operations_proof.schema.json +1 -1
- package/dist/schemas/onchain_operations_repository.schema.json +1 -1
- package/dist/schemas/onchain_operations_reward.schema.json +1 -1
- package/dist/schemas/onchain_operations_service.schema.json +1 -1
- package/dist/schemas/onchain_operations_treasury.schema.json +1 -1
- package/dist/schemas/persona_operation.schema.json +1 -1
- package/dist/schemas/time_convert.schema.json +1 -0
- package/dist/schemas/wip_file.schema.json +1 -1
- package/dist/schemas/workflow_operation.schema.json +1 -1
- package/dist/tools/handlers/benchmark-migration.js +1 -1
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/fund-rail-recipe.js +1 -1
- package/dist/tools/handlers/guard-rebind-replacement.js +1 -0
- package/dist/tools/handlers/local.js +1 -1
- package/dist/tools/handlers/mark-namespace.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/handlers/query.js +1 -1
- package/dist/tools/handlers/settle-sweep.js +1 -1
- package/dist/tools/handlers/time-convert.js +1 -0
- package/dist/tools/handlers/wip.js +1 -1
- package/dist/tools/handlers/workflow.js +1 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/wip-verify-ledger.js +1 -1
- package/dist/tools/wrap.js +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://wowok.net/schemas/time_convert.json","title":"Time Convert","description":"General time-window kernel — convert any time expression (ms literal, '<n><unit>', compound, spaced, or ISO-8601 duration) to ONE chain-aligned millisecond constant, on demand.","type":"object","properties":{"value":{"anyOf":[{"type":"string"},{"type":"number"}]},"unit":{"type":"string","enum":["ms","second","minute","hour","day","week","month","year"]},"window_profile":{"type":"string","enum":["production","test"]}},"required":["value"],"additionalProperties":false}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://wowok.net/schemas/wip_file.json","title":"WIP File Operations","description":"Generate, verify, sign, or convert WIP files","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"generate"},"options":{"type":"object","properties":{"markdown_text":{"type":"string","maxLength":10000,"description":"Markdown formatted text content"},"images":{"description":"Optional image list","maxItems":10,"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"Image source path or URL. Supports: 1) Local file path (e.g., '/path/to/image.png', 'C:\\Users\\name\\image.jpg'), 2) Network URL (e.g., 'https://example.com/image.png', 'http://site.com/photo.jpg'), 3) Data URL (e.g., 'data:image/png;base64,iVBORw0K...')"},"id":{"description":"Optional image ID for reference in the WIP content. If not provided, an ID will be auto-generated based on index (e.g., 'image_0', 'image_1')","type":"string"},"filename":{"description":"Optional file name. If not provided, will be extracted from URL path or local file name","type":"string"}},"required":["source"],"additionalProperties":false,"description":"Image source for WIP generation"}},"account":{"description":"Optional signing account (account name or address). If specified, uses Account module for signing","type":"string"}},"required":["markdown_text"],"additionalProperties":false,"description":"WIP generation options"},"outputPath":{"description":"Output file path (.wip file). If not specified, defaults to the workspace directory","type":"string"}},"required":["type","options"],"additionalProperties":false,"description":"Generate WIP file from markdown text and optional images"},{"type":"object","properties":{"type":{"type":"string","const":"verify"},"wipFilePath":{"type":"string","description":"WIP file path to verify. Supports: 1) Local file path (e.g., '/path/to/file.wip', 'C:\\Users\\name\\doc.wip'), 2) Network URL (e.g., 'https://example.com/doc.wip', 'http://site.com/file.wip'), 3) Data URL (e.g., 'data:application/json;base64,eyJ3aXAiOi...')"},"hash_equal":{"description":"Optional expected COMMITMENT hash (F-23 field clarification). Compared against the file's meta.hash — the CANONICAL commitment hash (sha256 over key-sorted, whitespace-free {wip, payload} JSON, meta excluded), which is exactly what the Service anchors on-chain as wip_hash. This is NOT the sha256 of the raw downloaded file bytes (the verify result carries that separately as content_sha256): comparing a raw-file digest against meta.hash / the on-chain wip_hash always false-negatives (ddmc4 B-23). If not matched, returns hash mismatch error.","type":"string"},"requireSignature":{"description":"Optional flag to require digital signature. If true, verification will fail if WIP file has no signature","type":"boolean"}},"required":["type","wipFilePath"],"additionalProperties":false,"description":"Verify WIP file integrity and signatures"},{"type":"object","properties":{"type":{"type":"string","const":"sign"},"wipFilePath":{"type":"string","description":"WIP file path to sign. Supports: 1) Local file path (e.g., '/path/to/file.wip'), 2) Network URL (e.g., 'https://example.com/doc.wip'). The file will be loaded, validated, and signed"},"account":{"description":"Signing account (account name or address). If not specified, uses default account","type":"string"},"outputPath":{"description":"Output file path. If not specified, adds 'signed_' prefix to original file name (e.g., 'doc.wip' becomes 'signed_doc.wip')","type":"string"}},"required":["type","wipFilePath"],"additionalProperties":false,"description":"Sign WIP file with account"},{"type":"object","properties":{"type":{"type":"string","const":"wip2html"},"wipPath":{"type":"string","description":"WIP file path or directory path. Supports: 1) Single WIP file (e.g., '/path/to/file.wip'), 2) Directory containing .wip files (e.g., '/path/to/wips/'), 3) Network URL (e.g., 'https://example.com/doc.wip'). When directory is provided, all .wip files in the directory will be converted to HTML"},"options":{"description":"Conversion options","type":"object","properties":{"title":{"description":"HTML page title","type":"string"},"theme":{"description":"Theme style","anyOf":[{"type":"string","const":"light"},{"type":"string","const":"dark"}]},"outputPath":{"description":"Output file path (if specified, saves to file). For single file: saves HTML to this path. For directory: saves all converted HTML files to this directory","type":"string"}},"additionalProperties":false}},"required":["type","wipPath"],"additionalProperties":false,"description":"Convert WIP file to HTML format"},{"type":"object","properties":{"type":{"type":"string","const":"upload"},"wipFilePath":{"type":"string","description":"WIP file to upload. Supports: 1) Local file path, 2) Network URL, 3) Data URL"},"account":{"description":"Account used to sign the upload (name or address). If omitted, uses the default account","type":"string"},"storage":{"description":"Storage backend: 'store' = official free wip.store.wowok.net (zero setup, max 10 files per account, files retained 6 months — free best-effort service, force majeure excepted, expired files are purged only by manual admin action, never automatically); 'custom' = your own or a third-party wip storage service via customBaseUrl (recommended: no store quota, full control). Default: 'store'","anyOf":[{"type":"string","const":"store","description":"Official free wip.store.wowok.net storage (zero setup, max 10 files per account, files retained 6 months). Declaration: free best-effort service — availability and data survival are not guaranteed (force majeure excepted); expired files are deleted ONLY by a manual administrator purge, never automatically"},{"type":"string","const":"custom","description":"Your own or a third-party wip storage service (recommended: no store quota, full control, permanent self-managed hosting)"}]},"customBaseUrl":{"description":"Base URL of your own or a third-party wip storage deployment (required when storage='custom'), e.g. 'https://wip.example.com'","type":"string"},"name":{"description":"Optional display name recorded with the stored file","type":"string"}},"required":["type","wipFilePath"],"additionalProperties":false,"description":"Upload a signed WIP file to a wip storage service. The upload request is signed with the account's Falcon512 key; the file is validated (format, size limits, content hash, signatures) and stored under its CANONICAL COMMITMENT hash (meta.hash — the same value a Service anchors on-chain as wip_hash; NOT the raw-file sha256) with a public download URL. The upload response's `hash` field IS that commitment value: pass it directly as the sale row's wip_hash (template_generate writes it back automatically when this session performed the upload). When the per-account file limit is reached, the error carries the account's stored file list for deletion. Large, image-heavy WIP files are network-sensitive: keep them small (compress images before generate) and retry on transient network failures. WIP files are off-chain and network-independent: the returned public URL works on both testnet and mainnet"},{"type":"object","properties":{"type":{"type":"string","const":"storage_list"},"account":{"description":"Account used to sign the request (name or address). If omitted, uses the default account","type":"string"},"storage":{"description":"Storage backend (default 'store')","anyOf":[{"type":"string","const":"store","description":"Official free wip.store.wowok.net storage (zero setup, max 10 files per account, files retained 6 months). Declaration: free best-effort service — availability and data survival are not guaranteed (force majeure excepted); expired files are deleted ONLY by a manual administrator purge, never automatically"},{"type":"string","const":"custom","description":"Your own or a third-party wip storage service (recommended: no store quota, full control, permanent self-managed hosting)"}]},"customBaseUrl":{"description":"Base URL of your own or a third-party wip storage deployment (required when storage='custom')","type":"string"}},"required":["type"],"additionalProperties":false,"description":"List the WIP files an account currently stores on a wip storage service (signed request). Off-chain and network-independent: the account's stored files are identical on testnet and mainnet — no chain call is involved"},{"type":"object","properties":{"type":{"type":"string","const":"storage_delete"},"hash":{"type":"string","description":"Hash (meta.hash) of the WIP file to delete"},"account":{"description":"Account used to sign the request (name or address). If omitted, uses the default account","type":"string"},"storage":{"description":"Storage backend (default 'store')","anyOf":[{"type":"string","const":"store","description":"Official free wip.store.wowok.net storage (zero setup, max 10 files per account, files retained 6 months). Declaration: free best-effort service — availability and data survival are not guaranteed (force majeure excepted); expired files are deleted ONLY by a manual administrator purge, never automatically"},{"type":"string","const":"custom","description":"Your own or a third-party wip storage service (recommended: no store quota, full control, permanent self-managed hosting)"}]},"customBaseUrl":{"description":"Base URL of your own or a third-party wip storage deployment (required when storage='custom')","type":"string"}},"required":["type","hash"],"additionalProperties":false,"description":"Delete a stored WIP file from a wip storage service. Only files owned by the signing account can be deleted (signed request; off-chain, works identically on testnet and mainnet)"}]}
|
|
1
|
+
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://wowok.net/schemas/wip_file.json","title":"WIP File Operations","description":"Generate, verify, sign, or convert WIP files","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"generate"},"options":{"type":"object","properties":{"markdown_text":{"type":"string","maxLength":10000,"description":"Markdown formatted text content"},"images":{"description":"Optional image list","maxItems":10,"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"Image source path or URL. Supports: 1) Local file path (e.g., '/path/to/image.png', 'C:\\Users\\name\\image.jpg'), 2) Network URL (e.g., 'https://example.com/image.png', 'http://site.com/photo.jpg'), 3) Data URL (e.g., 'data:image/png;base64,iVBORw0K...')"},"id":{"description":"Optional image ID for reference in the WIP content. If not provided, an ID will be auto-generated based on index (e.g., 'image_0', 'image_1')","type":"string"},"filename":{"description":"Optional file name. If not provided, will be extracted from URL path or local file name","type":"string"}},"required":["source"],"additionalProperties":false,"description":"Image source for WIP generation"}},"account":{"description":"Optional signing account (account name or address). If specified, uses Account module for signing","type":"string"}},"required":["markdown_text"],"additionalProperties":false,"description":"WIP generation options"},"outputPath":{"description":"Output file path (.wip file). If not specified, defaults to the workspace directory","type":"string"}},"required":["type","options"],"additionalProperties":false,"description":"Generate WIP file from markdown text and optional images"},{"type":"object","properties":{"type":{"type":"string","const":"verify"},"wipFilePath":{"type":"string","description":"WIP file path to verify. Supports: 1) Local file path (e.g., '/path/to/file.wip', 'C:\\Users\\name\\doc.wip'), 2) Network URL (e.g., 'https://example.com/doc.wip', 'http://site.com/file.wip'), 3) Data URL (e.g., 'data:application/json;base64,eyJ3aXAiOi...')"},"hash_equal":{"description":"Optional expected COMMITMENT hash (F-23 field clarification). Compared against the file's meta.hash — the CANONICAL commitment hash (sha256 over key-sorted, whitespace-free {wip, payload} JSON, meta excluded), which is exactly what the Service anchors on-chain as wip_hash. This is NOT the sha256 of the raw downloaded file bytes (the verify result carries that separately as content_sha256): comparing a raw-file digest against meta.hash / the on-chain wip_hash always false-negatives (ddmc4 B-23). If not matched, returns hash mismatch error.","type":"string"},"requireSignature":{"description":"Optional flag to require digital signature. If true, verification will fail if WIP file has no signature","type":"boolean"}},"required":["type","wipFilePath"],"additionalProperties":false,"description":"Verify WIP file integrity and signatures"},{"type":"object","properties":{"type":{"type":"string","const":"sign"},"wipFilePath":{"type":"string","description":"WIP file path to sign. Supports: 1) Local file path (e.g., '/path/to/file.wip'), 2) Network URL (e.g., 'https://example.com/doc.wip'). The file will be loaded, validated, and signed"},"account":{"description":"Signing account (account name or address). If not specified, uses default account","type":"string"},"outputPath":{"description":"Output file path. If not specified, adds 'signed_' prefix to original file name (e.g., 'doc.wip' becomes 'signed_doc.wip')","type":"string"}},"required":["type","wipFilePath"],"additionalProperties":false,"description":"Sign WIP file with account"},{"type":"object","properties":{"type":{"type":"string","const":"wip2html"},"wipPath":{"type":"string","description":"WIP file path or directory path. Supports: 1) Single WIP file (e.g., '/path/to/file.wip'), 2) Directory containing .wip files (e.g., '/path/to/wips/'), 3) Network URL (e.g., 'https://example.com/doc.wip'). When directory is provided, all .wip files in the directory will be converted to HTML"},"options":{"description":"Conversion options","type":"object","properties":{"title":{"description":"HTML page title","type":"string"},"theme":{"description":"Theme style","anyOf":[{"type":"string","const":"light"},{"type":"string","const":"dark"}]},"outputPath":{"description":"Output file path (if specified, saves to file). For single file: saves HTML to this path. For directory: saves all converted HTML files to this directory","type":"string"}},"additionalProperties":false}},"required":["type","wipPath"],"additionalProperties":false,"description":"Convert WIP file to HTML format"},{"type":"object","properties":{"type":{"type":"string","const":"upload"},"wipFilePath":{"type":"string","description":"WIP file to upload. Supports: 1) Local file path, 2) Network URL, 3) Data URL"},"account":{"description":"Account used to sign the upload (name or address). If omitted, uses the default account","type":"string"},"storage":{"description":"Storage backend: 'store' = official free wip.store.wowok.net (zero setup, max 10 files per account, files retained 6 months — free best-effort service, force majeure excepted, expired files are purged only by manual admin action, never automatically); 'custom' = your own or a third-party wip storage service via customBaseUrl (recommended: no store quota, full control). Default: 'store'","anyOf":[{"type":"string","const":"store","description":"Official free wip.store.wowok.net storage (zero setup, max 10 files per account, files retained 6 months). Declaration: free best-effort service — availability and data survival are not guaranteed (force majeure excepted); expired files are deleted ONLY by a manual administrator purge, never automatically"},{"type":"string","const":"custom","description":"Your own or a third-party wip storage service (recommended: no store quota, full control, permanent self-managed hosting)"}]},"customBaseUrl":{"description":"Base URL of your own or a third-party wip storage deployment (required when storage='custom'), e.g. 'https://wip.example.com'","type":"string"},"name":{"description":"Optional display name recorded with the stored file","type":"string"}},"required":["type","wipFilePath"],"additionalProperties":false,"description":"Upload a signed WIP file to a wip storage service. The upload request is signed with the account's Falcon512 key; the file is validated (format, size limits, content hash, signatures) and stored under its CANONICAL COMMITMENT hash (meta.hash — the same value a Service anchors on-chain as wip_hash; NOT the raw-file sha256) with a public download URL. The upload response's `hash` field IS that commitment value: pass it directly as the sale row's wip_hash (template_generate writes it back automatically when this session performed the upload). When the per-account file limit is reached, the error carries the account's stored file list for deletion. Large, image-heavy WIP files are network-sensitive: keep them small (compress images before generate) and retry on transient network failures. WIP files are off-chain and network-independent: the returned public URL works on both testnet and mainnet"},{"type":"object","properties":{"type":{"type":"string","const":"storage_list"},"account":{"description":"Account used to sign the request (name or address). If omitted, uses the default account","type":"string"},"storage":{"description":"Storage backend (default 'store')","anyOf":[{"type":"string","const":"store","description":"Official free wip.store.wowok.net storage (zero setup, max 10 files per account, files retained 6 months). Declaration: free best-effort service — availability and data survival are not guaranteed (force majeure excepted); expired files are deleted ONLY by a manual administrator purge, never automatically"},{"type":"string","const":"custom","description":"Your own or a third-party wip storage service (recommended: no store quota, full control, permanent self-managed hosting)"}]},"customBaseUrl":{"description":"Base URL of your own or a third-party wip storage deployment (required when storage='custom')","type":"string"}},"required":["type"],"additionalProperties":false,"description":"List the WIP files an account currently stores on a wip storage service (signed request). Off-chain and network-independent: the account's stored files are identical on testnet and mainnet — no chain call is involved"},{"type":"object","properties":{"type":{"type":"string","const":"storage_delete"},"hash":{"type":"string","description":"Hash (meta.hash) of the WIP file to delete"},"account":{"description":"Account used to sign the request (name or address). If omitted, uses the default account","type":"string"},"storage":{"description":"Storage backend (default 'store')","anyOf":[{"type":"string","const":"store","description":"Official free wip.store.wowok.net storage (zero setup, max 10 files per account, files retained 6 months). Declaration: free best-effort service — availability and data survival are not guaranteed (force majeure excepted); expired files are deleted ONLY by a manual administrator purge, never automatically"},{"type":"string","const":"custom","description":"Your own or a third-party wip storage service (recommended: no store quota, full control, permanent self-managed hosting)"}]},"customBaseUrl":{"description":"Base URL of your own or a third-party wip storage deployment (required when storage='custom')","type":"string"},"confirmed":{"description":"Required true when the file hash is referenced by known WIP/sale bindings — the deletion orphans those references (dead URL: buyers can never fetch the deliverable). The tool refuses with the referencing list first (kq4x-mn T-07: 7 sold files were silently deleted this way).","type":"boolean"}},"required":["type","hash"],"additionalProperties":false,"description":"Delete a stored WIP file from a wip storage service. Only files owned by the signing account can be deleted (signed request; off-chain, works identically on testnet and mainnet). REFERENCE CHECK: before deleting, check whether the hash is pinned by sales/catalog rows (product_detail_source / wip_hash) — a sold file's deletion breaks delivery for every future buyer"}]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://wowok.net/schemas/workflow_operation.json","title":"Workflow - Local-Account Progress Tasks","description":"workflow_operation input. action='list' enumerates progress related to local accounts (actionable first, plus completed/related progress with viewable history); action='task' builds the SAME snapshot for ONE progress (options may carry empty executable_accounts — the client grays the actions); action='operate' advances/holds/unholds a forward as a chosen local account; action='history' incrementally syncs + returns a progress's on-chain history. NETWORK POSITION (single): the native shape takes network at the TOP LEVEL of the input; the onchain progress envelope ({operation_type:'progress', data, env}) takes it in env. A network misplaced inside data (or inside env on the native shape) is REFUSED with a fail-loud error — it never silently falls back to the default network.","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"list"},"limit":{"description":"Max progress entries to return, actionable first (default 50)","type":"integer","minimum":1,"maximum":100},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"operate"},"progress":{"type":"string","description":"Progress object (name or address) to operate on"},"account":{"description":"Signing account (name or address). Defaults to the first executable local account.","type":"string"},"operate":{"type":"object","properties":{"operation":{"type":"object","properties":{"next_node_name":{"type":"string","description":"Target node name"},"forward":{"type":"string","description":"Forward name"}},"required":["next_node_name","forward"],"additionalProperties":false},"op":{"type":"string","enum":["next","hold","unhold","adminUnhold"],"description":"Forward operation: 'next' = accomplish the forward; 'hold' = block the forward; 'unhold' = release own hold; 'adminUnhold' = force-release via permission 224."},"message":{"description":"Optional human-readable message recorded on-chain (≤256 UTF-8 bytes — Move LONG_NAME cap, enforced here before the transaction is built)","type":"string"}},"required":["operation","op"],"additionalProperties":false,"description":"⚠️ SINGLE-OPERATOR LOCK: each forward is locked by the FIRST operator that accomplishes it — a different account re-executing the same accomplished forward aborts E_NOT_THE_HOLDER, and the weight is counted only once. Multi-operator cooperation (threshold > 1) is done via DISTINCT forwards (one per contributor). The workflow 'list' action already hides accomplished forwards and restricts held forwards to their holder."},"submission":{"description":"Guard submissions for guarded forwards (forward.guard_submissions in the list describes each required field). Fill `submission: [{ guard: '<guard>', submission: [{ identifier, b_submission: true, value_type, value }] }]` with the value the user entered for each b_submission field.","type":"object","properties":{"type":{"type":"string","const":"submission","description":"Discriminator for this result variant. Constraint: always 'submission'. Example: 'submission'"},"guard":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"object":{"type":"string","description":"Guard object name or ID to verify against. Example: 'my-delivery-guard' or '0x123...'"},"impack":{"type":"boolean","description":"Whether this Guard's verification result participates in the final logic. Constraint: if false, the Guard is checked but does not block the operation. Example: true"}},"required":["object","impack"],"additionalProperties":false},"description":"Array of Guard objects to verify. Constraint: at most 20 entries (MAX_GUARD_COUNT_PASSPORT). Relation: each entry corresponds to a Guard bound to the operation."},"submission":{"type":"array","items":{"type":"object","properties":{"guard":{"type":"string","description":"Guard object name or ID that requires submission data. Example: 'my-delivery-guard'"},"submission":{"type":"array","items":{"type":"object","properties":{"identifier":{"type":"integer","minimum":0,"maximum":255,"description":"Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails whose payee is NOT the order itself, such as settlement releases and incentive/bounty claims). NEVER arm 254 on a refund rail: a refund pays the submitted Order through user slot 0, and a refund leg re-entered in a later renewal period would abort E_ONCE_TRIGGERED (16) forever — refund once-ness comes from the terminal-node topology, never from a once slot. SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."},"b_submission":{"type":"boolean","description":"Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."},"value_type":{"description":"Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details.","anyOf":[{"type":"number","const":0,"description":"Bool (0)"},{"type":"number","const":1,"description":"Address (1)"},{"type":"number","const":2,"description":"String (2)"},{"type":"number","const":3,"description":"U8 (3)"},{"type":"number","const":4,"description":"U16 (4)"},{"type":"number","const":5,"description":"U32 (5)"},{"type":"number","const":6,"description":"U64 (6)"},{"type":"number","const":7,"description":"U128 (7)"},{"type":"number","const":8,"description":"U256 (8)"},{"type":"number","const":9,"description":"VecBool (9)"},{"type":"number","const":10,"description":"VecAddress (10)"},{"type":"number","const":11,"description":"VecString (11)"},{"type":"number","const":12,"description":"VecU8 (12)"},{"type":"number","const":13,"description":"VecU16 (13)"},{"type":"number","const":14,"description":"VecU32 (14)"},{"type":"number","const":15,"description":"VecU64 (15)"},{"type":"number","const":16,"description":"VecU128 (16)"},{"type":"number","const":17,"description":"VecU256 (17)"},{"type":"number","const":18,"description":"VecVecU8 (18)"},{"type":"string","const":"Bool","description":"Bool"},{"type":"string","const":"Address","description":"Address"},{"type":"string","const":"String","description":"String"},{"type":"string","const":"U8","description":"U8"},{"type":"string","const":"U16","description":"U16"},{"type":"string","const":"U32","description":"U32"},{"type":"string","const":"U64","description":"U64"},{"type":"string","const":"U128","description":"U128"},{"type":"string","const":"U256","description":"U256"},{"type":"string","const":"VecBool","description":"VecBool"},{"type":"string","const":"VecAddress","description":"VecAddress"},{"type":"string","const":"VecString","description":"VecString"},{"type":"string","const":"VecU8","description":"VecU8"},{"type":"string","const":"VecU16","description":"VecU16"},{"type":"string","const":"VecU32","description":"VecU32"},{"type":"string","const":"VecU64","description":"VecU64"},{"type":"string","const":"VecU128","description":"VecU128"},{"type":"string","const":"VecU256","description":"VecU256"},{"type":"string","const":"VecVecU8","description":"VecVecU8"},{"type":"string","const":"bool","description":"bool"},{"type":"string","const":"address","description":"address"},{"type":"string","const":"string","description":"string"},{"type":"string","const":"u8","description":"u8"},{"type":"string","const":"u16","description":"u16"},{"type":"string","const":"u32","description":"u32"},{"type":"string","const":"u64","description":"u64"},{"type":"string","const":"u128","description":"u128"},{"type":"string","const":"u256","description":"u256"},{"type":"string","const":"vecbool","description":"vecbool"},{"type":"string","const":"vecaddress","description":"vecaddress"},{"type":"string","const":"vecstring","description":"vecstring"},{"type":"string","const":"vecu8","description":"vecu8"},{"type":"string","const":"vecu16","description":"vecu16"},{"type":"string","const":"vecu32","description":"vecu32"},{"type":"string","const":"vecu64","description":"vecu64"},{"type":"string","const":"vecu128","description":"vecu128"},{"type":"string","const":"vecu256","description":"vecu256"},{"type":"string","const":"vecvecu8","description":"vecvecu8"}]},"value":{"description":"The actual value data. Format depends on `value_type`:\nTYPE-CLASS SPLIT (F03): scalar value_types (Bool/Address/String/U8..U256) take ONE scalar value (boolean/address string/name/string/number); Vec* value_types (VecBool/VecAddress/VecString/VecU8..VecU256) take a REAL JSON ARRAY of elements — a string (even a Python-repr-looking \"[a, b]\") fails serialization with 'value_type=10 (array) requires a array value'. The historical 'static values must be strings' rule applied to SCALARS only.\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nPROTOCOL SLOT 254 (once, b_submission Address): the submitted value MUST be the ORDER address bound to the operation (payment_info.for_object) — NEVER the Progress/Machine/Arb object the call is advancing. The chain asserts submission(254) == the order address; a Progress address fails the task binding and the forward aborts.\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission).","anyOf":[{"type":"boolean"},{"anyOf":[{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."},{"type":"string"}]},{"type":"string"},{"type":"number"},{"type":"array","items":{"type":"boolean"}},{"anyOf":[{"type":"object","properties":{"entities":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."}},"check_all_founded":{"default":true,"description":"Whether to check all entities are found. Defaults to true: abort and throw if ANY entity cannot be resolved. Set false only when partial resolution is explicitly intended (only found IDs are returned)","type":"boolean"}},"required":["entities","check_all_founded"],"additionalProperties":false,"description":"Used to batch find account or object IDs by name"},{"type":"array","items":{"type":"string"}}]},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"array","items":{"type":"number"}}}]},"name":{"default":"","description":"Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here.","type":"string"},"object_type":{"description":"OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation.","type":"string","enum":["Permission","Repository","Arb","Arbitration","Service","Machine","Order","Progress","Payment","Treasury","Guard","Demand","Passport","Allocation","Resource","Reward","Discount","EntityRegistrar","EntityLinker","Proof","WReceivedObject","Contact","TableItem_ProgressHistory","TableItem_PermissionPerm","TableItem_DemandPresenter","TableItem_MachineNode","TableItem_TreasuryHistory","TableItem_RepositoryData","TableItem_RewardRecord","TableItem_EntityLinker","TableItem_AddressMark","TableItem_EntityRegistrar"]}},"required":["identifier","b_submission","value_type","name"],"additionalProperties":false,"description":"Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"},"description":"User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}] PROTOCOL SLOT 254: when the Guard table has identifier 254, submit the ORDER address bound to the operation (payment_info.for_object) — never the Progress/Machine object being advanced."}},"required":["guard","submission"],"additionalProperties":false,"description":"One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."},"description":"User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. SLOT COMPLETENESS (T8 az3-mn-261013): the submission array must cover EVERY b_submission slot in the Guard's table, not just one — a Guard whose table has multiple b_submission entries (e.g. slot 0 + slot 254) aborts on-chain with 'Submission ID not found' (abort 11) when any b_submission slot has no matching entry. Check the Guard's table (each entry with b_submission needs its identifier filled) and include ALL of them. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"}},"required":["type","guard","submission"],"additionalProperties":false},"confirmed":{"description":"Phase 2 ConfirmGate: set to true to proceed after a 'pending_confirmation' result (required when submitting guard submission data). The operation is NOT executed until you re-call with confirmed=true after user consent.","type":"boolean"},"dry_run":{"description":"Phase 1 dry_run: when true, SIMULATE the transaction without signing or submitting. Returns effects + events showing what WOULD happen — no on-chain state is modified, no gas is charged. Use this to verify that a forward (especially a guarded one) will succeed before committing.","type":"boolean"},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action","progress","operate"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"task"},"progress":{"type":"string","description":"Progress object (name or address) to snapshot"},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action","progress"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"history"},"progress":{"type":"string","description":"Progress object (name or address) whose history to sync and view"},"limit":{"description":"Max history records to return, newest first (default 50)","type":"integer","minimum":1,"maximum":500},"prune":{"description":"Run the 90-day retention cleanup of stale progress histories (default true)","type":"boolean"},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action","progress"],"additionalProperties":false}]}
|
|
1
|
+
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://wowok.net/schemas/workflow_operation.json","title":"Workflow - Local-Account Progress Tasks","description":"workflow_operation input. action='list' enumerates progress related to local accounts (actionable first, plus completed/related progress with viewable history); action='task' builds the SAME snapshot for ONE progress (options may carry empty executable_accounts — the client grays the actions); action='operate' advances/holds/unholds a forward as a chosen local account; action='history' incrementally syncs + returns a progress's on-chain history. NETWORK POSITION (single): the native shape takes network at the TOP LEVEL of the input; the onchain progress envelope ({operation_type:'progress', data, env}) takes it in env. A network misplaced inside data (or inside env on the native shape) is REFUSED with a fail-loud error — it never silently falls back to the default network.","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"list"},"limit":{"description":"Max progress entries to return, actionable first (default 50)","type":"integer","minimum":1,"maximum":100},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"operate"},"progress":{"type":"string","description":"Progress object (name or address) to operate on"},"account":{"description":"Signing account (name or address). Defaults to the first executable local account.","type":"string"},"operate":{"type":"object","properties":{"operation":{"type":"object","properties":{"next_node_name":{"type":"string","description":"Target node name"},"forward":{"type":"string","description":"Forward name"}},"required":["next_node_name","forward"],"additionalProperties":false},"op":{"type":"string","enum":["next","hold","unhold","adminUnhold"],"description":"Forward operation: 'next' = accomplish the forward; 'hold' = block the forward; 'unhold' = release own hold; 'adminUnhold' = force-release via permission 224."},"message":{"description":"Optional human-readable message recorded on-chain (≤256 UTF-8 bytes — Move LONG_NAME cap, enforced here before the transaction is built)","type":"string"}},"required":["operation","op"],"additionalProperties":false,"description":"⚠️ SINGLE-OPERATOR LOCK: each forward is locked by the FIRST operator that accomplishes it — a different account re-executing the same accomplished forward aborts E_NOT_THE_HOLDER, and the weight is counted only once. Multi-operator cooperation (threshold > 1) is done via DISTINCT forwards (one per contributor). The workflow 'list' action already hides accomplished forwards and restricts held forwards to their holder."},"submission":{"description":"Guard submissions for guarded forwards (forward.guard_submissions in the list describes each required field). Fill `submission: [{ guard: '<guard>', submission: [{ identifier, b_submission: true, value_type, value }] }]` with the value the user entered for each b_submission field.","type":"object","properties":{"type":{"type":"string","const":"submission","description":"Discriminator for this result variant. Constraint: always 'submission'. Example: 'submission'"},"guard":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"object":{"type":"string","description":"Guard object name or ID to verify against. Example: 'my-delivery-guard' or '0x123...'"},"impack":{"type":"boolean","description":"Whether this Guard's verification result participates in the final logic. Constraint: if false, the Guard is checked but does not block the operation. Example: true"}},"required":["object","impack"],"additionalProperties":false},"description":"Array of Guard objects to verify. Constraint: at most 20 entries (MAX_GUARD_COUNT_PASSPORT); each entry is an OBJECT {object, impack} — NOT a bare address string. An EMPTY array is rejected at dispatch unless the forward genuinely carries no guards — prefer omitting submission entirely for guard-less edges (kq4x-mn MCP-1: an empty guard list produced no transaction and burned 6 retries on a misleading 'no result'). Relation: each entry corresponds to a Guard bound to the operation."},"submission":{"type":"array","items":{"type":"object","properties":{"guard":{"type":"string","description":"Guard object name or ID that requires submission data. Example: 'my-delivery-guard'"},"submission":{"type":"array","items":{"type":"object","properties":{"identifier":{"type":"integer","minimum":0,"maximum":255,"description":"Identifier (0-255) for data lookup in Guard table. Slot consensus (enforced on-chain at guard table construction): 0-220 = user slots (free for business guards); 221-253 = PROTOCOL-RESERVED (rejected on-chain — reserved so future protocol features get fixed slots without colliding with published guards); 255 = ONCE replay-protection slot on Allocation (byte-keyed, the submitted bytes are the once-key — use for per-period keys like period-<N>); 254 = ONCE-FOR-OBJECT slot on Allocation (chain-derived key = bcs(the Allocation's payment_info.for_object); the submitted bytes are ignored and the submission only arms the slot — use for one-shot per-order rails whose payee is NOT the order itself, such as settlement releases and incentive/bounty claims). NEVER arm 254 on a refund rail: a refund pays the submitted Order through user slot 0, and a refund leg re-entered in a later renewal period would abort E_ONCE_TRIGGERED (16) forever — refund once-ness comes from the terminal-node topology, never from a once slot. SLOT 0 SEMANTICS: slot 0 carries the transacted Order address by convention. As a submission slot it is legal on order/allocation/machine rails (the order exists when those verify), but FORBIDDEN on a Service buy_guard — the order does not exist when the buy-time passport is verified, so the mount is refused (service abort 43)."},"b_submission":{"type":"boolean","description":"Whether this table item's value is submitted dynamically at Guard trigger time (alloc_by_guard call). \n\ntrue = value is submitted by the caller when triggering the Guard. Use for runtime-context-dependent values like order address, user address. The 'value' field is ignored when b_submission=true; the caller must provide it via submissions[]. \n\nfalse = value is static, set at Guard creation time. Use for values known when the Guard is created: expected node names, expected merchant address, expected service address. The 'value' field must be populated and will be stored on-chain permanently. \n\nRule of thumb: if the value is the SAME for all future Guard triggers, use false. If the value DIFFERS per trigger (e.g., which order to release funds for), use true."},"value_type":{"description":"Type of the value stored in `value`. One of: Bool(0), Address(1), String(2), U8(3), U16(4), U32(5), U64(6), U128(7), U256(8), VecBool(9), VecAddress(10), VecString(11), VecU8(12), VecU16(13), VecU32(14), VecU64(15), VecU128(16), VecU256(17), VecVecU8(18). When value_type=Address (1), the `value` field accepts a hex address string, a LocalMark name, or an AccountOrMark_Address object — see `value` field description for details.","anyOf":[{"type":"number","const":0,"description":"Bool (0)"},{"type":"number","const":1,"description":"Address (1)"},{"type":"number","const":2,"description":"String (2)"},{"type":"number","const":3,"description":"U8 (3)"},{"type":"number","const":4,"description":"U16 (4)"},{"type":"number","const":5,"description":"U32 (5)"},{"type":"number","const":6,"description":"U64 (6)"},{"type":"number","const":7,"description":"U128 (7)"},{"type":"number","const":8,"description":"U256 (8)"},{"type":"number","const":9,"description":"VecBool (9)"},{"type":"number","const":10,"description":"VecAddress (10)"},{"type":"number","const":11,"description":"VecString (11)"},{"type":"number","const":12,"description":"VecU8 (12)"},{"type":"number","const":13,"description":"VecU16 (13)"},{"type":"number","const":14,"description":"VecU32 (14)"},{"type":"number","const":15,"description":"VecU64 (15)"},{"type":"number","const":16,"description":"VecU128 (16)"},{"type":"number","const":17,"description":"VecU256 (17)"},{"type":"number","const":18,"description":"VecVecU8 (18)"},{"type":"string","const":"Bool","description":"Bool"},{"type":"string","const":"Address","description":"Address"},{"type":"string","const":"String","description":"String"},{"type":"string","const":"U8","description":"U8"},{"type":"string","const":"U16","description":"U16"},{"type":"string","const":"U32","description":"U32"},{"type":"string","const":"U64","description":"U64"},{"type":"string","const":"U128","description":"U128"},{"type":"string","const":"U256","description":"U256"},{"type":"string","const":"VecBool","description":"VecBool"},{"type":"string","const":"VecAddress","description":"VecAddress"},{"type":"string","const":"VecString","description":"VecString"},{"type":"string","const":"VecU8","description":"VecU8"},{"type":"string","const":"VecU16","description":"VecU16"},{"type":"string","const":"VecU32","description":"VecU32"},{"type":"string","const":"VecU64","description":"VecU64"},{"type":"string","const":"VecU128","description":"VecU128"},{"type":"string","const":"VecU256","description":"VecU256"},{"type":"string","const":"VecVecU8","description":"VecVecU8"},{"type":"string","const":"bool","description":"bool"},{"type":"string","const":"address","description":"address"},{"type":"string","const":"string","description":"string"},{"type":"string","const":"u8","description":"u8"},{"type":"string","const":"u16","description":"u16"},{"type":"string","const":"u32","description":"u32"},{"type":"string","const":"u64","description":"u64"},{"type":"string","const":"u128","description":"u128"},{"type":"string","const":"u256","description":"u256"},{"type":"string","const":"vecbool","description":"vecbool"},{"type":"string","const":"vecaddress","description":"vecaddress"},{"type":"string","const":"vecstring","description":"vecstring"},{"type":"string","const":"vecu8","description":"vecu8"},{"type":"string","const":"vecu16","description":"vecu16"},{"type":"string","const":"vecu32","description":"vecu32"},{"type":"string","const":"vecu64","description":"vecu64"},{"type":"string","const":"vecu128","description":"vecu128"},{"type":"string","const":"vecu256","description":"vecu256"},{"type":"string","const":"vecvecu8","description":"vecvecu8"}]},"value":{"description":"The actual value data. Format depends on `value_type`:\nTYPE-CLASS SPLIT (F03): scalar value_types (Bool/Address/String/U8..U256) take ONE scalar value (boolean/address string/name/string/number); Vec* value_types (VecBool/VecAddress/VecString/VecU8..VecU256) take a REAL JSON ARRAY of elements — a string (even a Python-repr-looking \"[a, b]\") fails serialization with 'value_type=10 (array) requires a array value'. The historical 'static values must be strings' rule applied to SCALARS only.\n• Bool: true/false (boolean)\n• Address (CRITICAL — string 'Address' is NOT a placeholder): a hex address (e.g. '0x1234...'), a LocalMark name (e.g. 'my-service' — resolved to address at evaluation time), an AccountOrMark_Address object (e.g. {name_or_address:'my-service'}), or system shorthand ('0xaaa' = EntityLinker, '0xaab' = EntityRegistrar). The literal string 'Address' itself is INVALID — it would be treated as a non-existent LocalMark name and fail. Example: value='0x2::wow::WOW<address>' or value='my-permission'.\n• String: any string\n• U8/U16/U32/U64/U128/U256: number or numeric string (e.g. 42 or '42')\n• Vec* types: arrays of the corresponding element type\nPROTOCOL SLOT 254 (once, b_submission Address): the submitted value MUST be the ORDER address bound to the operation (payment_info.for_object) — NEVER the Progress/Machine/Arb object the call is advancing. The chain asserts submission(254) == the order address; a Progress address fails the task binding and the forward aborts.\nREQUIRED when b_submission=false. OPTIONAL when b_submission=true (value is supplied at evaluation time by user submission).","anyOf":[{"type":"boolean"},{"anyOf":[{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."},{"type":"string"}]},{"type":"string"},{"type":"number"},{"type":"array","items":{"type":"boolean"}},{"anyOf":[{"type":"object","properties":{"entities":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name_or_address":{"type":"string","description":"Account/Object name or ID. If specifying an account, use empty string '' for the default account. If it starts with '0x', it will be treated as an ID. Otherwise, it will be treated as a name (max 64 bcs characters)."},"local_mark_first":{"description":"Whether to prioritize local marks, if true, prioritize local marks, otherwise prioritize global marks","type":"boolean"}},"additionalProperties":false,"description":"Account or address lookup object. Use this to specify which account to use for an operation. EXAMPLE: { name_or_address: 'testor2' } - looks up account by name; EXAMPLE: { name_or_address: '0x1234...' } - uses address directly; If name_or_address is empty string '', uses the default local account. name_or_address is REQUIRED — {} resolves to nothing useful and is rejected."}},"check_all_founded":{"default":true,"description":"Whether to check all entities are found. Defaults to true: abort and throw if ANY entity cannot be resolved. Set false only when partial resolution is explicitly intended (only found IDs are returned)","type":"boolean"}},"required":["entities","check_all_founded"],"additionalProperties":false,"description":"Used to batch find account or object IDs by name"},{"type":"array","items":{"type":"string"}}]},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"array","items":{"type":"number"}}}]},"name":{"default":"","description":"Data name identifier. MAX 64 BCS characters (Chinese chars count as 3-4 BCS bytes each). Use short identifiers like 'order_id', 'delivery_node'. Put longer descriptions in the Guard's 'description' field, NOT here.","type":"string"},"object_type":{"description":"OUTPUT-ONLY (query side): Object type when value_type is Address and represents a specific object. Auto-derived by the system — DO NOT set this field at Guard creation.","type":"string","enum":["Permission","Repository","Arb","Arbitration","Service","Machine","Order","Progress","Payment","Treasury","Guard","Demand","Passport","Allocation","Resource","Reward","Discount","EntityRegistrar","EntityLinker","Proof","WReceivedObject","Contact","TableItem_ProgressHistory","TableItem_PermissionPerm","TableItem_DemandPresenter","TableItem_MachineNode","TableItem_TreasuryHistory","TableItem_RepositoryData","TableItem_RewardRecord","TableItem_EntityLinker","TableItem_AddressMark","TableItem_EntityRegistrar"]}},"required":["identifier","b_submission","value_type","name"],"additionalProperties":false,"description":"Guard table item (QUERY/OUTPUT form — includes auto-derived object_type field)"},"description":"User-submitted data matching the Guard's required fields. Relation: structure must match the Guard table's column definitions. Example: [{field:'delivery_proof', value:'Qm...'}] PROTOCOL SLOT 254: when the Guard table has identifier 254, submit the ORDER address bound to the operation (payment_info.for_object) — never the Progress/Machine object being advanced."}},"required":["guard","submission"],"additionalProperties":false,"description":"One Guard's submission data: the Guard to verify plus the user-provided data that satisfies its requirements."},"description":"User-submitted data for each Guard. Relation: one entry per Guard in the guard array; fill submission fields and resubmit via call_with_submission. SLOT COMPLETENESS (T8 az3-mn-261013): the submission array must cover EVERY b_submission slot in the Guard's table, not just one — a Guard whose table has multiple b_submission entries (e.g. slot 0 + slot 254) aborts on-chain with 'Submission ID not found' (abort 11) when any b_submission slot has no matching entry. Check the Guard's table (each entry with b_submission needs its identifier filled) and include ALL of them. PLACEMENT: this `submission` field is at the SAME level as `data` and `env` in the operation input — NOT inside `data.data`. Example structure: {tool:'onchain_operations', data:{operation_type:'order', data:{object:'my_order', progress:{...}}}, submission:{type:'submission', guard:[...], submission:[...]}}"}},"required":["type","guard","submission"],"additionalProperties":false},"confirmed":{"description":"Phase 2 ConfirmGate: set to true to proceed after a 'pending_confirmation' result (required when submitting guard submission data). The operation is NOT executed until you re-call with confirmed=true after user consent.","type":"boolean"},"dry_run":{"description":"Phase 1 dry_run: when true, SIMULATE the transaction without signing or submitting. Returns effects + events showing what WOULD happen — no on-chain state is modified, no gas is charged. Use this to verify that a forward (especially a guarded one) will succeed before committing.","type":"boolean"},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action","progress","operate"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"task"},"progress":{"type":"string","description":"Progress object (name or address) to snapshot"},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action","progress"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"history"},"progress":{"type":"string","description":"Progress object (name or address) whose history to sync and view"},"limit":{"description":"Max history records to return, newest first (default 50)","type":"integer","minimum":1,"maximum":500},"prune":{"description":"Run the 90-day retention cleanup of stale progress histories (default true)","type":"boolean"},"network":{"type":"string","enum":["localnet","testnet","mainnet"],"description":"Network entrypoint: Specifies which network the operation occurs on. FIX-010 cross-network note: LocalMark names are scoped per network (testnet marks are invisible on mainnet and vice versa). When migrating from testnet to mainnet, recreate all objects on mainnet and re-register LocalMark names with the SAME names to keep name-based references working across networks. Recreate all objects on the target network via onchain_operations with env.network=target_network, then re-register the LocalMark names."},"no_cache":{"type":"boolean"}},"required":["action","progress"],"additionalProperties":false}]}
|