@wowok/agent-mcp 3.0.3 → 3.0.4
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/index.js +1 -1
- package/dist/knowledge/event-semantics.js +1 -1
- package/dist/knowledge/guard-puzzle.js +1 -1
- package/dist/knowledge/safety-rules.js +1 -1
- package/dist/knowledge/service-ledger.js +1 -1
- package/dist/knowledge/tools-reference.js +1 -1
- package/dist/safety/confirm-gate.js +1 -1
- package/dist/schema/call/allocation.d.ts +5 -0
- package/dist/schema/call/arbitration.d.ts +5 -0
- package/dist/schema/call/base.d.ts +5 -0
- package/dist/schema/call/base.js +1 -1
- package/dist/schema/call/bridge.d.ts +25 -0
- package/dist/schema/call/contact.d.ts +5 -0
- package/dist/schema/call/demand.d.ts +5 -0
- package/dist/schema/call/guard.d.ts +15 -0
- package/dist/schema/call/machine.d.ts +10 -0
- package/dist/schema/call/order.d.ts +5 -0
- package/dist/schema/call/payment.d.ts +5 -0
- package/dist/schema/call/permission.d.ts +5 -0
- package/dist/schema/call/personal.d.ts +5 -0
- package/dist/schema/call/progress.d.ts +5 -0
- package/dist/schema/call/proof.d.ts +10 -0
- package/dist/schema/call/repository.d.ts +5 -0
- package/dist/schema/call/reward.d.ts +5 -0
- package/dist/schema/call/service.d.ts +5 -0
- package/dist/schema/call/treasury.d.ts +5 -0
- package/dist/schema/common/index.js +1 -1
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -1
- package/dist/schema/interaction/index.d.ts +34 -0
- package/dist/schema/interaction/index.js +1 -0
- package/dist/schema/local/index.js +1 -1
- package/dist/schema/messenger/index.d.ts +6 -0
- package/dist/schema/messenger/index.js +1 -1
- package/dist/schema/operations.d.ts +90 -0
- package/dist/schema/operations.js +1 -1
- package/dist/schema/query/index.js +1 -1
- package/dist/schema/schema-version.js +1 -1
- package/dist/schema-query-impl/index.js +1 -1
- package/dist/schemas/ask_user.output.json +54 -0
- package/dist/schemas/ask_user.schema.json +78 -0
- package/dist/schemas/bridge_operation.schema.json +50 -5
- package/dist/schemas/guard2file.schema.json +10 -1
- package/dist/schemas/index.json +7 -1
- package/dist/schemas/machineNode2file.schema.json +10 -1
- package/dist/schemas/messenger_operation.output.json +8 -0
- package/dist/schemas/messenger_operation.schema.json +8 -0
- package/dist/schemas/onchain_events.output.json +2 -2
- package/dist/schemas/onchain_operations.schema.json +180 -18
- package/dist/schemas/onchain_operations_allocation.schema.json +10 -1
- package/dist/schemas/onchain_operations_arbitration.schema.json +10 -1
- package/dist/schemas/onchain_operations_contact.schema.json +10 -1
- package/dist/schemas/onchain_operations_demand.schema.json +10 -1
- package/dist/schemas/onchain_operations_gen_passport.schema.json +10 -1
- package/dist/schemas/onchain_operations_gen_proof.schema.json +10 -1
- package/dist/schemas/onchain_operations_guard.schema.json +10 -1
- package/dist/schemas/onchain_operations_machine.schema.json +10 -1
- package/dist/schemas/onchain_operations_order.schema.json +10 -1
- package/dist/schemas/onchain_operations_payment.schema.json +10 -1
- package/dist/schemas/onchain_operations_permission.schema.json +10 -1
- package/dist/schemas/onchain_operations_personal.schema.json +10 -1
- package/dist/schemas/onchain_operations_progress.schema.json +10 -1
- package/dist/schemas/onchain_operations_proof.schema.json +10 -1
- package/dist/schemas/onchain_operations_repository.schema.json +10 -1
- package/dist/schemas/onchain_operations_reward.schema.json +10 -1
- package/dist/schemas/onchain_operations_service.schema.json +10 -1
- package/dist/schemas/onchain_operations_treasury.schema.json +10 -1
- package/dist/schemas/query_toolkit.schema.json +1 -1
- package/dist/tools/handlers/ask-user.d.ts +3 -0
- package/dist/tools/handlers/ask-user.js +1 -0
- package/dist/tools/handlers/config.js +1 -1
- package/dist/tools/handlers/messenger.js +1 -1
- package/dist/tools/handlers/onchain.js +1 -1
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.js +1 -1
- package/dist/tools/registry/bridge.js +1 -1
- package/dist/tools/registry/business.js +1 -1
- package/dist/tools/registry/interaction.d.ts +2 -0
- package/dist/tools/registry/interaction.js +1 -0
- package/dist/tools/registry/local.js +1 -1
- package/dist/tools/registry/monitor.js +1 -1
- package/dist/tools/registry/onchain.js +1 -1
- package/dist/tools/registry/query.js +1 -1
- package/dist/tools/shared.js +1 -1
- package/dist/tools/types.d.ts +7 -1
- package/dist/tools/wrap.d.ts +3 -3
- package/dist/tools/wrap.js +1 -1
- package/package.json +2 -2
|
@@ -385,8 +385,17 @@
|
|
|
385
385
|
"type": "boolean"
|
|
386
386
|
},
|
|
387
387
|
"dry_run": {
|
|
388
|
-
"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 an operation will succeed before committing.
|
|
388
|
+
"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 an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
|
|
389
389
|
"type": "boolean"
|
|
390
|
+
},
|
|
391
|
+
"confirm_mode": {
|
|
392
|
+
"description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
|
|
393
|
+
"type": "string",
|
|
394
|
+
"enum": [
|
|
395
|
+
"full",
|
|
396
|
+
"streamlined",
|
|
397
|
+
"quiet"
|
|
398
|
+
]
|
|
390
399
|
}
|
|
391
400
|
},
|
|
392
401
|
"required": [
|
|
@@ -171,8 +171,17 @@
|
|
|
171
171
|
"type": "boolean"
|
|
172
172
|
},
|
|
173
173
|
"dry_run": {
|
|
174
|
-
"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 an operation will succeed before committing.
|
|
174
|
+
"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 an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
|
|
175
175
|
"type": "boolean"
|
|
176
|
+
},
|
|
177
|
+
"confirm_mode": {
|
|
178
|
+
"description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
|
|
179
|
+
"type": "string",
|
|
180
|
+
"enum": [
|
|
181
|
+
"full",
|
|
182
|
+
"streamlined",
|
|
183
|
+
"quiet"
|
|
184
|
+
]
|
|
176
185
|
}
|
|
177
186
|
},
|
|
178
187
|
"required": [
|
|
@@ -1012,8 +1012,17 @@
|
|
|
1012
1012
|
"type": "boolean"
|
|
1013
1013
|
},
|
|
1014
1014
|
"dry_run": {
|
|
1015
|
-
"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 an operation will succeed before committing.
|
|
1015
|
+
"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 an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
|
|
1016
1016
|
"type": "boolean"
|
|
1017
|
+
},
|
|
1018
|
+
"confirm_mode": {
|
|
1019
|
+
"description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
|
|
1020
|
+
"type": "string",
|
|
1021
|
+
"enum": [
|
|
1022
|
+
"full",
|
|
1023
|
+
"streamlined",
|
|
1024
|
+
"quiet"
|
|
1025
|
+
]
|
|
1017
1026
|
}
|
|
1018
1027
|
},
|
|
1019
1028
|
"required": [
|
|
@@ -589,8 +589,17 @@
|
|
|
589
589
|
"type": "boolean"
|
|
590
590
|
},
|
|
591
591
|
"dry_run": {
|
|
592
|
-
"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 an operation will succeed before committing.
|
|
592
|
+
"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 an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
|
|
593
593
|
"type": "boolean"
|
|
594
|
+
},
|
|
595
|
+
"confirm_mode": {
|
|
596
|
+
"description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
|
|
597
|
+
"type": "string",
|
|
598
|
+
"enum": [
|
|
599
|
+
"full",
|
|
600
|
+
"streamlined",
|
|
601
|
+
"quiet"
|
|
602
|
+
]
|
|
594
603
|
}
|
|
595
604
|
},
|
|
596
605
|
"required": [
|
|
@@ -1464,8 +1464,17 @@
|
|
|
1464
1464
|
"type": "boolean"
|
|
1465
1465
|
},
|
|
1466
1466
|
"dry_run": {
|
|
1467
|
-
"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 an operation will succeed before committing.
|
|
1467
|
+
"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 an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
|
|
1468
1468
|
"type": "boolean"
|
|
1469
|
+
},
|
|
1470
|
+
"confirm_mode": {
|
|
1471
|
+
"description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
|
|
1472
|
+
"type": "string",
|
|
1473
|
+
"enum": [
|
|
1474
|
+
"full",
|
|
1475
|
+
"streamlined",
|
|
1476
|
+
"quiet"
|
|
1477
|
+
]
|
|
1469
1478
|
}
|
|
1470
1479
|
},
|
|
1471
1480
|
"required": [
|
|
@@ -945,8 +945,17 @@
|
|
|
945
945
|
"type": "boolean"
|
|
946
946
|
},
|
|
947
947
|
"dry_run": {
|
|
948
|
-
"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 an operation will succeed before committing.
|
|
948
|
+
"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 an operation will succeed before committing. The returned digest will be 'dry_run:<timestamp>' and objectChanges will be empty (simulation only).",
|
|
949
949
|
"type": "boolean"
|
|
950
|
+
},
|
|
951
|
+
"confirm_mode": {
|
|
952
|
+
"description": "Confirmation frequency for this call. 'full': confirm every matched gate rule. 'streamlined' (client default): skip fail-open 'standard' level prompts — fail-closed levels (irreversible/publish/amount) ALWAYS still confirm. 'quiet': same hard floor as streamlined, for clients that batch/suppress repeat low-risk prompts in their own UI. This field NEVER downgrades fail-closed levels.",
|
|
953
|
+
"type": "string",
|
|
954
|
+
"enum": [
|
|
955
|
+
"full",
|
|
956
|
+
"streamlined",
|
|
957
|
+
"quiet"
|
|
958
|
+
]
|
|
950
959
|
}
|
|
951
960
|
},
|
|
952
961
|
"required": [
|
|
@@ -302,7 +302,7 @@
|
|
|
302
302
|
"query_type"
|
|
303
303
|
],
|
|
304
304
|
"additionalProperties": false,
|
|
305
|
-
"description": "Query an account's coin balance OR paginated coin objects. PARAMETERS: Use 'name_or_address' to specify the account (NOT 'filter'). Use balance=true for total amount, or coin={cursor,limit} to list individual coin objects. Use token_type to query non-default tokens (format: 0x<package>::<module>::<struct>). Returns: { address, balance? | coin? }"
|
|
305
|
+
"description": "Query an account's coin balance OR paginated coin objects. LIVE QUERY: the balance is always fetched fresh from the fullnode — there is NO cache, so 'no_cache' is not needed and not accepted on this query type. PARAMETERS: Use 'name_or_address' to specify the account (NOT 'filter'). Use balance=true for total amount, or coin={cursor,limit} to list individual coin objects. Use token_type to query non-default tokens (format: 0x<package>::<module>::<struct>). If the input resolves to an ON-CHAIN OBJECT (e.g. a Treasury name), the result auto-routes: it returns the object with its 'balance' field plus a routing hint. Returns: { address, balance? | coin? | object?, hint? }"
|
|
306
306
|
},
|
|
307
307
|
{
|
|
308
308
|
"type": "object",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{strictParse}from'../../schema/index.js';import{AskUserInputSchema}from'../../schema/interaction/index.js';export const ASK_USER_INPUT_REQUEST_ID='answer';const FREEFORM_FIELD='freeform_text',MULTI_PREFIX='sel_';function buildInputRequired(a){const b=a['options']['map'](f=>f['id']),c={},d=[];if(a['multi_select'])for(const f of b){c[''+MULTI_PREFIX+f]={'type':'boolean'};}else c[ASK_USER_INPUT_REQUEST_ID]={'type':'string','enum':b,'description':'Chosen\x20option\x20id'},d['push'](ASK_USER_INPUT_REQUEST_ID);a['allow_freeform']&&(c[FREEFORM_FIELD]={'type':'string','description':'Optional\x20free-text\x20answer\x20not\x20covered\x20by\x20the\x20options'});const e=a['context']?a['question']+'\x0a\x0a'+a['context']:a['question'];return{'resultType':'input_required','inputRequests':{[ASK_USER_INPUT_REQUEST_ID]:{'method':'elicitation/create','params':{'message':e,'requestedSchema':{'type':'object','properties':c,...d['length']>0x0?{'required':d}:{}}}}},'content':[{'type':'text','text':'User\x20input\x20is\x20required\x20to\x20continue.\x20'+'The\x20client\x20must\x20fulfil\x20the\x20attached\x20elicitation\x20request;\x20'+'clients\x20without\x20elicitation\x20support\x20should\x20ask\x20the\x20question\x20in\x20plain\x20text\x20instead.'}],'structuredContent':{'result':{'status':'input_required','question':a['question'],'options':a['options'],...a['recommended_id']?{'recommended_id':a['recommended_id']}:{},'multi_select':a['multi_select'],'allow_freeform':a['allow_freeform']}}};}function asRecord(a){return a&&typeof a==='object'&&!Array['isArray'](a)?a:undefined;}function parseAccepted(a,b){const c=new Set(a['options']['map'](f=>f['id'])),d=[];if(a['multi_select']){for(const f of c){if(b?.[''+MULTI_PREFIX+f]===!![])d['push'](f);}if(d['length']===0x0&&!a['allow_freeform'])return{'ids':d,'freeform':null,'error':'multi-select\x20elicitation\x20returned\x20no\x20chosen\x20option'};}else{const g=b?.[ASK_USER_INPUT_REQUEST_ID];if(typeof g!=='string'||!c['has'](g))return{'ids':d,'freeform':null,'error':'elicit\x20response\x20\x27answer\x27\x20is\x20not\x20one\x20of\x20the\x20offered\x20option\x20ids'};d['push'](g);}let e=null;if(a['allow_freeform']){const h=b?.[FREEFORM_FIELD];if(typeof h==='string'){const i=h['trim']();e=i?i['slice'](0x0,0x3e8):null;}}return{'ids':d,'freeform':e};}function labelsFor(a,b){const c=new Map(a['options']['map'](d=>[d['id'],d['label']]));return b['map'](d=>c['get'](d)??d);}function successResult(a,b,c,d){const e=labelsFor(a,c),f={'status':'success','action':b,'question':a['question'],'selected_ids':c,'selected_labels':e,...a['allow_freeform']?{'freeform_text':d}:{}},g=b==='accept'?['User\x20answered:\x20'+a['question'],'Choice:\x20'+(e['join'](',\x20')||'(no\x20option\x20selected)'),...d?['Free\x20text:\x20'+d]:[],'Continue\x20the\x20workflow\x20with\x20this\x20decision\x20—\x20do\x20NOT\x20re-ask\x20the\x20same\x20question.']['join']('\x0a'):'User\x20'+(b==='decline'?'declined\x20to\x20answer':'cancelled')+':\x20'+a['question']+'.\x20'+'Do\x20NOT\x20proceed\x20with\x20a\x20guessed\x20default\x20—\x20ask\x20how\x20to\x20continue\x20in\x20plain\x20text.';return{'content':[{'type':'text','text':g}],'structuredContent':{'result':f}};}export async function handleAskUser(a,b){const c=strictParse(AskUserInputSchema,a,'ask_user\x20input');if(c['recommended_id']&&!c['options']['some'](i=>i['id']===c['recommended_id']))return{'content':[{'type':'text','text':'ask_user\x20error:\x20recommended_id\x20\x27'+c['recommended_id']+'\x27\x20does\x20not\x20match\x20any\x20option\x20id\x20'+('(offered:\x20'+c['options']['map'](i=>i['id'])['join'](',\x20')+').\x20Fix\x20and\x20retry.')}],'structuredContent':{'result':{'status':'error','errors':['recommended_id\x20must\x20match\x20one\x20of\x20options[].id']}}};const d=b?.['inputResponses']?.[ASK_USER_INPUT_REQUEST_ID],e=asRecord(d);if(!e||typeof e['action']!=='string')return buildInputRequired(c);const {action:f}=e;if(f==='decline'||f==='cancel')return successResult(c,f,[],null);if(f!=='accept')return{'content':[{'type':'text','text':'ask_user\x20error:\x20unknown\x20elicitation\x20action\x20\x27'+String(f)+'\x27.\x20Expected\x20accept/decline/cancel.'}],'structuredContent':{'result':{'status':'error','errors':['invalid\x20elicitation\x20action']}}};const g=asRecord(e['content']),h=parseAccepted(c,g);if(h['error'])return{'content':[{'type':'text','text':'ask_user\x20error:\x20'+h['error']+'.\x20Re-issue\x20ask_user\x20or\x20ask\x20the\x20question\x20in\x20plain\x20text.'}],'structuredContent':{'result':{'status':'error','errors':[h['error']]}}};return successResult(c,'accept',h['ids'],h['freeform']);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{listServices,getServiceInfo,toggle as
|
|
1
|
+
import{listServices,getServiceInfo,toggle as a317a,setEnabled as a317b,reset as a317c}from'../../config/index.js';import{strictParse}from'../../schema/index.js';import{ConfigOperationInputSchema}from'../../schema/config/index.js';export async function handleConfigOperation(a){const b=strictParse(ConfigOperationInputSchema,a,'config_operation\x20input'),{action:c,service:d}=b;let e;switch(c){case'list':e={'action':'list','services':listServices()};break;case'toggle':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20toggle');const f=d,g=getServiceInfo(f);if(!g)throw new Error('Unknown\x20service:\x20'+f+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');if(f==='confirm_gate'&&g['enabled'])throw new Error('confirm_gate\x20cannot\x20be\x20disabled\x20at\x20runtime.\x20'+'Set\x20WOWOK_CONFIRM_GATE=0\x20in\x20the\x20server\x20environment\x20and\x20restart\x20if\x20you\x20really\x20want\x20it\x20off.');const h=a317a(f);e={'action':'toggle','service':f,'enabled':h,'reminder':g['reminder']};break;}case'disable':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20disable');const i=d,j=getServiceInfo(i);if(!j)throw new Error('Unknown\x20service:\x20'+i+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');if(i==='confirm_gate')throw new Error('confirm_gate\x20cannot\x20be\x20disabled\x20at\x20runtime.\x20'+'Set\x20WOWOK_CONFIRM_GATE=0\x20in\x20the\x20server\x20environment\x20and\x20restart\x20if\x20you\x20really\x20want\x20it\x20off.');a317b(i,![]),e={'action':'disable','service':i,'enabled':![],'reminder':j['reminder']};break;}case'enable':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20enable');const k=d,l=getServiceInfo(k);if(!l)throw new Error('Unknown\x20service:\x20'+k+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a317b(k,!![]),e={'action':'enable','service':k,'enabled':!![],'reminder':l['reminder']};break;}case'reset':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20reset');const m=d,n=getServiceInfo(m);if(!n)throw new Error('Unknown\x20service:\x20'+m+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');a317c(m),e={'action':'reset','service':m,'enabled':getServiceInfo(m)?.['enabled'],'reminder':n['reminder'],'reset':!![]};break;}case'info':{if(!d)throw new Error('\x27service\x27\x20param\x20is\x20required\x20for\x20info');const o=d,p=getServiceInfo(o);if(!p)throw new Error('Unknown\x20service:\x20'+o+'.\x20Use\x20action=\x27list\x27\x20to\x20see\x20all\x20valid\x20services.');e={'action':'info',...p};break;}default:throw new Error('Unknown\x20config_operation\x20action:\x20'+String(c));}return{'content':[{'type':'text','text':JSON['stringify']({'result':e})}],'structuredContent':{'result':e}};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,extract_zip_messages,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';import{classifyCommunicationEvidence}from'../../communication/evidence.js';import{goalEngine}from'../../goal/GoalEngine.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeManyAccountOrMark(a){if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}function communicationEvidencePayload(a,b){const c=b??{};switch(a){case'send_message':case'send_file':{const d=typeof c['messageId']==='string'?c['messageId']:undefined;return{'detail':d?'message\x20'+d:'message\x20sent','data':d?{'message_id':d}:{}};}case'send_required_info':{const e=typeof c['messageId']==='string'?c['messageId']:undefined,f=Array['isArray'](c['sent_fields'])?c['sent_fields']:undefined;return{'detail':'required-info\x20confirmation\x20sent','data':{...e?{'message_id':e}:{},...f?{'sent_fields':f}:{}}};}case'generate_wts':{const g=typeof c['totalMessageCount']==='number'?c['totalMessageCount']:undefined,h=Array['isArray'](c['files'])?c['files']:undefined;return{'detail':'WTS\x20evidence\x20packet\x20generated','data':{...g!==undefined?{'message_count':g}:{},...h?{'files':h}:{}}};}case'verify_wts':{return{'detail':'WTS\x20evidence\x20verification','data':{'valid':c['valid']===!![]}};}case'sign_wts':{return{'detail':typeof b==='string'?b:'WTS\x20evidence\x20signed','data':{}};}case'proof_message':{const
|
|
1
|
+
import{strictParse,MessengerOperationInputSchema}from'../../schema/index.js';import{watch_conversations,send_message,send_file,watch_messages,extract_zip_messages,pull_messages,generate_wts,verify_wts,sign_wts,wts2html,proof_message,mark_messages_as_viewed,mark_conversation_as_viewed,blacklist,friendslist,guardlist,settings,LocalInfo}from'@wowok/wowok';import{classifyError,buildDataSemantic}from'../../schema/call/semantic.js';import{classifyCommunicationEvidence}from'../../communication/evidence.js';import{goalEngine}from'../../goal/GoalEngine.js';export function normalizeAccountOrMark(a){if(typeof a==='string')return{'name_or_address':a,'local_mark_first':!![]};return a;}export function normalizeManyAccountOrMark(a){if(Array['isArray'](a))return{'entities':a['map'](b=>typeof b==='string'?{'name_or_address':b,'local_mark_first':!![]}:b),'check_all_founded':!![]};return a;}function communicationEvidencePayload(a,b){const c=b??{};switch(a){case'send_message':case'send_file':{const d=typeof c['messageId']==='string'?c['messageId']:undefined;return{'detail':d?'message\x20'+d:'message\x20sent','data':d?{'message_id':d}:{}};}case'send_required_info':{const e=typeof c['messageId']==='string'?c['messageId']:undefined,f=Array['isArray'](c['sent_fields'])?c['sent_fields']:undefined;return{'detail':'required-info\x20confirmation\x20sent','data':{...e?{'message_id':e}:{},...f?{'sent_fields':f}:{}}};}case'generate_wts':{const g=typeof c['totalMessageCount']==='number'?c['totalMessageCount']:undefined,h=Array['isArray'](c['files'])?c['files']:undefined,i=Array['isArray'](c['htmlFiles'])?c['htmlFiles']:undefined;return{'detail':'WTS\x20evidence\x20packet\x20generated','data':{...g!==undefined?{'message_count':g}:{},...h?{'files':h}:{},...i?{'html_reports':i}:{}}};}case'verify_wts':{return{'detail':'WTS\x20evidence\x20verification','data':{'valid':c['valid']===!![]}};}case'sign_wts':{return{'detail':typeof b==='string'?b:'WTS\x20evidence\x20signed','data':{}};}case'proof_message':{const j=typeof c['proofAddress']==='string'?c['proofAddress']:undefined;return{'detail':j?'proof\x20'+j:'message\x20proofed\x20on-chain','data':j?{'proof_address':j}:{}};}default:return{'detail':a,'data':{}};}}export async function handleMessengerOperation(a){let b;try{b=strictParse(MessengerOperationInputSchema,a,'messenger_operation\x20input');const c=b['operation'];let d;switch(b['operation']){case'watch_conversations':{const g=await watch_conversations(b['filter']);d={'operation':'watch_conversations','result':g};break;}case'send_message':{const h=await send_message(b['from'],normalizeAccountOrMark(b['to']),b['content'],b['options']),i={...h,'merkleData':h['merkleData']?{'leafIndex':h['merkleData']['leafIndex'],'prevRoot':h['merkleData']['prevRoot'],'newRoot':h['merkleData']['newRoot'],'serverSignature':h['merkleData']['serverSignature'],'serverTimestamp':h['merkleData']['serverTimestamp'],'serverPublicKey':h['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_message','result':i};break;}case'send_file':{const j=await send_file(b['from'],normalizeAccountOrMark(b['to']),b['filePath'],b['options']),k={...j,'merkleData':j['merkleData']?{'leafIndex':j['merkleData']['leafIndex'],'prevRoot':j['merkleData']['prevRoot'],'newRoot':j['merkleData']['newRoot'],'serverSignature':j['merkleData']['serverSignature'],'serverTimestamp':j['merkleData']['serverTimestamp'],'serverPublicKey':j['merkleData']['serverPublicKey']}:undefined};d={'operation':'send_file','result':k};break;}case'send_required_info':{let l=b['content'];const m=[];if(!l){const p=await LocalInfo['Instance']()['list'](),q=b['fields'],r=q&&q['length']>0x0?p['filter'](s=>q['includes'](s['name'])):p;if(r['length']===0x0)throw new Error('No\x20LocalInfo\x20fields\x20available.\x20Add\x20private\x20info\x20first\x20via\x20local_info_operation.');l=r['map'](s=>s['name']+':\x20'+s['default'])['join']('\x0a'),m['push'](...r['map'](s=>s['name']));}const n=await send_message(b['from'],normalizeAccountOrMark(b['to']),l,b['options']),o={...n,'merkleData':n['merkleData']?{'leafIndex':n['merkleData']['leafIndex'],'prevRoot':n['merkleData']['prevRoot'],'newRoot':n['merkleData']['newRoot'],'serverSignature':n['merkleData']['serverSignature'],'serverTimestamp':n['merkleData']['serverTimestamp'],'serverPublicKey':n['merkleData']['serverPublicKey']}:undefined,'sent_fields':m};d={'operation':'send_required_info','result':o};break;}case'watch_messages':{const s=b['filter']?{...b['filter'],'peerAddress':b['filter']['peerAddress']?normalizeAccountOrMark(b['filter']['peerAddress']):undefined}:undefined,t=await watch_messages(s);d={'operation':'watch_messages','result':t};break;}case'extract_zip_messages':{const u=await extract_zip_messages(b['account'],b['messages'],b['outputDir']);d={'operation':'extract_zip_messages','result':u};break;}case'generate_wts':{const v=b['params']?{...b['params'],'peerAccount':normalizeAccountOrMark(b['params']['peerAccount'])}:undefined,w=await generate_wts(v);d={'operation':'generate_wts','result':w};break;}case'verify_wts':{const x=await verify_wts(b['wtsFilePath']);d={'operation':'verify_wts','result':x};break;}case'sign_wts':{const y=await sign_wts(b['wtsFilePath'],b['account'],b['outputPath']);d={'operation':'sign_wts','result':y};break;}case'wts2html':{const z=await wts2html(b['wtsPath'],b['options']);d={'operation':'wts2html','result':z};break;}case'proof_message':{const A=await proof_message(b['account'],b['messageId'],b['network']);d={'operation':'proof_message','result':A};break;}case'blacklist':{const B={'account':b['account'],'op':b['blacklist']['op']};'users'in b['blacklist']&&(B['users']=normalizeManyAccountOrMark(b['blacklist']['users']));const C=await blacklist(B);d={'operation':'blacklist','op':b['blacklist']['op'],'result':C['result']};break;}case'friendslist':{const D={'account':b['account'],'op':b['friendslist']['op']};'users'in b['friendslist']&&(D['users']=normalizeManyAccountOrMark(b['friendslist']['users']));const E=await friendslist(D);d={'operation':'friendslist','op':b['friendslist']['op'],'result':E['result']};break;}case'guardlist':{const F=await guardlist({'account':b['account'],...b['guardlist']});d={'operation':'guardlist','op':b['guardlist']['op'],'result':F['result']};break;}case'settings':{const G=await settings({'account':b['account'],...b['settings']});d={'operation':'settings','op':b['settings']['op'],'result':G['result']};break;}case'mark_messages_as_viewed':{const H=await mark_messages_as_viewed(b['messageIds'],b['account']);d={'operation':'mark_messages_as_viewed','result':H};break;}case'mark_conversation_as_viewed':{const I=await mark_conversation_as_viewed(normalizeAccountOrMark(b['peerAddress']),b['account']);d={'operation':'mark_conversation_as_viewed','result':I};break;}case'pull_messages':{const J=await pull_messages(b['account'],b['limit']);d={'operation':'pull_messages','result':J};break;}default:throw new Error('Unknown\x20messenger\x20operation:\x20'+c);}const e=classifyCommunicationEvidence(c),f=b['goal_id'];if(e&&f){const K=d['result'],{detail:L,data:M}=communicationEvidencePayload(c,K);await goalEngine['recordCommunicationEvidence'](f,{'operation':c,'kind':e['kind'],'title':e['title'],'detail':L,'data':M},b['network']??'default');}return{'content':[{'type':'text','text':JSON['stringify'](d)}],'structuredContent':{'result':d}};}catch(N){const O=N instanceof Error?N['message']:String(N),P=b?{'operation_type':'messenger_'+b['operation'],'data':b}:undefined,Q=classifyError(O),R={'operation':'error','error':O};if(Q['error_code']!==undefined)R['error_code']=Q['error_code'];if(Q['retryable']!==undefined)R['retryable']=Q['retryable'];if(Q['recovery_hint']!==undefined)R['recovery_hint']=Q['recovery_hint'];return{'content':[{'type':'text','text':'Error:\x20'+O}],'structuredContent':{'result':R,'semantic':buildDataSemantic(undefined,P,!![],O)}};}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{readFileSync,writeFileSync,existsSync,mkdirSync}from'fs';import{resolve,dirname,join}from'path';import{getWowMcpDir}from'@wowok/wowok';import{CallService,CallMachine,CallProgress,CallGuard,CallArbitration,CallRepository,CallContact,CallTreasury,CallReward,CallAllocation,CallPersonal,CallPayment,CallDemand,CallOrder,gen_passport,CallProof,gen_proof,ResponseData,LocalMark,query_objects,parseGuardFile,formatGuardParseErrors,transformRewardInput,transformPersonalInput}from'@wowok/wowok';import{OnchainOperationsSchema,strictParse,getEnvConfig,handleCallResult,checkClientSchemaCompatibility,parseMachineNodesFromText,formatNodeErrors as a329a,transformSubmission}from'../../schema/index.js';import{handlePermissionOperations}from'../../schema/call/permission-handler.js';import{collectPermissionIndexes,checkPermissionAuthorization,formatPermissionWarning}from'../../schema/utils/permission-machine-check.js';import{getSkillsHintForOnchain}from'../../schema/utils/skills-recommendation.js';import{prepareFundOperation,generateSkillsHint as a329b}from'../../knowledge/fund-layer.js';import{generateGuardSubmissionPrompt,formatSubmissionPrompt}from'../../knowledge/guard-submission-prompt.js';import{enrichWorkflowGuidance,mergeGuidanceIntoOutput,batchQueryObjectsByIds}from'../../knowledge/workflow-guidance.js';import{classifyWipPath}from'../wip-deploy-assist.js';import{withHarness}from'../shared.js';import{goalEngine}from'../../goal/GoalEngine.js';async function buildGuardSubmissionPrompt(a,b,c){if(!a||typeof a!=='object'||!('submission'in a))return undefined;const d=a['submission'];if(!Array['isArray'](d)||d['length']===0x0)return undefined;const e=d[0x0]?.['guard'];if(!e)return undefined;const f=await generateGuardSubmissionPrompt(e,{'operation':b,...c});return f?formatSubmissionPrompt(f):undefined;}const REFERRER_FILE=join(getWowMcpDir(),'referrer');function readStoredReferrer(){try{if(!existsSync(REFERRER_FILE))return null;const a=readFileSync(REFERRER_FILE,'utf8')['trim']();return a||null;}catch{return null;}}const PROJECT_SKILL_DIRS=['.claude/skills','.agents/skills','.cursor/rules','.github/prompts','.windsurf/skills','.codex/skills','.qoder/skills','.roo/skills','.codebuddy/skills'],PROJECT_SKILL_MARKERS=['wowok-provider','wowok-supplier','wowok-collaborator','wowok-arbitrator','wowok-order','wowok-messenger','wowok-machine','wowok-output','wowok-onboard','wowok-planner','wowok-auditor','wowok-governance'],SKILLS_HINT_FILE=join(getWowMcpDir(),'skills-hint-asked.json');function projectHasSkills(a){for(const b of PROJECT_SKILL_DIRS){for(const c of PROJECT_SKILL_MARKERS){if(existsSync(join(a,b,c)))return!![];}}return![];}function loadSkillsAsked(){try{if(!existsSync(SKILLS_HINT_FILE))return{};return JSON['parse'](readFileSync(SKILLS_HINT_FILE,'utf8'))??{};}catch{return{};}}function persistSkillsAsked(a){try{const b=loadSkillsAsked();b[a]=!![],mkdirSync(dirname(SKILLS_HINT_FILE),{'recursive':!![]}),writeFileSync(SKILLS_HINT_FILE,JSON['stringify'](b,null,0x2),'utf8');}catch{}}function getProjectSkillsHint(){try{const a=process['cwd']();if(!a||projectHasSkills(a))return null;const b=loadSkillsAsked();if(b[a])return null;return persistSkillsAsked(a),'WoWok\x20skills\x20are\x20not\x20installed\x20in\x20this\x20project.\x20Run\x20`wowok-skills\x20init`\x20'+'here\x20to\x20install\x20them\x20(the\x20MCP\x20works\x20regardless;\x20skills\x20improve\x20AI\x20orchestration).';}catch{return null;}}function formatRecipientLabel(a){if(!a)return'unknown';if(typeof a==='string')return a;if('GuardIdentifier'in a)return'GuardIdentifier('+a['GuardIdentifier']+')';if('Entity'in a){const b=a['Entity'];if(typeof b==='string'&&b['length']>0x10)return'Entity('+b['slice'](0x0,0x8)+'...'+b['slice'](-0x4)+')';return'Entity('+b+')';}if('Signer'in a)return'Signer\x20(transaction\x20signer)';return JSON['stringify'](a);}function formatMistAmount(a){const b=Number(a)/0x3b9aca00;if(b===0x0)return'0\x20WOW';const c=b['toFixed'](0x9)['replace'](/\.?0+$/,'');return c+'\x20WOW\x20('+a['toString']()+'\x20MIST)';}function extractNodesForCheck(a){if(!a?.['node'])return[];if(a['node']['nodes']&&Array['isArray'](a['node']['nodes']))return a['node']['nodes'];return[];}function resolvePermissionRef(a){if(!a?.['object'])return null;if(typeof a['object']==='string')return null;const b=a['object'];if(b['permission']){if(typeof b['permission']==='string')return b['permission'];return null;}return null;}async function checkMachinePermissionBeforePublish(a,b){if(a?.['publish']!==!![])return'';const c=extractNodesForCheck(a);if(c['length']===0x0)return'';const d=collectPermissionIndexes(c);if(d['requiredIndexes']['length']===0x0)return'';let e='';if(d['missingRefs']['length']>0x0){e+='WARNING:\x20Some\x20forwards\x20have\x20NEITHER\x20permissionIndex\x20nor\x20namedOperator.\x20'+'These\x20forwards\x20cannot\x20be\x20executed.\x20Add\x20one\x20or\x20the\x20other:\x0a';for(const k of d['missingRefs']){e+='\x20\x20-\x20Node\x20\x22'+k['nodeName']+'\x22,\x20pair\x20prev_node=\x22'+k['prevNode']+'\x22,\x20forward\x20\x22'+k['forwardName']+'\x22\x0a';}e+='\x0a';}const f=resolvePermissionRef(a);if(!f)return d['requiredIndexes']['length']>0x0&&(e+='PRE-PUBLISH\x20REMINDER:\x20This\x20Machine\x20uses\x20'+d['requiredIndexes']['length']+'\x20custom\x20permission\x20index(es):\x20['+d['requiredIndexes']['join'](',\x20')+'].\x20'+'After\x20creating\x20the\x20Permission\x20object,\x20grant\x20entities\x20for\x20each\x20index\x20via\x20'+'permission.op=\x22add\x20perm\x20by\x20index\x22\x20BEFORE\x20publishing\x20the\x20Machine.\x20'+'Otherwise,\x20forwards\x20using\x20these\x20indexes\x20will\x20be\x20un-executable.\x0a'),e;let g=f;if(!f['startsWith']('0x'))try{const l=await LocalMark['Instance']()['get'](f);if(l?.['address'])g=l['address'];else return e+'PRE-PUBLISH:\x20Could\x20not\x20resolve\x20Permission\x20name\x20\x27'+f+'\x27\x20to\x20an\x20address.\x20Ensure\x20the\x20Permission\x20object\x20exists\x20and\x20is\x20marked.\x20'+'Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';}catch{return e+'PRE-PUBLISH:\x20Failed\x20to\x20lookup\x20Permission\x20name\x20\x27'+f+'\x27.\x20Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';}const h=b?.['network']??'testnet';let i=null;try{const m=await query_objects({'objects':[g],'network':h}),n=m?.['objects']?.[0x0];n&&(i={'address':g,'entity_count':n['entity_count'],'perm_remark':n['perm_remark'],'owner':n['owner']??n['builder'],'admin':n['admin']});}catch{return e+'PRE-PUBLISH:\x20Failed\x20to\x20query\x20Permission\x20object\x20'+g+'.\x20Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';}if(!i)return e+'PRE-PUBLISH:\x20Permission\x20object\x20'+g+'\x20not\x20found\x20on-chain.\x20Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';const j=checkPermissionAuthorization(d['requiredIndexes'],i);return!j['allAuthorized']&&(e+=formatPermissionWarning(j)+'\x0a'),e;}async function detectServiceGuardCircularDependency(a){if(!a||typeof a['object']!=='object'||a['object']===null)return null;const b=a['order_allocators'];if(!b||typeof b!=='object')return null;const c=Array['isArray'](b['allocators'])?b['allocators']:[];if(c['length']===0x0)return null;const d=[],e=new Set();for(const k of c){const l=k?.['guard'];if(typeof l==='string'&&!l['startsWith']('0x')){if(e['has'](l))continue;e['add'](l);try{const m=await LocalMark['Instance']()['get_address'](l);!m&&d['push'](l);}catch{d['push'](l);}}}if(d['length']===0x0)return null;const f=d['map'](n=>'\x27'+n+'\x27')['join'](',\x20'),g=a['object'],h=g['name']??'<service_name>',i=[{'step':0x1,'action':'onchain_operations','operation_type':'service','params':{...a,'order_allocators':null,'publish':![]},'purpose':'Create\x20Service\x20\x27'+h+'\x27\x20WITHOUT\x20order_allocators\x20to\x20establish\x20'+('its\x20LocalMark\x20entry.\x20After\x20this\x20step,\x20the\x20name\x20\x27'+h+'\x27\x20resolves\x20')+'to\x20an\x20on-chain\x20address.'},{'step':0x2,'action':'onchain_operations','operation_type':'guard','params':d['map'](n=>({'object':{'name':n,'type':'Guard'},'_hint':'Table\x20items\x20may\x20reference\x20Service\x20\x27'+h+'\x27\x20by\x20name'})),'purpose':'Create\x20Guard(s)\x20'+f+'.\x20Their\x20table\x20items\x20can\x20now\x20resolve\x20'+('Service\x20\x27'+h+'\x27\x20by\x20name\x20(LocalMark\x20entry\x20from\x20step\x201).')},{'step':0x3,'action':'onchain_operations','operation_type':'service','params':{'object':h,'order_allocators':b,'publish':a['publish']??!![]},'purpose':'Update\x20Service\x20with\x20order_allocators\x20(referencing\x20Guards\x20created\x20in\x20'+'step\x202)\x20and\x20publish.\x20After\x20publish,\x20order_allocators\x20becomes\x20SDK-LOCKED.'}],j='⚠️\x20Circular\x20dependency\x20detected:\x20Service\x20↔\x20Guard\x0a\x0a'+('Cannot\x20create\x20Service\x20with\x20order_allocators\x20referencing\x20non-existent\x20Guard(s):\x20'+f+'.\x0a\x0a')+'Explanation:\x20Guard\x20table\x20items\x20may\x20reference\x20the\x20Service\x20by\x20name,\x20creating\x20a\x20circular\x20'+'dependency:\x20the\x20Service\x20must\x20exist\x20as\x20a\x20LocalMark\x20before\x20the\x20Guard\x20can\x20resolve\x20it,\x20'+'but\x20the\x20Guard\x20must\x20exist\x20before\x20the\x20Service\x20can\x20reference\x20it\x20in\x20order_allocators.\x20'+'The\x20SDK\x20would\x20fail\x20with\x20a\x20BCS\x20serialization\x20error:\x20\x22Expected\x20valid\x20Address\x20for\x20'+'ValueType.Address,\x20but\x20failed\x20to\x20resolve\x20string:\x20<name>\x22.\x0a\x0a'+'Recommended\x20steps:\x0a'+i['map'](n=>'\x20\x20Step\x20'+n['step']+'\x20('+n['operation_type']+'):\x20'+n['purpose'])['join']('\x0a')+'\x0a\x0aHint:\x20This\x20is\x20the\x20canonical\x20Service↔Guard\x20circular\x20dependency.\x20The\x203-step\x20'+'pattern\x20above\x20is\x20the\x20documented\x20solution\x20(see\x20SCHEMA-03\x20/\x20P0-01\x20fix\x20in\x20'+'schema/call/service.ts\x20publish\x20field\x20description).';return{'content':[{'type':'text','text':j}],'structuredContent':{'result':{'type':'error','error':'Cannot\x20create\x20Service\x20with\x20order_allocators\x20referencing\x20non-existent\x20Guard(s):\x20'+f+'.\x20Circular\x20dependency:\x20Service↔Guard.','error_code':'circular_dependency_detected','retryable':!![],'recovery_hint':JSON['stringify'](i),'related_object':h},'message':'Circular\x20dependency\x20detected:\x20Service\x20↔\x20Guard.\x20See\x20recovery_hint\x20for\x20the\x203-step\x20creation\x20pattern.'}};}function buildFundBlockResult(a,b){const c=a['matchErrors']['length']>0x0,d=a['errors']['length']>0x0,e=a['blockingErrors']['some'](k=>k['includes']('TOKEN\x20CHOICE\x20REQUIRED')),f=c&&d?'FUND\x20OPERATION\x20BLOCKED':c?'TOKEN\x20TYPE\x20MISMATCH\x20—\x20operation\x20blocked':e?'TOKEN\x20CHOICE\x20REQUIRED\x20—\x20operation\x20blocked,\x20awaiting\x20user\x20selection':'FUND\x20INPUT\x20BLOCKED\x20—\x20operation\x20blocked',g=c&&d?'fund_blocked':c?'token_type_mismatch':e?'token_choice_required':'fund_input_error',h=c?'\x0a\x0aThe\x20token\x20type\x20of\x20a\x20generic\x20on-chain\x20object\x20(e.g.\x20Treasury<T>,\x20Service<T>)\x20is\x20'+'determined\x20at\x20creation\x20and\x20can\x20NEVER\x20be\x20changed,\x20and\x20monetary\x20input\x20is\x20never\x20'+('processed\x20with\x20unknown\x20token\x20precision.\x20This\x20'+b+'\x20operation\x20was\x20')+'NOT\x20executed.\x20Fix\x20the\x20errors\x20above\x20and\x20re-issue\x20the\x20operation'+(a['objectTokenType']?'\x20(object\x20token\x20type:\x20'+a['objectTokenType']+')':'')+'.':e?'\x0a\x0aMultiple\x20on-chain\x20tokens\x20may\x20legally\x20share\x20the\x20same\x20symbol\x20(several\x20'+'issuers\x20can\x20each\x20publish\x20a\x20\x22USDT\x22),\x20so\x20a\x20bare\x20symbol\x20can\x20never\x20identify\x20'+('the\x20issuer.\x20This\x20'+b+'\x20operation\x20was\x20NOT\x20executed\x20and\x20no\x20')+'on-chain\x20action\x20was\x20taken.\x20Present\x20the\x20numbered\x20candidate\x20list\x20above\x20to\x20'+'the\x20USER,\x20wait\x20for\x20their\x20choice,\x20then\x20re-issue\x20with\x20the\x20chosen\x20token\x27s\x20'+'full\x20type.':'\x0a\x0aMonetary\x20input\x20is\x20never\x20processed\x20with\x20unknown\x20token\x20precision\x20or\x20an\x20'+('unparseable\x20amount.\x20This\x20'+b+'\x20operation\x20was\x20NOT\x20executed\x20and\x20')+'no\x20on-chain\x20action\x20was\x20taken.\x20Follow\x20the\x20recovery\x20steps\x20in\x20the\x20error\x20'+'above\x20and\x20re-issue\x20the\x20operation.',i='⛔\x20'+f+'\x0a\x0a'+a['blockingErrors']['map'](k=>'\x20\x20•\x20'+k)['join']('\x0a')+h,j=e?'Present\x20the\x20numbered\x20token\x20candidate\x20list\x20from\x20the\x20error\x20message\x20to\x20the\x20USER\x20'+'(full\x20type,\x20name,\x20decimals,\x20verified\x20tag\x20are\x20all\x20shown)\x20—\x20do\x20NOT\x20pick\x20an\x20'+'issuer\x20yourself.\x20After\x20the\x20user\x20chooses\x20(by\x20number\x20or\x20by\x20pasting\x20the\x20full\x20'+('type),\x20re-issue\x20this\x20'+b+'\x20operation\x20with\x20that\x20token\x27s\x20FULL\x20type\x20')+'string\x20(package::module::Name)\x20in\x20type_parameter\x20(object.type_parameter\x20for\x20'+'service\x20creation;\x20root\x20type_parameter\x20for\x20payment\x20receive).\x20Also\x20verify\x20the\x20'+'WOW\x20network\x20selection\x20is\x20correct.':'Use\x20token\x20type\x20'+(a['objectTokenType']??'<the\x20object\x27s\x20generic\x20token\x20type>')+'\x20for\x20all\x20'+('amounts,\x20coins,\x20and\x20receive\x20records\x20in\x20this\x20'+b+'\x20operation.\x20')+'Query\x20the\x20object\x20via\x20query_toolkit\x20onchain_objects\x20to\x20confirm\x20its\x20generic\x20'+'token\x20type\x20(type_raw,\x20e.g.\x20\x220x2::treasury::Treasury<0x2::wow::WOW>\x22).\x20'+'For\x20precision-unavailable\x20tokens,\x20retry\x20the\x20operation\x20—\x20the\x20on-chain\x20'+'metadata\x20lookup\x20may\x20have\x20been\x20transient.';return{'content':[{'type':'text','text':i}],'structuredContent':{'result':{'type':'error','error':a['blockingErrors']['join']('\x20|\x20'),'error_code':g,'retryable':!![],'recovery_hint':j},'message':'Fund\x20operation\x20blocked\x20before\x20execution.'}};}function checkSalesWipNetworkDeployment(a,b,c){const d=a?.['sales'];if(!d||typeof d!=='object')return null;if(d['op']!=='add'&&d['op']!=='set')return null;const e=Array['isArray'](d['sales'])?d['sales']:[];if(e['length']===0x0)return null;const f=b?.['network']==='localnet';for(const g of e){const h=g?.['wip'];if(typeof h!=='string'||h==='')continue;const i=classifyWipPath(h);if(!i['is_local'])continue;if(i['type']==='local_http'){if(f){c['push']('WIP\x20INTERNAL-TEST-ONLY\x20REMINDER\x20(sale\x20\x22'+g['name']+'\x22):\x20wip\x20=\x20\x22'+h+'\x22\x20is\x20a\x20'+('local-network\x20URL\x20('+i['description']+').\x20It\x20is\x20reachable\x20ONLY\x20on\x20the\x20')+'local\x20machine\x20/\x20LAN\x20where\x20a\x20local\x20WIP\x20server\x20runs.\x20This\x20is\x20acceptable\x20for\x20LOCALNET\x20'+'internal\x20testing,\x20but\x20customers\x20and\x20on-chain\x20verifiers\x20on\x20OTHER\x20machines\x20CANNOT\x20'+'reach\x20it\x20—\x20on\x20testnet/mainnet,\x20every\x20customer\x20order_new\x20would\x20fail\x20100%\x20because\x20the\x20'+'WIP\x20file\x20cannot\x20be\x20verified.\x20For\x20any\x20non-localnet\x20deployment,\x20replace\x20this\x20URL\x20with\x20'+'a\x20public\x20endpoint\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20your\x20own\x20website)\x20or\x20leave\x20sale.wip\x20empty.');continue;}const l='a\x20local-network\x20URL\x20('+i['description']+')',m='⛔\x20WIP\x20IS\x20NOT\x20NETWORK-DEPLOYABLE\x20—\x20sales\x20NOT\x20submitted\x0a\x0a'+('Sale\x20\x22'+g['name']+'\x22\x20has\x20wip\x20=\x20\x22'+h+'\x22,\x20which\x20is\x20'+l+'.\x0a\x0a')+'INTERNAL\x20TEST\x20USE\x20ONLY:\x20this\x20URL\x20is\x20reachable\x20only\x20from\x20the\x20merchant\x27s\x20own\x20machine/LAN.\x20'+'Customers\x20on\x20other\x20machines\x20cannot\x20reach\x20it,\x20so\x20verifying\x20the\x20WIP\x20file\x20at\x20order\x20time\x20'+'fails\x20and\x20order_new\x20aborts\x20100%.\x20Local-network\x20WIP\x20URLs\x20are\x20allowed\x20ONLY\x20for\x20'+('localnet\x20internal\x20testing\x20(env.network\x20=\x20\x22localnet\x22);\x20on\x20'+(b?.['network']??'this\x20network')+'\x20')+'they\x20must\x20never\x20be\x20stored\x20on-chain.\x0a\x0a'+'Fix:\x20deploy\x20the\x20.wip\x20file\x20to\x20a\x20publicly\x20reachable\x20endpoint,\x20then\x20re-run\x20with\x20'+'sale.wip\x20=\x20\x22<public\x20URL>\x22\x20(e.g.\x20GitHub\x20Pages,\x20IPFS\x20gateway,\x20or\x20your\x20own\x20website).\x0a'+'\x20\x20•\x20GitHub\x20Pages:\x20https://<user>.github.io/<repo>/<file>.wip\x0a'+'\x20\x20•\x20IPFS:\x20\x20\x20\x20\x20\x20\x20\x20https://ipfs.io/ipfs/<CID>\x20\x20(or\x20ipfs://<CID>)\x0a'+'\x20\x20•\x20Your\x20site:\x20\x20\x20https://<your-domain>/<path>/<file>.wip\x0a'+'Alternatively,\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20SKIP\x20WIP\x20verification\x20—\x20'+'TESTING\x20ONLY,\x20not\x20recommended\x20for\x20production.';return{'content':[{'type':'text','text':m}],'structuredContent':{'result':{'type':'error','error':'Sale\x20\x22'+g['name']+'\x22\x20wip\x20is\x20'+l+':\x20'+h+'.\x20Local-network\x20URLs\x20are\x20INTERNAL\x20TEST\x20USE\x20ONLY\x20—\x20customers\x20cannot\x20verify\x20them,\x20aborting\x20order_new\x20100%.','error_code':'wip_not_network_deployed','retryable':!![],'recovery_hint':'Deploy\x20the\x20.wip\x20file\x20to\x20a\x20public\x20endpoint\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20your\x20own\x20website)\x20'+'and\x20set\x20sale.wip\x20to\x20the\x20public\x20URL;\x20or\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20skip\x20WIP\x20'+'verification\x20(TESTING\x20ONLY).','related_object':g['name']},'message':'WIP\x20is\x20a\x20local-network\x20URL\x20(INTERNAL\x20TEST\x20USE\x20ONLY)\x20—\x20sales\x20not\x20submitted.\x20See\x20recovery_hint.'}};}const j='a\x20LOCAL\x20'+i['type']+'\x20path',k='⛔\x20WIP\x20IS\x20NOT\x20NETWORK-DEPLOYABLE\x20—\x20sales\x20NOT\x20submitted\x0a\x0a'+('Sale\x20\x22'+g['name']+'\x22\x20has\x20wip\x20=\x20\x22'+h+'\x22,\x20which\x20is\x20'+j+'.\x0a\x0a')+'Why\x20this\x20is\x20fatal:\x20the\x20WIP\x20path\x20is\x20stored\x20ON-CHAIN\x20and\x20every\x20customer\x20'+'(on\x20a\x20different\x20machine)\x20fetches\x20it\x20when\x20placing\x20an\x20order.\x20A\x20local\x20path\x20/\x20'+'localhost\x20/\x20LAN\x20URL\x20is\x20reachable\x20only\x20from\x20YOUR\x20machine\x20—\x20it\x20passes\x20the\x20'+'merchant-side\x20set-time\x20verification\x20but\x20makes\x20order_new\x20abort\x20100%\x20for\x20customers.\x0a\x0a'+'Fix:\x20deploy\x20the\x20.wip\x20file\x20to\x20a\x20publicly\x20reachable\x20endpoint,\x20then\x20re-run\x20with\x20'+'sale.wip\x20=\x20\x22<public\x20URL>\x22\x20(e.g.\x20GitHub\x20Pages,\x20IPFS\x20gateway,\x20or\x20your\x20own\x20website).\x0a'+'\x20\x20•\x20GitHub\x20Pages:\x20https://<user>.github.io/<repo>/<file>.wip\x0a'+'\x20\x20•\x20IPFS:\x20\x20\x20\x20\x20\x20\x20\x20https://ipfs.io/ipfs/<CID>\x20\x20(or\x20ipfs://<CID>)\x0a'+'\x20\x20•\x20Your\x20site:\x20\x20\x20https://<your-domain>/<path>/<file>.wip\x0a'+'Alternatively,\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20SKIP\x20WIP\x20verification\x20—\x20'+'TESTING\x20ONLY,\x20not\x20recommended\x20for\x20production.';return{'content':[{'type':'text','text':k}],'structuredContent':{'result':{'type':'error','error':'Sale\x20\x22'+g['name']+'\x22\x20wip\x20is\x20'+j+':\x20'+h+'.\x20Local\x20WIP\x20paths\x20are\x20unreachable\x20by\x20customers\x20and\x20abort\x20order_new\x20100%.','error_code':'wip_not_network_deployed','retryable':!![],'recovery_hint':'Deploy\x20the\x20.wip\x20file\x20to\x20a\x20public\x20endpoint\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20your\x20own\x20website)\x20'+'and\x20set\x20sale.wip\x20to\x20the\x20public\x20URL;\x20or\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20skip\x20WIP\x20'+'verification\x20(TESTING\x20ONLY).','related_object':g['name']},'message':'WIP\x20is\x20not\x20network-deployable\x20—\x20sales\x20not\x20submitted.\x20See\x20recovery_hint.'}};}return null;}function extractObjectOnlyRef(a){const b=a;if(b['submission'])return undefined;const c=b['data'];if(!c||typeof c!=='object'||Array['isArray'](c))return undefined;const d=c,e=Object['keys'](d);if(e['length']!==0x1||e[0x0]!=='object')return undefined;const f=d['object'];return typeof f==='string'&&f['trim']()['length']>0x0?f['trim']():undefined;}async function queryObjectOnlyResult(a,b,c){let d=[],f;try{const j=await query_objects({'objects':[b],'network':c?.['network'],'no_cache':!![]});d=j['objects']??[],d['length']===0x0&&(f='Object\x20\x27'+b+'\x27\x20not\x20found\x20on-chain.\x20It\x20may\x20never\x20have\x20been\x20created,\x20'+'its\x20local\x20mark\x20may\x20be\x20missing\x20(register\x20it\x20via\x20local_mark_operation),\x20'+'or\x20it\x20may\x20live\x20on\x20a\x20different\x20network.');}catch(k){const l=k?.['message']??String(k);f='Query\x20failed\x20for\x20\x27'+b+'\x27:\x20'+l;}const g=d['map'](m=>({...m,'change':'queried'})),h=f?'Object-only\x20payload\x20for\x20'+a+'\x20—\x20nothing\x20to\x20mutate,\x20no\x20transaction\x20was\x20sent\x20(no\x20gas\x20used).\x20'+f:'Object-only\x20payload\x20for\x20'+a+'\x20—\x20nothing\x20to\x20mutate,\x20no\x20transaction\x20was\x20sent\x20(no\x20gas\x20used).\x20Current\x20on-chain\x20state\x20of\x20\x27'+b+'\x27:',i={'message':h,'result':f?{'type':'error','error':f,'error_code':'object_not_found','retryable':![],'recovery_hint':'Check\x20the\x20name\x20spelling\x20(local_mark_operation\x20list),\x20the\x20env.network\x20value,\x20or\x20create\x20the\x20object\x20first.'}:{'type':'data','data':g},'semantic':{'intent':a+'_read','status':f?'failed':'success','summary':h,'next_actions':[{'action':'Use\x20query_toolkit\x20(onchain_objects)\x20for\x20richer\x20inspection\x20—\x20content\x20fields,\x20ownership,\x20dynamic\x20tables.','reason':'Object-only\x20onchain_operations\x20payloads\x20are\x20answered\x20by\x20a\x20pure\x20query;\x20they\x20never\x20mutate\x20on-chain\x20state.','tool':'query_toolkit','priority':'recommended'}],'warnings':['Payload\x20contained\x20only\x20data.object\x20—\x20interpreted\x20as\x20a\x20READ\x20request,\x20not\x20a\x20transaction.']}};return{'content':[{'type':'text','text':h}],'structuredContent':i};}export async function handleOnchainOperations(a){let b,c=[];async function d(f,g,h,k){const l=new Set(['service','machine','progress','repository','arbitration','contact','treasury','reward','allocation','permission','guard','personal','demand','order','proof']);if(!l['has'](h))return;if(!k||typeof k!=='object'||'error'in k)return;if(!k['digest'])return;if(!f)return;try{const m=ResponseData(k),o=m['filter'](p=>p['change']==='created'&&p['object']);if(f&&o['length']>0x0){const p=o['filter'](q=>typeof q['type_raw']==='string'&&q['type_raw']['includes']('::'))['map'](q=>({'type':q['type_raw']['split']('::')['pop'](),'object':q['object']}));if(p['length']>0x0){const q=await goalEngine['registerActObjects'](f,p,g??'default');q>0x0&&console['warn']('[autoRegisterResults]\x20'+q+'\x20created\x20object(s)\x20registered\x20to\x20goal\x20'+f+'\x20(ACT\x20station)');}}}catch{}}try{if(typeof a==='object'&&a!==null&&'description'in a&&!('operation_type'in a)){const s=a['description'],t=typeof s==='string'&&(s['includes']('operation_type')||s['includes']('data'));if(t)throw new Error('Invalid\x20parameter\x20structure.\x20Parameters\x20should\x20NOT\x20be\x20wrapped\x20in\x20\x27description\x27\x20field.\x0a'+'Correct\x20format:\x20{\x20operation_type:\x20\x27...\x27,\x20data:\x20{...}\x20}\x0a'+'Incorrect\x20format:\x20{\x20description:\x20\x27{\x20operation_type:\x20...\x20}\x27\x20}');}b=strictParse(OnchainOperationsSchema,a,'onchain_operations\x20input');const f=getEnvConfig(b['env']),g=extractObjectOnlyRef(b);if(g!==undefined)return await queryObjectOnlyResult(b['operation_type'],g,f);try{const u=b['data']?.['object'];if(u&&typeof u==='object'&&u['replaceExistName']===!![]&&typeof u['name']==='string'&&u['name']['trim']()['length']>0x0){const v=await LocalMark['Instance']()['get'](u['name']['trim']());v?.['address']&&c['push']('NAME\x20REBIND:\x20local\x20name\x20\x27'+u['name']+'\x27\x20is\x20currently\x20bound\x20to\x20'+v['address']+'.\x20'+'replaceExistName=true\x20will\x20unbind\x20it\x20and\x20rebind\x20the\x20name\x20to\x20the\x20object\x20created/updated\x20by\x20this\x20'+('call\x20—\x20references\x20resolving\x20\x27'+u['name']+'\x27\x20will\x20point\x20to\x20the\x20NEW\x20object.\x20')+'If\x20this\x20is\x20unintentional,\x20drop\x20replaceExistName\x20or\x20choose\x20another\x20name.');}}catch{}if(!f['referrer']){const w=readStoredReferrer();if(w)f['referrer']=w;}const h=f['client_schema_version'],k=f['schema_strict_mode'],l=h?checkClientSchemaCompatibility(h,{'mode':k?'strict':'warn'}):undefined,m=x=>({'operation_type':b['operation_type'],'data':x,'pre_warnings':c['length']?c:undefined,'schema_check':l}),n=f['plan_approval'],o=f['network'];delete f['confirmed'],delete f['user_intent_phrases'],delete f['client_schema_version'],delete f['schema_strict_mode'];const p=getSkillsHintForOnchain(b['operation_type'],b['data']);p&&c['push'](p);const q=getProjectSkillsHint();q&&c['push'](q);switch(b['operation_type']){case'service':{const x=b['data'],y=await detectServiceGuardCircularDependency(x);if(y)return y;const z=checkSalesWipNetworkDeployment(x,f,c);if(z)return z;const A=await prepareFundOperation(x,'service',f?.['network']);if(A['blockingErrors']['length']>0x0)return buildFundBlockResult(A,'service');c['push'](...A['warnings']);if(A['confirmation']){c['push'](A['confirmation']['message']);const L=a329b(A['confirmation']);if(L)c['push'](L);}const B=x?.['order_allocators'];if(B&&typeof B==='object'){const M=Array['isArray'](B['allocators'])?B['allocators']:[];for(let N=0x0;N<M['length'];N++){const O=M[N],P=Array['isArray'](O?.['sharing'])?O['sharing']:[];if(P['length']<=0x1)continue;const Q=new Map();for(let R=0x0;R<P['length'];R++){const S=P[R]?.['who'];let T='';if(typeof S==='string')T=S;else{if(S&&typeof S==='object'){if(S['Entity']&&typeof S['Entity']==='object')T='Entity:'+(S['Entity']['name_or_address']??'');else{if(S['Signer'])T='Signer';else S['GuardIdentifier']!==undefined?T='Guard:'+S['GuardIdentifier']:T=JSON['stringify'](S);}}}if(!T)continue;const U=Q['get'](T)??0x0;Q['set'](T,U+0x1);}for(const [V,W]of Q){W>0x1&&c['push']('DUPLICATE\x20SHARING\x20ENTITY:\x20Allocator['+N+']\x20has\x20entity\x20\x22'+V+'\x22\x20appearing\x20'+W+'\x20times\x20'+'in\x20the\x20sharing\x20array.\x20This\x20is\x20likely\x20a\x20configuration\x20error\x20—\x20each\x20entity\x20should\x20appear\x20'+('at\x20most\x20once\x20per\x20allocator.\x20Total\x20sharing:\x20'+W*0x64+'%\x20to\x20the\x20same\x20entity.\x20')+'If\x20intentional,\x20ignore\x20this\x20warning.');}}}const C=new CallService(b['data']);let D;try{D=b['submission']?await C['call_with_submission'](f,await transformSubmission(b['submission'])):await C['call'](f);}catch(X){const Y=X['message']??String(X);if(/not found|GetObjectExisted|resolve|LocalMark|failed to resolve/i['test'](Y)){const Z=typeof x?.['object']==='object'&&x?.['object']!==null?x['object']['permission']:undefined;throw new Error('DEPENDENCY\x20RESOLUTION\x20FAILED:\x20One\x20or\x20more\x20referenced\x20objects\x20could\x20not\x20be\x20resolved.\x0a'+('Original\x20error:\x20'+Y+'\x0a')+'Common\x20causes:\x0a'+'\x20\x201.\x20Object\x20name\x20typo\x20—\x20check\x20spelling\x20in\x20LocalMark\x0a'+'\x20\x202.\x20Object\x20not\x20yet\x20created\x20—\x20create\x20dependencies\x20first\x0a'+'\x20\x203.\x20Object\x20on\x20different\x20network\x20—\x20check\x20env.network\x0a'+('Referenced\x20objects\x20in\x20this\x20call:\x20machine='+(x?.['machine']??'<none>')+',\x20')+('buy_guard='+(x?.['buy_guard']??'<none>')+',\x20')+('permission='+(Z??'<inline/new>')+',\x20')+('arbitrations='+(Array['isArray'](x?.['arbitrations'])?x['arbitrations']['length']+'\x20item(s)':'<none>')));}throw X;}const E=x?.['publish']?'publish\x20service':x?.['bPublished']!==undefined?'modify\x20service':'create\x20service',F=x?.['object']!=null&&typeof x['object']==='object',G=x?.['compensation_fund_add']!=null;F&&!G&&c['push']('Service.compensation_fund\x20balance\x20is\x200\x20—\x20no\x20refund\x20protection\x20for\x20buyers.\x20'+'If\x20buyers\x20need\x20refund\x20protection,\x20call\x20service.compensation_fund_add\x20with\x20a\x20Coin<T>\x20'+'to\x20deposit.\x20Without\x20deposit,\x20arbitration\x20rulings\x20cannot\x20withdraw\x20compensation\x20'+'from\x20this\x20Service.\x20(Note:\x20some\x20industries\x20like\x20freelance\x20do\x20not\x20require\x20this;\x20'+'the\x20evaluation\x20engine\x20will\x20check\x20industry-specific\x20requirements.)');const H=x?.['publish']===!![],I=Array['isArray'](x?.['arbitrations'])&&x['arbitrations']['length']>0x0;if(H&&!I&&G)throw new Error('HARD\x20PRE-CHECK\x20FAILED:\x20Cannot\x20publish\x20Service\x20with\x20compensation_fund\x20>\x200\x20but\x20no\x20Arbitration\x20bound.\x0a'+'Contract\x20(service.move:494):\x20assert!(arbitration_count\x20>\x200,\x20E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND).\x0a'+'The\x20transaction\x20WILL\x20ABORT\x20on-chain\x20if\x20you\x20proceed.\x0a'+'Fix:\x20(1)\x20Create\x20an\x20Arbitration\x20object\x20first\x20(onchain_operations\x20with\x20operation_type=\x27arbitration\x27).\x0a'+'\x20\x20\x20\x20\x20(2)\x20Set\x20data.arbitrations=[<arbitration_name_or_id>]\x20in\x20this\x20same\x20call.\x0a'+'\x20\x20\x20\x20\x20(3)\x20Then\x20call\x20publish=true.\x0a'+'Note:\x20After\x20publish,\x20arbitrations\x20can\x20still\x20be\x20ADDED\x20(but\x20not\x20removed\x20without\x20pause+lock).');H&&!I&&!G&&c['push']('WARNING:\x20Publishing\x20Service\x20without\x20arbitrations.\x20If\x20compensation_fund\x20was\x20'+'deposited\x20in\x20a\x20prior\x20call,\x20the\x20contract\x20(service.move:494)\x20WILL\x20ABORT\x20with\x20'+'E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND.\x20If\x20compensation_fund\x20is\x200,\x20'+'publish\x20will\x20succeed\x20but\x20buyers\x20have\x20no\x20dispute\x20resolution\x20path.\x20'+'Recommended:\x20bind\x20arbitrations\x20before\x20publish.');!H&&G&&!I&&c['push']('WARNING:\x20Depositing\x20compensation_fund\x20on\x20a\x20Service\x20without\x20arbitrations\x20bound.\x20'+'If\x20this\x20Service\x20is\x20already\x20published,\x20arbitration\x20rulings\x20will\x20not\x20be\x20able\x20to\x20'+'withdraw\x20compensation\x20from\x20this\x20Service.\x20Recommended:\x20bind\x20arbitrations\x20first,\x20'+'then\x20deposit\x20compensation_fund.');const J=await buildGuardSubmissionPrompt(D,'service',{'network':f?.['network'],'signer':f?.['account'],'service_address':typeof x?.['object']==='string'?x['object']:undefined});if(J)c['push'](J);const K=handleCallResult(D,withHarness(m(x),'service',E));return d(n,o,b['operation_type'],D)['catch'](()=>{}),K;}case'machine':{if(b['data']['node']&&typeof b['data']['node']==='object'&&'json_or_markdown_file'in b['data']['node']){const a7=b['data']['node']['json_or_markdown_file'];let a8;try{const aa=resolve(a7);a8=readFileSync(aa,'utf-8');}catch(ab){throw new Error('Failed\x20to\x20read\x20file\x20\x27'+a7+'\x27:\x20'+ab['message']);}const a9=parseMachineNodesFromText(a8);if(!a9['success']){const ac=a329a(a9['errors']);throw new Error('Machine\x20node\x20validation\x20failed\x20for\x20file\x20\x27'+a7+'\x27:\x0a\x0a'+ac);}if(!a9['data'])throw new Error('No\x20nodes\x20found\x20in\x20file\x20\x27'+a7+'\x27');b['data']['node']={'op':'set','nodes':a9['data'],'bReplace':!![]};}const a0=b['data'],a1=await checkMachinePermissionBeforePublish(a0,f);a1&&c['push'](a1);const a2=a0?.['node']?.['nodes']??a0?.['node'];if(Array['isArray'](a2)){const ad=/^(dispute|disputed|arbitration|arb_|arb\.|resolve_dispute|start_arbitration|open_dispute)/i;for(const ae of a2){const af=typeof ae==='object'?ae?.['name']:'';typeof af==='string'&&ad['test'](af)&&c['push']('ARBITRATION\x20SEPARATION\x20WARNING:\x20Machine\x20node\x20\x22'+af+'\x22\x20appears\x20to\x20be\x20an\x20arbitration-related\x20node.\x0a'+'CORE\x20PRINCIPLE:\x20A\x20merchant\x20cannot\x20handle\x20disputes\x20fairly\x20—\x20they\x20would\x20be\x20\x27both\x20player\x20and\x20referee\x27.\x0a'+'The\x20WoWok\x20smart\x20contract\x20design\x20makes\x20Arbitration\x20a\x20completely\x20separate\x20object:\x0a'+'\x20\x20-\x20Arbitration\x20has\x20its\x20own\x20Permission,\x20voting_guard,\x20usage_guard,\x20and\x20balance\x0a'+'\x20\x20-\x20Arb\x20instances\x20have\x20a\x207-state\x20lifecycle\x20managed\x20by\x20Arbitration,\x20not\x20by\x20Machine\x0a'+'\x20\x20-\x20The\x20Order\x20object\x20is\x20the\x20bridge:\x20it\x20has\x20\x27progress\x27\x20(Machine)\x20and\x20\x27dispute\x27\x20(Arb\x20list)\x20fields\x0a'+'\x20\x20-\x20When\x20Arb\x20rules,\x20it\x20calls\x20order::compensate()\x20—\x20the\x20ONLY\x20connection\x20to\x20the\x20business\x20flow\x0a\x0a'+'CORRECT\x20PATTERN:\x0a'+'\x20\x20-\x20Machine:\x20business\x20states\x20only\x20(ordered\x20->\x20shipped\x20->\x20delivered\x20->\x20completed)\x0a'+'\x20\x20-\x20Arbitration:\x20separate\x20object\x20with\x20its\x20own\x20Permission\x20(NOT\x20shared\x20with\x20Service)\x0a'+'\x20\x20-\x20Arb:\x207-state\x20lifecycle\x20(Principal_confirming\x20->\x20Arbitrator_confirming\x20->\x20Voting\x20->\x20Arbitrated\x20->\x20Objectionable\x20->\x20Finished\x20->\x20Withdrawn)\x0a'+'\x20\x20-\x20R-M1-11:\x20NEVER\x20name\x20nodes\x20\x27refunded\x27/\x27disputed\x27/\x27arb\x27/\x27refund\x27\x20—\x20use\x20business\x20states\x20(\x27cancelled\x27/\x27returned\x27)\x20for\x20dispute\x20OUTCOMES;\x20refunds\x20route\x20via\x20Allocator\x20triggered\x20by\x20those\x20states,\x20disputes\x20via\x20the\x20separate\x20Arbitration\x20object\x0a\x0a'+'If\x20this\x20node\x20name\x20is\x20a\x20legitimate\x20business\x20state\x20(not\x20arbitration),\x20ignore\x20this\x20warning.');}}const a3=new CallMachine(b['data']),a4=b['submission']?await a3['call_with_submission'](f,await transformSubmission(b['submission'])):await a3['call'](f),a5=await buildGuardSubmissionPrompt(a4,'machine',{'network':f?.['network'],'signer':f?.['account'],'machine_address':b['data']?.['object']});if(a5)c['push'](a5);const a6=handleCallResult(a4,m(b['data']));return d(n,o,b['operation_type'],a4)['catch'](()=>{}),a6;}case'progress':{b['data']?.['operate']&&c['push']('Progress\x20routing\x20hint:\x20if\x20this\x20Progress\x20is\x20bound\x20to\x20an\x20Order\x20and\x20the\x20target\x20'+'Forward\x20uses\x20namedOperator=\x22\x22\x20(empty\x20string\x20=\x20OrderHolder),\x20use\x20'+'order.progress\x20(NOT\x20progress.operate).\x20Direct\x20progress::next\x20fails\x20with\x20'+'Permission\x20denied\x20for\x20OrderHolder\x20forwards.\x20Use\x20progress.operate\x20only\x20for\x20'+'non-empty\x20namedOperator\x20or\x20permissionIndex-only\x20forwards.');const ag=new CallProgress(b['data']),ah=b['submission']?await ag['call_with_submission'](f,await transformSubmission(b['submission'])):await ag['call'](f);if(!b['submission']&&ah&&typeof ah==='object'&&'submission'in ah){const aj=ah['submission'];if(Array['isArray'](aj)&&aj['length']>0x0){const ak=aj[0x0]?.['guard'];if(ak){const al={'operation':'progress_next','network':f?.['network'],'signer':f?.['account'],'progress_address':b['data']?.['object'],'order_address':b['data']?.['task']},am=await generateGuardSubmissionPrompt(ak,al);am&&c['push'](formatSubmissionPrompt(am));}}}const ai=handleCallResult(ah,m(b['data']));if(ah&&typeof ah==='object'&&'digest'in ah&&ah?.['effects']?.['status']?.['status']==='success'&&typeof b['data']?.['object']==='string'){const an=b['data']?.['operate'],ao=an?.['operation'],ap=await enrichWorkflowGuidance({'progressRef':b['data']['object'],'network':f?.['network'],'accountName':f?.['account'],'noCache':!![],'operate':ao?.['forward']&&ao?.['next_node_name']?{'forward':ao['forward'],'next_node_name':ao['next_node_name'],'op':an?.['op']}:undefined});mergeGuidanceIntoOutput(ai,ap);}return d(n,o,b['operation_type'],ah)['catch'](()=>{}),ai;}case'repository':{const aq=new CallRepository(b['data']),ar=b['submission']?await aq['call_with_submission'](f,await transformSubmission(b['submission'])):await aq['call'](f),as=await buildGuardSubmissionPrompt(ar,'repository',{'network':f?.['network'],'signer':f?.['account'],'extra':{'repository':b['data']?.['object']}});if(as)c['push'](as);const at=handleCallResult(ar,m(b['data']));return d(n,o,b['operation_type'],ar)['catch'](()=>{}),at;}case'arbitration':{const au=await prepareFundOperation(b['data'],'arbitration',f?.['network']);if(au['blockingErrors']['length']>0x0)return buildFundBlockResult(au,'arbitration');c['push'](...au['warnings']);if(au['confirmation']){c['push'](au['confirmation']['message']);const az=a329b(au['confirmation']);if(az)c['push'](az);}const av=new CallArbitration(b['data']),aw=b['submission']?await av['call_with_submission'](f,await transformSubmission(b['submission'])):await av['call'](f),ax=await buildGuardSubmissionPrompt(aw,'arbitration',{'network':f?.['network'],'signer':f?.['account'],'extra':{'arbitration':b['data']?.['object']}});if(ax)c['push'](ax);const ay=handleCallResult(aw,m(b['data']));return d(n,o,b['operation_type'],aw)['catch'](()=>{}),ay;}case'contact':{const aA=new CallContact(b['data']),aB=b['submission']?await aA['call_with_submission'](f,await transformSubmission(b['submission'])):await aA['call'](f),aC=await buildGuardSubmissionPrompt(aB,'contact',{'network':f?.['network'],'signer':f?.['account']});if(aC)c['push'](aC);const aD=handleCallResult(aB,m(b['data']));return d(n,o,b['operation_type'],aB)['catch'](()=>{}),aD;}case'treasury':{const aE=await prepareFundOperation(b['data'],'treasury',f?.['network']);if(aE['blockingErrors']['length']>0x0)return buildFundBlockResult(aE,'treasury');c['push'](...aE['warnings']);if(aE['confirmation']){c['push'](aE['confirmation']['message']);const aJ=a329b(aE['confirmation']);if(aJ)c['push'](aJ);}const aF=new CallTreasury(b['data']),aG=b['submission']?await aF['call_with_submission'](f,await transformSubmission(b['submission'])):await aF['call'](f),aH=await buildGuardSubmissionPrompt(aG,'treasury',{'network':f?.['network'],'signer':f?.['account'],'extra':{'treasury':b['data']?.['object']}});if(aH)c['push'](aH);const aI=handleCallResult(aG,m(b['data']));return d(n,o,b['operation_type'],aG)['catch'](()=>{}),aI;}case'reward':{const aK=await prepareFundOperation(b['data'],'reward',f?.['network']);if(aK['blockingErrors']['length']>0x0)return buildFundBlockResult(aK,'reward');c['push'](...aK['warnings']);if(aK['confirmation']){c['push'](aK['confirmation']['message']);const aQ=a329b(aK['confirmation']);if(aQ)c['push'](aQ);}const aL=transformRewardInput(b['data']),aM=new CallReward(aL),aN=b['submission']?await aM['call_with_submission'](f,await transformSubmission(b['submission'])):await aM['call'](f),aO=await buildGuardSubmissionPrompt(aN,'reward',{'network':f?.['network'],'signer':f?.['account'],'extra':{'reward':b['data']?.['object']}});if(aO)c['push'](aO);const aP=handleCallResult(aN,m(b['data']));return d(n,o,b['operation_type'],aN)['catch'](()=>{}),aP;}case'allocation':{const aR=await prepareFundOperation(b['data'],'allocation',f?.['network']);if(aR['blockingErrors']['length']>0x0)return buildFundBlockResult(aR,'allocation');c['push'](...aR['warnings']);if(aR['confirmation']){c['push'](aR['confirmation']['message']);const aX=a329b(aR['confirmation']);if(aX)c['push'](aX);}const aS=new CallAllocation(b['data']),aT=b['submission']?await aS['call_with_submission'](f,await transformSubmission(b['submission'])):await aS['call'](f),aU=await buildGuardSubmissionPrompt(aT,'allocation',{'network':f?.['network'],'signer':f?.['account'],'allocation_address':b['data']?.['object']});if(aU)c['push'](aU);const aV=b['data'];if(aV?.['alloc_by_guard']){const aY=ResponseData(aT)['filter'](aZ=>aZ?.['type']==='Payment'&&aZ?.['change']==='created');if(aY['length']>0x0){const aZ=aY['map'](b0=>b0['object'])['join'](',\x20');try{const b0=await batchQueryObjectsByIds(aY['map'](b3=>b3['object']),f?.['network'],!![]),b1=[];let b2=BigInt(0x0);for(const b3 of b0){if(b3?.['type']==='Payment'&&b3?.['record']){for(const b4 of b3['record']){const b5=formatRecipientLabel(b4['recipient']),b6=typeof b4['amount']==='string'?b4['amount']:String(b4['amount']),b7=BigInt(b6);b2+=b7,b1['push']('\x20\x20•\x20'+b5+':\x20'+formatMistAmount(b7));}b3['object']&&b1['push']('\x20\x20•\x20Payment\x20object:\x20'+b3['object']);}}if(b1['length']>0x0){b1['unshift']('DISTRIBUTION\x20DETAILS\x20(alloc_by_guard):'),b1['push']('\x20\x20─────────────────','\x20\x20•\x20Total\x20distributed:\x20'+formatMistAmount(b2));const b8=b0['some'](b9=>b9?.['type']==='Payment'&&b9?.['info']?.['for_object']);b8&&b1['push']('','ESCROW\x20MODE:\x20Funds\x20are\x20held\x20in\x20escrow\x20(Payment.for_object\x20points\x20to\x20an\x20Order).\x20'+'The\x20Order\x20owner\x20must\x20call\x20order_claim\x20(or\x20service_order_claim)\x20to\x20actually\x20receive\x20the\x20funds.\x20'+'This\x20happens\x20when\x20the\x20Guard\x27s\x20sharing\x20config\x20uses\x20{\x20GuardIdentifier:\x200\x20}.'),c['push'](b1['join']('\x0a'));}}catch{c['push']('alloc_by_guard\x20created\x20Payment\x20object(s)\x20['+aZ+'].\x20'+'Query\x20these\x20Payment\x20objects\x20to\x20see\x20the\x20distribution\x20details\x20and\x20check\x20for_object\x20for\x20escrow\x20mode.');}}}const aW=handleCallResult(aT,m(b['data']));return d(n,o,b['operation_type'],aT)['catch'](()=>{}),aW;}case'permission':{const b9=b['operation_type'],ba=handlePermissionOperations(b['data'],f,m);return ba&&typeof ba==='object'&&'then'in ba&&ba['then'](bb=>{bb?.['structuredContent']?.['result']&&d(n,o,b9,bb['structuredContent']['result'])['catch'](()=>{});})['catch'](()=>{}),ba;}case'guard':{const bb=b['data'],bc=bb['root'];if(bc?.['type']==='file'){const bg=bc,bh=resolve(bg['file_path']);let bi;try{bi=readFileSync(bh,'utf-8');}catch(bl){throw new Error('Failed\x20to\x20read\x20Guard\x20definition\x20file\x20\x27'+bg['file_path']+'\x27:\x20'+bl['message']);}const bj=parseGuardFile(bi,bg['format']);if(!bj['success']){const bm=formatGuardParseErrors(bj['errors']);throw new Error('Guard\x20validation\x20failed\x20for\x20file\x20\x27'+bg['file_path']+'\x27:\x0a\x0a'+bm);}const bk=bj['data'];bb['root']={'type':'node','node':bk['root']},bk['table']!==undefined&&bb['table']===undefined&&(bb['table']=bk['table']),bk['description']!==undefined&&bb['description']===undefined&&(bb['description']=bk['description']),bk['rely']!==undefined&&bb['rely']===undefined&&(bb['rely']=bk['rely']),bk['namedNew']!==undefined&&bb['namedNew']===undefined&&(bb['namedNew']=bk['namedNew']);}if(bb['root']&&typeof bb['root']==='object'){const bn=bb['root'];bn['type']==='node'&&bn['node']&&(bb['root']=bn['node']);}if(!bb['table']||bb['table']['length']===0x0)throw new Error('Guard\x20\x27table\x27\x20field\x20is\x20required\x20and\x20cannot\x20be\x20empty');if(!bb['root'])throw new Error('Guard\x20\x27root\x27\x20field\x20is\x20required');const bd=new CallGuard(bb),be=await bd['call'](f);if(be&&typeof be==='object'&&'digest'in be&&be?.['effects']?.['status']?.['status']==='success')try{const bo=bb['root']?.['type']??'<unknown>',bp=Array['isArray'](bb['table'])?bb['table']:[],bq=bp['length'],br=bp['filter'](bw=>bw?.['b_submission']===!![])['length'],bs=bb['rely']?.['guards'],bt=Array['isArray'](bs)?bs['length']:0x0,bu=bb['rely']?.['logic_or']===!![]?'OR':bb['rely']?.['logic_or']===![]?'AND':'none',bv=['GUARD\x20LOGIC\x20SUMMARY:','\x20\x20•\x20root\x20type:\x20'+bo,'\x20\x20•\x20table\x20entries:\x20'+bq+'\x20('+br+'\x20require\x20runtime\x20submission)'];bt>0x0&&bv['push']('\x20\x20•\x20relies\x20on:\x20'+bt+'\x20guard(s)\x20(mode:\x20'+bu+')');if(bb['description']){const bw=String(bb['description'])['slice'](0x0,0x50);bv['push']('\x20\x20•\x20description:\x20\x22'+bw+'\x22');}c['push'](bv['join']('\x0a'));}catch{}const bf=handleCallResult(be,m(b['data']));return d(n,o,b['operation_type'],be)['catch'](()=>{}),bf;}case'personal':{const bx=transformPersonalInput(b['data']),by=new CallPersonal(bx),bz=await by['call'](f),bA=handleCallResult(bz,m(b['data']));return d(n,o,b['operation_type'],bz)['catch'](()=>{}),bA;}case'payment':{const bB=await prepareFundOperation(b['data'],'payment',f?.['network']);if(bB['blockingErrors']['length']>0x0)return buildFundBlockResult(bB,'payment');c['push'](...bB['warnings']);if(bB['confirmation']){c['push'](bB['confirmation']['message']);const bG=a329b(bB['confirmation']);if(bG)c['push'](bG);}const bC=b['data'];if(bC?.['receive']===!![]){const bH=typeof bC?.['object']==='string'&&bC['object']['length']>0x0;c['push']('RECEIVE\x20MODE\x20(order_claim):\x20You\x20are\x20unwrapping\x20CoinWrapper(s)\x20to\x20your\x20wallet.\x20'+'This\x20is\x20the\x20final\x20step\x20of\x20the\x20escrow\x20flow:\x0a'+'\x20\x201.\x20Allocation\x27s\x20alloc_by_guard\x20created\x20a\x20Payment\x20object\x20with\x20your\x20address\x20as\x20a\x20recipient\x0a'+'\x20\x202.\x20The\x20Payment\x27s\x20revenue\x20split\x20transferred\x20CoinWrapper(s)\x20to\x20your\x20wallet\x20(owned\x20but\x20not\x20spendable)\x0a'+'\x20\x203.\x20'+(bH?'THIS\x20operation\x20unwraps\x20the\x20specified\x20CoinWrapper\x20via\x20payment::unwrap_to_myself':'AUTO-RECEIVE:\x20this\x20operation\x20unwraps\x20EVERY\x20CoinWrapper\x20currently\x20owned\x20by\x20you\x20in\x20a\x20single\x20transaction')+',\x20deleting\x20the\x20CoinWrapper(s)\x20and\x20transferring\x20the\x20underlying\x20coin\x20to\x20tx_context::sender\x0a'+'Requirements:\x0a'+'\x20\x20-\x20You\x20MUST\x20be\x20the\x20CoinWrapper\x27s\x20owner\x20(the\x20recipient\x20specified\x20in\x20the\x20Allocation)\x0a'+'\x20\x20-\x20type_parameter\x20is\x20OPTIONAL:\x20when\x20omitted\x20it\x20is\x20auto-derived\x20from\x20the\x20CoinWrapper\x27s\x20'+'own\x20on-chain\x20type\x20(the\x20inner\x20T\x20of\x20CoinWrapper<T>)\x0a'+(bH?'\x20\x20-\x20object\x20can\x20be\x20a\x20CoinWrapper\x20ID\x20(0x...)\x20or\x20a\x20local\x20mark\x20name\x0a':'\x20\x20-\x20When\x20\x27object\x27\x20is\x20omitted,\x20no\x20wrapper\x20lookup\x20is\x20needed\x20—\x20all\x20your\x20CoinWrappers\x20are\x20unwrapped\x20at\x20once\x0a')+'To\x20find\x20received\x20CoinWrappers:\x20call\x20query_toolkit\x20with\x20query_type=\x27onchain_received\x27\x20'+'and\x20type=\x27CoinWrapper\x27\x20for\x20your\x20account.\x0a'+'After\x20success:\x20verify\x20your\x20balance\x20increased\x20via\x20account_balance\x20query.');}else bC?.['revenue']&&c['push']('CREATE\x20MODE:\x20Creating\x20a\x20new\x20Payment\x20object.\x20Payments\x20are\x20IMMUTABLE\x20after\x20creation\x20—\x20'+'they\x20cannot\x20be\x20modified.\x20The\x20\x27revenue\x27\x20array\x20defines\x20the\x20recipients\x20and\x20amounts;\x20'+'ensure\x20correctness\x20before\x20submitting.\x20The\x20\x27info.for_guard\x27\x20field\x20(if\x20set)\x20binds\x20this\x20'+'Payment\x20to\x20a\x20Guard\x20for\x20conditional\x20release\x20(common\x20in\x20escrow\x20workflows).');const bD=new CallPayment(b['data']),bE=await bD['call'](f),bF=handleCallResult(bE,m(b['data']));return d(n,o,b['operation_type'],bE)['catch'](()=>{}),bF;}case'demand':{const bI=new CallDemand(b['data']),bJ=b['submission']?await bI['call_with_submission'](f,await transformSubmission(b['submission'])):await bI['call'](f),bK=await buildGuardSubmissionPrompt(bJ,'demand',{'network':f?.['network'],'signer':f?.['account'],'extra':{'demand':b['data']?.['object']}});if(bK)c['push'](bK);const bL=handleCallResult(bJ,m(b['data']));return d(n,o,b['operation_type'],bJ)['catch'](()=>{}),bL;}case'order':{b['data']?.['progress']&&(c['push']('Order\x20routing\x20hint:\x20order.progress\x20works\x20only\x20for\x20Forwards\x20with\x20'+'namedOperator=\x22\x22\x20(OrderHolder).\x20If\x20the\x20target\x20Forward\x20uses\x20a\x20'+'non-empty\x20namedOperator\x20or\x20permissionIndex-only,\x20use\x20progress.operate\x20'+'on\x20the\x20Progress\x20object\x20directly\x20instead.'),c['push']('Allocation\x20hint:\x20if\x20this\x20operation\x20advances\x20the\x20order\x20to\x20a\x20terminal\x20'+'state\x20(e.g.\x20Completed/Cancelled/Refunded),\x20funds\x20remain\x20in\x20the\x20'+'Allocation\x20object\x20and\x20are\x20NOT\x20auto-distributed.\x20To\x20release\x20funds,\x20'+'trigger\x20the\x20corresponding\x20Guard\x20verification\x20via\x20allocation\x20operation\x20'+'(the\x20Guard\x20bound\x20to\x20the\x20matching\x20Allocator\x20will\x20verify\x20and\x20distribute).'));const bM=new CallOrder(b['data']),bN=b['submission']?await bM['call_with_submission'](f,await transformSubmission(b['submission'])):await bM['call'](f),bO=await buildGuardSubmissionPrompt(bN,'order',{'network':f?.['network'],'signer':f?.['account'],'order_address':b['data']?.['object']});if(bO)c['push'](bO);const bP=handleCallResult(bN,m(b['data']));if(bN&&typeof bN==='object'&&'digest'in bN&&bN?.['effects']?.['status']?.['status']==='success'&&b['data']?.['progress']&&typeof b['data']?.['object']==='string')try{const bQ=b['data']['object'],bR=bQ['startsWith']('0x')?bQ:await LocalMark['Instance']()['get_address'](bQ)??undefined;let bS;if(bR){const bT=await query_objects({'objects':[bR],'no_cache':!![],'network':f?.['network']}),bU=bT?.['objects']?.[0x0];bS=(bU?.['data']??bU)?.['progress'];}if(bS){const bV=b['data']['progress']?.['operation'],bW=await enrichWorkflowGuidance({'progressRef':bS,'network':f?.['network'],'accountName':f?.['account'],'noCache':!![],'operate':bV?.['forward']&&bV?.['next_node_name']?{'forward':bV['forward'],'next_node_name':bV['next_node_name'],'op':b['data']['progress']?.['op']}:undefined});mergeGuidanceIntoOutput(bP,bW);}}catch{}return d(n,o,b['operation_type'],bN)['catch'](()=>{}),bP;}case'gen_passport':{const bX=await gen_passport(f,b['guard'],b['info']),bY=handleCallResult(bX,m(b['data']));return d(n,o,b['operation_type'],bX)['catch'](()=>{}),bY;}case'proof':{const bZ=new CallProof(b['data']),c0=b['submission']?await bZ['call_with_submission'](f,await transformSubmission(b['submission'])):await bZ['call'](f),c1=await buildGuardSubmissionPrompt(c0,'proof',{'network':f?.['network'],'signer':f?.['account']});if(c1)c['push'](c1);const c2=handleCallResult(c0,m(b['data']));return d(n,o,b['operation_type'],c0)['catch'](()=>{}),c2;}case'gen_proof':{const c3=await gen_proof(f,b['proof'],b['server_pubkey'],b['server_signature'],b['proof_type'],b['description'],b['item_count'],b['about_address']),c4=handleCallResult(c3,m(b['data']));return d(n,o,b['operation_type'],c3)['catch'](()=>{}),c4;}}const r=b;throw new Error('Unknown\x20on-chain\x20operation\x20type:\x20'+String(r['operation_type']));}catch(c5){const c6=c5 instanceof Error?c5['message']:String(c5),c7=b?.['operation_type'],c8=b&&'data'in b?b['data']:undefined;return handleCallResult({'error':c6},c7?{'operation_type':c7,'data':c8}:undefined);}}
|
|
1
|
+
import{readFileSync,writeFileSync,existsSync,mkdirSync}from'fs';import{resolve,dirname,join}from'path';import{getWowMcpDir}from'@wowok/wowok';import{CallService,CallMachine,CallProgress,CallGuard,CallArbitration,CallRepository,CallContact,CallTreasury,CallReward,CallAllocation,CallPersonal,CallPayment,CallDemand,CallOrder,gen_passport,CallProof,gen_proof,ResponseData,LocalMark,query_objects,parseGuardFile,formatGuardParseErrors,transformRewardInput,transformPersonalInput}from'@wowok/wowok';import{OnchainOperationsSchema,strictParse,getEnvConfig,handleCallResult,checkClientSchemaCompatibility,parseMachineNodesFromText,formatNodeErrors as a331a,transformSubmission}from'../../schema/index.js';import{handlePermissionOperations}from'../../schema/call/permission-handler.js';import{collectPermissionIndexes,checkPermissionAuthorization,formatPermissionWarning}from'../../schema/utils/permission-machine-check.js';import{getSkillsHintForOnchain}from'../../schema/utils/skills-recommendation.js';import{prepareFundOperation,generateSkillsHint as a331b}from'../../knowledge/fund-layer.js';import{generateGuardSubmissionPrompt,formatSubmissionPrompt}from'../../knowledge/guard-submission-prompt.js';import{enrichWorkflowGuidance,mergeGuidanceIntoOutput,batchQueryObjectsByIds}from'../../knowledge/workflow-guidance.js';import{classifyWipPath}from'../wip-deploy-assist.js';import{withHarness}from'../shared.js';import{goalEngine}from'../../goal/GoalEngine.js';async function buildGuardSubmissionPrompt(a,b,c){if(!a||typeof a!=='object'||!('submission'in a))return undefined;const d=a['submission'];if(!Array['isArray'](d)||d['length']===0x0)return undefined;const e=d[0x0]?.['guard'];if(!e)return undefined;const f=await generateGuardSubmissionPrompt(e,{'operation':b,...c});return f?formatSubmissionPrompt(f):undefined;}const REFERRER_FILE=join(getWowMcpDir(),'referrer');function readStoredReferrer(){try{if(!existsSync(REFERRER_FILE))return null;const a=readFileSync(REFERRER_FILE,'utf8')['trim']();return a||null;}catch{return null;}}const PROJECT_SKILL_DIRS=['.claude/skills','.agents/skills','.cursor/rules','.github/prompts','.windsurf/skills','.codex/skills','.qoder/skills','.roo/skills','.codebuddy/skills'],PROJECT_SKILL_MARKERS=['wowok-provider','wowok-supplier','wowok-collaborator','wowok-arbitrator','wowok-order','wowok-messenger','wowok-machine','wowok-output','wowok-onboard','wowok-planner','wowok-auditor','wowok-governance'],SKILLS_HINT_FILE=join(getWowMcpDir(),'skills-hint-asked.json');function projectHasSkills(a){for(const b of PROJECT_SKILL_DIRS){for(const c of PROJECT_SKILL_MARKERS){if(existsSync(join(a,b,c)))return!![];}}return![];}function loadSkillsAsked(){try{if(!existsSync(SKILLS_HINT_FILE))return{};return JSON['parse'](readFileSync(SKILLS_HINT_FILE,'utf8'))??{};}catch{return{};}}function persistSkillsAsked(a){try{const b=loadSkillsAsked();b[a]=!![],mkdirSync(dirname(SKILLS_HINT_FILE),{'recursive':!![]}),writeFileSync(SKILLS_HINT_FILE,JSON['stringify'](b,null,0x2),'utf8');}catch{}}function getProjectSkillsHint(){try{const a=process['cwd']();if(!a||projectHasSkills(a))return null;const b=loadSkillsAsked();if(b[a])return null;return persistSkillsAsked(a),'WoWok\x20skills\x20are\x20not\x20installed\x20in\x20this\x20project.\x20Run\x20`wowok-skills\x20init`\x20'+'here\x20to\x20install\x20them\x20(the\x20MCP\x20works\x20regardless;\x20skills\x20improve\x20AI\x20orchestration).';}catch{return null;}}function formatRecipientLabel(a){if(!a)return'unknown';if(typeof a==='string')return a;if('GuardIdentifier'in a)return'GuardIdentifier('+a['GuardIdentifier']+')';if('Entity'in a){const b=a['Entity'];if(typeof b==='string'&&b['length']>0x10)return'Entity('+b['slice'](0x0,0x8)+'...'+b['slice'](-0x4)+')';return'Entity('+b+')';}if('Signer'in a)return'Signer\x20(transaction\x20signer)';return JSON['stringify'](a);}function formatMistAmount(a){const b=Number(a)/0x3b9aca00;if(b===0x0)return'0\x20WOW';const c=b['toFixed'](0x9)['replace'](/\.?0+$/,'');return c+'\x20WOW\x20('+a['toString']()+'\x20MIST)';}function extractNodesForCheck(a){if(!a?.['node'])return[];if(a['node']['nodes']&&Array['isArray'](a['node']['nodes']))return a['node']['nodes'];return[];}function resolvePermissionRef(a){if(!a?.['object'])return null;if(typeof a['object']==='string')return null;const b=a['object'];if(b['permission']){if(typeof b['permission']==='string')return b['permission'];return null;}return null;}async function checkMachinePermissionBeforePublish(a,b){if(a?.['publish']!==!![])return'';const c=extractNodesForCheck(a);if(c['length']===0x0)return'';const d=collectPermissionIndexes(c);if(d['requiredIndexes']['length']===0x0)return'';let e='';if(d['missingRefs']['length']>0x0){e+='WARNING:\x20Some\x20forwards\x20have\x20NEITHER\x20permissionIndex\x20nor\x20namedOperator.\x20'+'These\x20forwards\x20cannot\x20be\x20executed.\x20Add\x20one\x20or\x20the\x20other:\x0a';for(const k of d['missingRefs']){e+='\x20\x20-\x20Node\x20\x22'+k['nodeName']+'\x22,\x20pair\x20prev_node=\x22'+k['prevNode']+'\x22,\x20forward\x20\x22'+k['forwardName']+'\x22\x0a';}e+='\x0a';}const f=resolvePermissionRef(a);if(!f)return d['requiredIndexes']['length']>0x0&&(e+='PRE-PUBLISH\x20REMINDER:\x20This\x20Machine\x20uses\x20'+d['requiredIndexes']['length']+'\x20custom\x20permission\x20index(es):\x20['+d['requiredIndexes']['join'](',\x20')+'].\x20'+'After\x20creating\x20the\x20Permission\x20object,\x20grant\x20entities\x20for\x20each\x20index\x20via\x20'+'permission.op=\x22add\x20perm\x20by\x20index\x22\x20BEFORE\x20publishing\x20the\x20Machine.\x20'+'Otherwise,\x20forwards\x20using\x20these\x20indexes\x20will\x20be\x20un-executable.\x0a'),e;let g=f;if(!f['startsWith']('0x'))try{const l=await LocalMark['Instance']()['get'](f);if(l?.['address'])g=l['address'];else return e+'PRE-PUBLISH:\x20Could\x20not\x20resolve\x20Permission\x20name\x20\x27'+f+'\x27\x20to\x20an\x20address.\x20Ensure\x20the\x20Permission\x20object\x20exists\x20and\x20is\x20marked.\x20'+'Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';}catch{return e+'PRE-PUBLISH:\x20Failed\x20to\x20lookup\x20Permission\x20name\x20\x27'+f+'\x27.\x20Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';}const h=b?.['network']??'testnet';let i=null;try{const m=await query_objects({'objects':[g],'network':h}),n=m?.['objects']?.[0x0];n&&(i={'address':g,'entity_count':n['entity_count'],'perm_remark':n['perm_remark'],'owner':n['owner']??n['builder'],'admin':n['admin']});}catch{return e+'PRE-PUBLISH:\x20Failed\x20to\x20query\x20Permission\x20object\x20'+g+'.\x20Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';}if(!i)return e+'PRE-PUBLISH:\x20Permission\x20object\x20'+g+'\x20not\x20found\x20on-chain.\x20Required\x20indexes:\x20['+d['requiredIndexes']['join'](',\x20')+']\x0a';const j=checkPermissionAuthorization(d['requiredIndexes'],i);return!j['allAuthorized']&&(e+=formatPermissionWarning(j)+'\x0a'),e;}async function detectServiceGuardCircularDependency(a){if(!a||typeof a['object']!=='object'||a['object']===null)return null;const b=a['order_allocators'];if(!b||typeof b!=='object')return null;const c=Array['isArray'](b['allocators'])?b['allocators']:[];if(c['length']===0x0)return null;const d=[],e=new Set();for(const k of c){const l=k?.['guard'];if(typeof l==='string'&&!l['startsWith']('0x')){if(e['has'](l))continue;e['add'](l);try{const m=await LocalMark['Instance']()['get_address'](l);!m&&d['push'](l);}catch{d['push'](l);}}}if(d['length']===0x0)return null;const f=d['map'](n=>'\x27'+n+'\x27')['join'](',\x20'),g=a['object'],h=g['name']??'<service_name>',i=[{'step':0x1,'action':'onchain_operations','operation_type':'service','params':{...a,'order_allocators':null,'publish':![]},'purpose':'Create\x20Service\x20\x27'+h+'\x27\x20WITHOUT\x20order_allocators\x20to\x20establish\x20'+('its\x20LocalMark\x20entry.\x20After\x20this\x20step,\x20the\x20name\x20\x27'+h+'\x27\x20resolves\x20')+'to\x20an\x20on-chain\x20address.'},{'step':0x2,'action':'onchain_operations','operation_type':'guard','params':d['map'](n=>({'object':{'name':n,'type':'Guard'},'_hint':'Table\x20items\x20may\x20reference\x20Service\x20\x27'+h+'\x27\x20by\x20name'})),'purpose':'Create\x20Guard(s)\x20'+f+'.\x20Their\x20table\x20items\x20can\x20now\x20resolve\x20'+('Service\x20\x27'+h+'\x27\x20by\x20name\x20(LocalMark\x20entry\x20from\x20step\x201).')},{'step':0x3,'action':'onchain_operations','operation_type':'service','params':{'object':h,'order_allocators':b,'publish':a['publish']??!![]},'purpose':'Update\x20Service\x20with\x20order_allocators\x20(referencing\x20Guards\x20created\x20in\x20'+'step\x202)\x20and\x20publish.\x20After\x20publish,\x20order_allocators\x20becomes\x20SDK-LOCKED.'}],j='⚠️\x20Circular\x20dependency\x20detected:\x20Service\x20↔\x20Guard\x0a\x0a'+('Cannot\x20create\x20Service\x20with\x20order_allocators\x20referencing\x20non-existent\x20Guard(s):\x20'+f+'.\x0a\x0a')+'Explanation:\x20Guard\x20table\x20items\x20may\x20reference\x20the\x20Service\x20by\x20name,\x20creating\x20a\x20circular\x20'+'dependency:\x20the\x20Service\x20must\x20exist\x20as\x20a\x20LocalMark\x20before\x20the\x20Guard\x20can\x20resolve\x20it,\x20'+'but\x20the\x20Guard\x20must\x20exist\x20before\x20the\x20Service\x20can\x20reference\x20it\x20in\x20order_allocators.\x20'+'The\x20SDK\x20would\x20fail\x20with\x20a\x20BCS\x20serialization\x20error:\x20\x22Expected\x20valid\x20Address\x20for\x20'+'ValueType.Address,\x20but\x20failed\x20to\x20resolve\x20string:\x20<name>\x22.\x0a\x0a'+'Recommended\x20steps:\x0a'+i['map'](n=>'\x20\x20Step\x20'+n['step']+'\x20('+n['operation_type']+'):\x20'+n['purpose'])['join']('\x0a')+'\x0a\x0aHint:\x20This\x20is\x20the\x20canonical\x20Service↔Guard\x20circular\x20dependency.\x20The\x203-step\x20'+'pattern\x20above\x20is\x20the\x20documented\x20solution\x20(see\x20SCHEMA-03\x20/\x20P0-01\x20fix\x20in\x20'+'schema/call/service.ts\x20publish\x20field\x20description).';return{'content':[{'type':'text','text':j}],'structuredContent':{'result':{'type':'error','error':'Cannot\x20create\x20Service\x20with\x20order_allocators\x20referencing\x20non-existent\x20Guard(s):\x20'+f+'.\x20Circular\x20dependency:\x20Service↔Guard.','error_code':'circular_dependency_detected','retryable':!![],'recovery_hint':JSON['stringify'](i),'related_object':h},'message':'Circular\x20dependency\x20detected:\x20Service\x20↔\x20Guard.\x20See\x20recovery_hint\x20for\x20the\x203-step\x20creation\x20pattern.'}};}function buildFundBlockResult(a,b){const c=a['matchErrors']['length']>0x0,d=a['errors']['length']>0x0,e=a['blockingErrors']['some'](k=>k['includes']('TOKEN\x20CHOICE\x20REQUIRED')),f=c&&d?'FUND\x20OPERATION\x20BLOCKED':c?'TOKEN\x20TYPE\x20MISMATCH\x20—\x20operation\x20blocked':e?'TOKEN\x20CHOICE\x20REQUIRED\x20—\x20operation\x20blocked,\x20awaiting\x20user\x20selection':'FUND\x20INPUT\x20BLOCKED\x20—\x20operation\x20blocked',g=c&&d?'fund_blocked':c?'token_type_mismatch':e?'token_choice_required':'fund_input_error',h=c?'\x0a\x0aThe\x20token\x20type\x20of\x20a\x20generic\x20on-chain\x20object\x20(e.g.\x20Treasury<T>,\x20Service<T>)\x20is\x20'+'determined\x20at\x20creation\x20and\x20can\x20NEVER\x20be\x20changed,\x20and\x20monetary\x20input\x20is\x20never\x20'+('processed\x20with\x20unknown\x20token\x20precision.\x20This\x20'+b+'\x20operation\x20was\x20')+'NOT\x20executed.\x20Fix\x20the\x20errors\x20above\x20and\x20re-issue\x20the\x20operation'+(a['objectTokenType']?'\x20(object\x20token\x20type:\x20'+a['objectTokenType']+')':'')+'.':e?'\x0a\x0aMultiple\x20on-chain\x20tokens\x20may\x20legally\x20share\x20the\x20same\x20symbol\x20(several\x20'+'issuers\x20can\x20each\x20publish\x20a\x20\x22USDT\x22),\x20so\x20a\x20bare\x20symbol\x20can\x20never\x20identify\x20'+('the\x20issuer.\x20This\x20'+b+'\x20operation\x20was\x20NOT\x20executed\x20and\x20no\x20')+'on-chain\x20action\x20was\x20taken.\x20Present\x20the\x20numbered\x20candidate\x20list\x20above\x20to\x20'+'the\x20USER,\x20wait\x20for\x20their\x20choice,\x20then\x20re-issue\x20with\x20the\x20chosen\x20token\x27s\x20'+'full\x20type.':'\x0a\x0aMonetary\x20input\x20is\x20never\x20processed\x20with\x20unknown\x20token\x20precision\x20or\x20an\x20'+('unparseable\x20amount.\x20This\x20'+b+'\x20operation\x20was\x20NOT\x20executed\x20and\x20')+'no\x20on-chain\x20action\x20was\x20taken.\x20Follow\x20the\x20recovery\x20steps\x20in\x20the\x20error\x20'+'above\x20and\x20re-issue\x20the\x20operation.',i='⛔\x20'+f+'\x0a\x0a'+a['blockingErrors']['map'](k=>'\x20\x20•\x20'+k)['join']('\x0a')+h,j=e?'Present\x20the\x20numbered\x20token\x20candidate\x20list\x20from\x20the\x20error\x20message\x20to\x20the\x20USER\x20'+'(full\x20type,\x20name,\x20decimals,\x20verified\x20tag\x20are\x20all\x20shown)\x20—\x20do\x20NOT\x20pick\x20an\x20'+'issuer\x20yourself.\x20After\x20the\x20user\x20chooses\x20(by\x20number\x20or\x20by\x20pasting\x20the\x20full\x20'+('type),\x20re-issue\x20this\x20'+b+'\x20operation\x20with\x20that\x20token\x27s\x20FULL\x20type\x20')+'string\x20(package::module::Name)\x20in\x20type_parameter\x20(object.type_parameter\x20for\x20'+'service\x20creation;\x20root\x20type_parameter\x20for\x20payment\x20receive).\x20Also\x20verify\x20the\x20'+'WOW\x20network\x20selection\x20is\x20correct.':'Use\x20token\x20type\x20'+(a['objectTokenType']??'<the\x20object\x27s\x20generic\x20token\x20type>')+'\x20for\x20all\x20'+('amounts,\x20coins,\x20and\x20receive\x20records\x20in\x20this\x20'+b+'\x20operation.\x20')+'Query\x20the\x20object\x20via\x20query_toolkit\x20onchain_objects\x20to\x20confirm\x20its\x20generic\x20'+'token\x20type\x20(type_raw,\x20e.g.\x20\x220x2::treasury::Treasury<0x2::wow::WOW>\x22).\x20'+'For\x20precision-unavailable\x20tokens,\x20retry\x20the\x20operation\x20—\x20the\x20on-chain\x20'+'metadata\x20lookup\x20may\x20have\x20been\x20transient.';return{'content':[{'type':'text','text':i}],'structuredContent':{'result':{'type':'error','error':a['blockingErrors']['join']('\x20|\x20'),'error_code':g,'retryable':!![],'recovery_hint':j},'message':'Fund\x20operation\x20blocked\x20before\x20execution.'}};}function checkSalesWipNetworkDeployment(a,b,c){const d=a?.['sales'];if(!d||typeof d!=='object')return null;if(d['op']!=='add'&&d['op']!=='set')return null;const e=Array['isArray'](d['sales'])?d['sales']:[];if(e['length']===0x0)return null;const f=b?.['network']==='localnet';for(const g of e){const h=g?.['wip'];if(typeof h!=='string'||h==='')continue;const i=classifyWipPath(h);if(!i['is_local'])continue;if(i['type']==='local_http'){if(f){c['push']('WIP\x20INTERNAL-TEST-ONLY\x20REMINDER\x20(sale\x20\x22'+g['name']+'\x22):\x20wip\x20=\x20\x22'+h+'\x22\x20is\x20a\x20'+('local-network\x20URL\x20('+i['description']+').\x20It\x20is\x20reachable\x20ONLY\x20on\x20the\x20')+'local\x20machine\x20/\x20LAN\x20where\x20a\x20local\x20WIP\x20server\x20runs.\x20This\x20is\x20acceptable\x20for\x20LOCALNET\x20'+'internal\x20testing,\x20but\x20customers\x20and\x20on-chain\x20verifiers\x20on\x20OTHER\x20machines\x20CANNOT\x20'+'reach\x20it\x20—\x20on\x20testnet/mainnet,\x20every\x20customer\x20order_new\x20would\x20fail\x20100%\x20because\x20the\x20'+'WIP\x20file\x20cannot\x20be\x20verified.\x20For\x20any\x20non-localnet\x20deployment,\x20replace\x20this\x20URL\x20with\x20'+'a\x20public\x20endpoint\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20your\x20own\x20website)\x20or\x20leave\x20sale.wip\x20empty.');continue;}const l='a\x20local-network\x20URL\x20('+i['description']+')',m='⛔\x20WIP\x20IS\x20NOT\x20NETWORK-DEPLOYABLE\x20—\x20sales\x20NOT\x20submitted\x0a\x0a'+('Sale\x20\x22'+g['name']+'\x22\x20has\x20wip\x20=\x20\x22'+h+'\x22,\x20which\x20is\x20'+l+'.\x0a\x0a')+'INTERNAL\x20TEST\x20USE\x20ONLY:\x20this\x20URL\x20is\x20reachable\x20only\x20from\x20the\x20merchant\x27s\x20own\x20machine/LAN.\x20'+'Customers\x20on\x20other\x20machines\x20cannot\x20reach\x20it,\x20so\x20verifying\x20the\x20WIP\x20file\x20at\x20order\x20time\x20'+'fails\x20and\x20order_new\x20aborts\x20100%.\x20Local-network\x20WIP\x20URLs\x20are\x20allowed\x20ONLY\x20for\x20'+('localnet\x20internal\x20testing\x20(env.network\x20=\x20\x22localnet\x22);\x20on\x20'+(b?.['network']??'this\x20network')+'\x20')+'they\x20must\x20never\x20be\x20stored\x20on-chain.\x0a\x0a'+'Fix:\x20deploy\x20the\x20.wip\x20file\x20to\x20a\x20publicly\x20reachable\x20endpoint,\x20then\x20re-run\x20with\x20'+'sale.wip\x20=\x20\x22<public\x20URL>\x22\x20(e.g.\x20GitHub\x20Pages,\x20IPFS\x20gateway,\x20or\x20your\x20own\x20website).\x0a'+'\x20\x20•\x20GitHub\x20Pages:\x20https://<user>.github.io/<repo>/<file>.wip\x0a'+'\x20\x20•\x20IPFS:\x20\x20\x20\x20\x20\x20\x20\x20https://ipfs.io/ipfs/<CID>\x20\x20(or\x20ipfs://<CID>)\x0a'+'\x20\x20•\x20Your\x20site:\x20\x20\x20https://<your-domain>/<path>/<file>.wip\x0a'+'Alternatively,\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20SKIP\x20WIP\x20verification\x20—\x20'+'TESTING\x20ONLY,\x20not\x20recommended\x20for\x20production.';return{'content':[{'type':'text','text':m}],'structuredContent':{'result':{'type':'error','error':'Sale\x20\x22'+g['name']+'\x22\x20wip\x20is\x20'+l+':\x20'+h+'.\x20Local-network\x20URLs\x20are\x20INTERNAL\x20TEST\x20USE\x20ONLY\x20—\x20customers\x20cannot\x20verify\x20them,\x20aborting\x20order_new\x20100%.','error_code':'wip_not_network_deployed','retryable':!![],'recovery_hint':'Deploy\x20the\x20.wip\x20file\x20to\x20a\x20public\x20endpoint\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20your\x20own\x20website)\x20'+'and\x20set\x20sale.wip\x20to\x20the\x20public\x20URL;\x20or\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20skip\x20WIP\x20'+'verification\x20(TESTING\x20ONLY).','related_object':g['name']},'message':'WIP\x20is\x20a\x20local-network\x20URL\x20(INTERNAL\x20TEST\x20USE\x20ONLY)\x20—\x20sales\x20not\x20submitted.\x20See\x20recovery_hint.'}};}const j='a\x20LOCAL\x20'+i['type']+'\x20path',k='⛔\x20WIP\x20IS\x20NOT\x20NETWORK-DEPLOYABLE\x20—\x20sales\x20NOT\x20submitted\x0a\x0a'+('Sale\x20\x22'+g['name']+'\x22\x20has\x20wip\x20=\x20\x22'+h+'\x22,\x20which\x20is\x20'+j+'.\x0a\x0a')+'Why\x20this\x20is\x20fatal:\x20the\x20WIP\x20path\x20is\x20stored\x20ON-CHAIN\x20and\x20every\x20customer\x20'+'(on\x20a\x20different\x20machine)\x20fetches\x20it\x20when\x20placing\x20an\x20order.\x20A\x20local\x20path\x20/\x20'+'localhost\x20/\x20LAN\x20URL\x20is\x20reachable\x20only\x20from\x20YOUR\x20machine\x20—\x20it\x20passes\x20the\x20'+'merchant-side\x20set-time\x20verification\x20but\x20makes\x20order_new\x20abort\x20100%\x20for\x20customers.\x0a\x0a'+'Fix:\x20deploy\x20the\x20.wip\x20file\x20to\x20a\x20publicly\x20reachable\x20endpoint,\x20then\x20re-run\x20with\x20'+'sale.wip\x20=\x20\x22<public\x20URL>\x22\x20(e.g.\x20GitHub\x20Pages,\x20IPFS\x20gateway,\x20or\x20your\x20own\x20website).\x0a'+'\x20\x20•\x20GitHub\x20Pages:\x20https://<user>.github.io/<repo>/<file>.wip\x0a'+'\x20\x20•\x20IPFS:\x20\x20\x20\x20\x20\x20\x20\x20https://ipfs.io/ipfs/<CID>\x20\x20(or\x20ipfs://<CID>)\x0a'+'\x20\x20•\x20Your\x20site:\x20\x20\x20https://<your-domain>/<path>/<file>.wip\x0a'+'Alternatively,\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20SKIP\x20WIP\x20verification\x20—\x20'+'TESTING\x20ONLY,\x20not\x20recommended\x20for\x20production.';return{'content':[{'type':'text','text':k}],'structuredContent':{'result':{'type':'error','error':'Sale\x20\x22'+g['name']+'\x22\x20wip\x20is\x20'+j+':\x20'+h+'.\x20Local\x20WIP\x20paths\x20are\x20unreachable\x20by\x20customers\x20and\x20abort\x20order_new\x20100%.','error_code':'wip_not_network_deployed','retryable':!![],'recovery_hint':'Deploy\x20the\x20.wip\x20file\x20to\x20a\x20public\x20endpoint\x20(GitHub\x20Pages\x20/\x20IPFS\x20/\x20your\x20own\x20website)\x20'+'and\x20set\x20sale.wip\x20to\x20the\x20public\x20URL;\x20or\x20set\x20sale.wip\x20=\x20\x22\x22\x20(empty)\x20to\x20skip\x20WIP\x20'+'verification\x20(TESTING\x20ONLY).','related_object':g['name']},'message':'WIP\x20is\x20not\x20network-deployable\x20—\x20sales\x20not\x20submitted.\x20See\x20recovery_hint.'}};}return null;}function extractObjectOnlyRef(a){const b=a;if(b['submission'])return undefined;const c=b['data'];if(!c||typeof c!=='object'||Array['isArray'](c))return undefined;const d=c,e=Object['keys'](d);if(e['length']!==0x1||e[0x0]!=='object')return undefined;const f=d['object'];return typeof f==='string'&&f['trim']()['length']>0x0?f['trim']():undefined;}async function queryObjectOnlyResult(a,b,c){let d=[],f;try{const j=await query_objects({'objects':[b],'network':c?.['network'],'no_cache':!![]});d=j['objects']??[],d['length']===0x0&&(f='Object\x20\x27'+b+'\x27\x20not\x20found\x20on-chain.\x20It\x20may\x20never\x20have\x20been\x20created,\x20'+'its\x20local\x20mark\x20may\x20be\x20missing\x20(register\x20it\x20via\x20local_mark_operation),\x20'+'or\x20it\x20may\x20live\x20on\x20a\x20different\x20network.');}catch(k){const l=k?.['message']??String(k);f='Query\x20failed\x20for\x20\x27'+b+'\x27:\x20'+l;}const g=d['map'](m=>({...m,'change':'queried'})),h=f?'Object-only\x20payload\x20for\x20'+a+'\x20—\x20nothing\x20to\x20mutate,\x20no\x20transaction\x20was\x20sent\x20(no\x20gas\x20used).\x20'+f:'Object-only\x20payload\x20for\x20'+a+'\x20—\x20nothing\x20to\x20mutate,\x20no\x20transaction\x20was\x20sent\x20(no\x20gas\x20used).\x20Current\x20on-chain\x20state\x20of\x20\x27'+b+'\x27:',i={'message':h,'result':f?{'type':'error','error':f,'error_code':'object_not_found','retryable':![],'recovery_hint':'Check\x20the\x20name\x20spelling\x20(local_mark_operation\x20list),\x20the\x20env.network\x20value,\x20or\x20create\x20the\x20object\x20first.'}:{'type':'data','data':g},'semantic':{'intent':a+'_read','status':f?'failed':'success','summary':h,'next_actions':[{'action':'Use\x20query_toolkit\x20(onchain_objects)\x20for\x20richer\x20inspection\x20—\x20content\x20fields,\x20ownership,\x20dynamic\x20tables.','reason':'Object-only\x20onchain_operations\x20payloads\x20are\x20answered\x20by\x20a\x20pure\x20query;\x20they\x20never\x20mutate\x20on-chain\x20state.','tool':'query_toolkit','priority':'recommended'}],'warnings':['Payload\x20contained\x20only\x20data.object\x20—\x20interpreted\x20as\x20a\x20READ\x20request,\x20not\x20a\x20transaction.']}};return{'content':[{'type':'text','text':h}],'structuredContent':i};}export async function handleOnchainOperations(a){let b,c=[];async function d(f,g,h,k){const l=new Set(['service','machine','progress','repository','arbitration','contact','treasury','reward','allocation','permission','guard','personal','demand','order','proof']);if(!l['has'](h))return;if(!k||typeof k!=='object'||'error'in k)return;if(!k['digest'])return;if(!f)return;try{const m=ResponseData(k),o=m['filter'](p=>p['change']==='created'&&p['object']);if(f&&o['length']>0x0){const p=o['filter'](q=>typeof q['type_raw']==='string'&&q['type_raw']['includes']('::'))['map'](q=>({'type':q['type_raw']['split']('::')['pop'](),'object':q['object']}));if(p['length']>0x0){const q=await goalEngine['registerActObjects'](f,p,g??'default');q>0x0&&console['warn']('[autoRegisterResults]\x20'+q+'\x20created\x20object(s)\x20registered\x20to\x20goal\x20'+f+'\x20(ACT\x20station)');}}}catch{}}try{if(typeof a==='object'&&a!==null&&'description'in a&&!('operation_type'in a)){const s=a['description'],t=typeof s==='string'&&(s['includes']('operation_type')||s['includes']('data'));if(t)throw new Error('Invalid\x20parameter\x20structure.\x20Parameters\x20should\x20NOT\x20be\x20wrapped\x20in\x20\x27description\x27\x20field.\x0a'+'Correct\x20format:\x20{\x20operation_type:\x20\x27...\x27,\x20data:\x20{...}\x20}\x0a'+'Incorrect\x20format:\x20{\x20description:\x20\x27{\x20operation_type:\x20...\x20}\x27\x20}');}b=strictParse(OnchainOperationsSchema,a,'onchain_operations\x20input');const f=getEnvConfig(b['env']),g=extractObjectOnlyRef(b);if(g!==undefined)return await queryObjectOnlyResult(b['operation_type'],g,f);try{const u=b['data']?.['object'];if(u&&typeof u==='object'&&u['replaceExistName']===!![]&&typeof u['name']==='string'&&u['name']['trim']()['length']>0x0){const v=await LocalMark['Instance']()['get'](u['name']['trim']());v?.['address']&&c['push']('NAME\x20REBIND:\x20local\x20name\x20\x27'+u['name']+'\x27\x20is\x20currently\x20bound\x20to\x20'+v['address']+'.\x20'+'replaceExistName=true\x20will\x20unbind\x20it\x20and\x20rebind\x20the\x20name\x20to\x20the\x20object\x20created/updated\x20by\x20this\x20'+('call\x20—\x20references\x20resolving\x20\x27'+u['name']+'\x27\x20will\x20point\x20to\x20the\x20NEW\x20object.\x20')+'If\x20this\x20is\x20unintentional,\x20drop\x20replaceExistName\x20or\x20choose\x20another\x20name.');}}catch{}if(!f['referrer']){const w=readStoredReferrer();if(w)f['referrer']=w;}const h=f['client_schema_version'],k=f['schema_strict_mode'],l=h?checkClientSchemaCompatibility(h,{'mode':k?'strict':'warn'}):undefined,m=x=>({'operation_type':b['operation_type'],'data':x,'pre_warnings':c['length']?c:undefined,'schema_check':l}),n=f['plan_approval'],o=f['network'];delete f['confirmed'],delete f['user_intent_phrases'],delete f['client_schema_version'],delete f['schema_strict_mode'];const p=getSkillsHintForOnchain(b['operation_type'],b['data']);p&&c['push'](p);const q=getProjectSkillsHint();q&&c['push'](q);switch(b['operation_type']){case'service':{const x=b['data'],y=await detectServiceGuardCircularDependency(x);if(y)return y;const z=checkSalesWipNetworkDeployment(x,f,c);if(z)return z;const A=await prepareFundOperation(x,'service',f?.['network']);if(A['blockingErrors']['length']>0x0)return buildFundBlockResult(A,'service');c['push'](...A['warnings']);if(A['confirmation']){c['push'](A['confirmation']['message']);const L=a331b(A['confirmation']);if(L)c['push'](L);}const B=x?.['order_allocators'];if(B&&typeof B==='object'){const M=Array['isArray'](B['allocators'])?B['allocators']:[];for(let N=0x0;N<M['length'];N++){const O=M[N],P=Array['isArray'](O?.['sharing'])?O['sharing']:[];if(P['length']<=0x1)continue;const Q=new Map();for(let R=0x0;R<P['length'];R++){const S=P[R]?.['who'];let T='';if(typeof S==='string')T=S;else{if(S&&typeof S==='object'){if(S['Entity']&&typeof S['Entity']==='object')T='Entity:'+(S['Entity']['name_or_address']??'');else{if(S['Signer'])T='Signer';else S['GuardIdentifier']!==undefined?T='Guard:'+S['GuardIdentifier']:T=JSON['stringify'](S);}}}if(!T)continue;const U=Q['get'](T)??0x0;Q['set'](T,U+0x1);}for(const [V,W]of Q){W>0x1&&c['push']('DUPLICATE\x20SHARING\x20ENTITY:\x20Allocator['+N+']\x20has\x20entity\x20\x22'+V+'\x22\x20appearing\x20'+W+'\x20times\x20'+'in\x20the\x20sharing\x20array.\x20This\x20is\x20likely\x20a\x20configuration\x20error\x20—\x20each\x20entity\x20should\x20appear\x20'+('at\x20most\x20once\x20per\x20allocator.\x20Total\x20sharing:\x20'+W*0x64+'%\x20to\x20the\x20same\x20entity.\x20')+'If\x20intentional,\x20ignore\x20this\x20warning.');}}}const C=new CallService(b['data']);let D;try{D=b['submission']?await C['call_with_submission'](f,await transformSubmission(b['submission'])):await C['call'](f);}catch(X){const Y=X['message']??String(X);if(/not found|GetObjectExisted|resolve|LocalMark|failed to resolve/i['test'](Y)){const Z=typeof x?.['object']==='object'&&x?.['object']!==null?x['object']['permission']:undefined;throw new Error('DEPENDENCY\x20RESOLUTION\x20FAILED:\x20One\x20or\x20more\x20referenced\x20objects\x20could\x20not\x20be\x20resolved.\x0a'+('Original\x20error:\x20'+Y+'\x0a')+'Common\x20causes:\x0a'+'\x20\x201.\x20Object\x20name\x20typo\x20—\x20check\x20spelling\x20in\x20LocalMark\x0a'+'\x20\x202.\x20Object\x20not\x20yet\x20created\x20—\x20create\x20dependencies\x20first\x0a'+'\x20\x203.\x20Object\x20on\x20different\x20network\x20—\x20check\x20env.network\x0a'+('Referenced\x20objects\x20in\x20this\x20call:\x20machine='+(x?.['machine']??'<none>')+',\x20')+('buy_guard='+(x?.['buy_guard']??'<none>')+',\x20')+('permission='+(Z??'<inline/new>')+',\x20')+('arbitrations='+(Array['isArray'](x?.['arbitrations'])?x['arbitrations']['length']+'\x20item(s)':'<none>')));}throw X;}const E=x?.['publish']?'publish\x20service':x?.['bPublished']!==undefined?'modify\x20service':'create\x20service',F=x?.['object']!=null&&typeof x['object']==='object',G=x?.['compensation_fund_add']!=null;F&&!G&&c['push']('Service.compensation_fund\x20balance\x20is\x200\x20—\x20no\x20refund\x20protection\x20for\x20buyers.\x20'+'If\x20buyers\x20need\x20refund\x20protection,\x20call\x20service.compensation_fund_add\x20with\x20a\x20Coin<T>\x20'+'to\x20deposit.\x20Without\x20deposit,\x20arbitration\x20rulings\x20cannot\x20withdraw\x20compensation\x20'+'from\x20this\x20Service.\x20(Note:\x20some\x20industries\x20like\x20freelance\x20do\x20not\x20require\x20this;\x20'+'the\x20evaluation\x20engine\x20will\x20check\x20industry-specific\x20requirements.)');const H=x?.['publish']===!![],I=Array['isArray'](x?.['arbitrations'])&&x['arbitrations']['length']>0x0;if(H&&!I&&G)throw new Error('HARD\x20PRE-CHECK\x20FAILED:\x20Cannot\x20publish\x20Service\x20with\x20compensation_fund\x20>\x200\x20but\x20no\x20Arbitration\x20bound.\x0a'+'Contract\x20(service.move:494):\x20assert!(arbitration_count\x20>\x200,\x20E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND).\x0a'+'The\x20transaction\x20WILL\x20ABORT\x20on-chain\x20if\x20you\x20proceed.\x0a'+'Fix:\x20(1)\x20Create\x20an\x20Arbitration\x20object\x20first\x20(onchain_operations\x20with\x20operation_type=\x27arbitration\x27).\x0a'+'\x20\x20\x20\x20\x20(2)\x20Set\x20data.arbitrations=[<arbitration_name_or_id>]\x20in\x20this\x20same\x20call.\x0a'+'\x20\x20\x20\x20\x20(3)\x20Then\x20call\x20publish=true.\x0a'+'Note:\x20After\x20publish,\x20arbitrations\x20can\x20still\x20be\x20ADDED\x20(but\x20not\x20removed\x20without\x20pause+lock).');H&&!I&&!G&&c['push']('WARNING:\x20Publishing\x20Service\x20without\x20arbitrations.\x20If\x20compensation_fund\x20was\x20'+'deposited\x20in\x20a\x20prior\x20call,\x20the\x20contract\x20(service.move:494)\x20WILL\x20ABORT\x20with\x20'+'E_ARBITRATION_NOT_SET_WITH_COMPENSATION_FUND.\x20If\x20compensation_fund\x20is\x200,\x20'+'publish\x20will\x20succeed\x20but\x20buyers\x20have\x20no\x20dispute\x20resolution\x20path.\x20'+'Recommended:\x20bind\x20arbitrations\x20before\x20publish.');!H&&G&&!I&&c['push']('WARNING:\x20Depositing\x20compensation_fund\x20on\x20a\x20Service\x20without\x20arbitrations\x20bound.\x20'+'If\x20this\x20Service\x20is\x20already\x20published,\x20arbitration\x20rulings\x20will\x20not\x20be\x20able\x20to\x20'+'withdraw\x20compensation\x20from\x20this\x20Service.\x20Recommended:\x20bind\x20arbitrations\x20first,\x20'+'then\x20deposit\x20compensation_fund.');const J=await buildGuardSubmissionPrompt(D,'service',{'network':f?.['network'],'signer':f?.['account'],'service_address':typeof x?.['object']==='string'?x['object']:undefined});if(J)c['push'](J);const K=handleCallResult(D,withHarness(m(x),'service',E));return d(n,o,b['operation_type'],D)['catch'](()=>{}),K;}case'machine':{if(b['data']['node']&&typeof b['data']['node']==='object'&&'json_or_markdown_file'in b['data']['node']){const a7=b['data']['node']['json_or_markdown_file'];let a8;try{const aa=resolve(a7);a8=readFileSync(aa,'utf-8');}catch(ab){throw new Error('Failed\x20to\x20read\x20file\x20\x27'+a7+'\x27:\x20'+ab['message']);}const a9=parseMachineNodesFromText(a8);if(!a9['success']){const ac=a331a(a9['errors']);throw new Error('Machine\x20node\x20validation\x20failed\x20for\x20file\x20\x27'+a7+'\x27:\x0a\x0a'+ac);}if(!a9['data'])throw new Error('No\x20nodes\x20found\x20in\x20file\x20\x27'+a7+'\x27');b['data']['node']={'op':'set','nodes':a9['data'],'bReplace':!![]};}const a0=b['data'],a1=await checkMachinePermissionBeforePublish(a0,f);a1&&c['push'](a1);const a2=a0?.['node']?.['nodes']??a0?.['node'];if(Array['isArray'](a2)){const ad=/^(dispute|disputed|arbitration|arb_|arb\.|resolve_dispute|start_arbitration|open_dispute)/i;for(const ae of a2){const af=typeof ae==='object'?ae?.['name']:'';typeof af==='string'&&ad['test'](af)&&c['push']('ARBITRATION\x20SEPARATION\x20WARNING:\x20Machine\x20node\x20\x22'+af+'\x22\x20appears\x20to\x20be\x20an\x20arbitration-related\x20node.\x0a'+'CORE\x20PRINCIPLE:\x20A\x20merchant\x20cannot\x20handle\x20disputes\x20fairly\x20—\x20they\x20would\x20be\x20\x27both\x20player\x20and\x20referee\x27.\x0a'+'The\x20WoWok\x20smart\x20contract\x20design\x20makes\x20Arbitration\x20a\x20completely\x20separate\x20object:\x0a'+'\x20\x20-\x20Arbitration\x20has\x20its\x20own\x20Permission,\x20voting_guard,\x20usage_guard,\x20and\x20balance\x0a'+'\x20\x20-\x20Arb\x20instances\x20have\x20a\x207-state\x20lifecycle\x20managed\x20by\x20Arbitration,\x20not\x20by\x20Machine\x0a'+'\x20\x20-\x20The\x20Order\x20object\x20is\x20the\x20bridge:\x20it\x20has\x20\x27progress\x27\x20(Machine)\x20and\x20\x27dispute\x27\x20(Arb\x20list)\x20fields\x0a'+'\x20\x20-\x20When\x20Arb\x20rules,\x20it\x20calls\x20order::compensate()\x20—\x20the\x20ONLY\x20connection\x20to\x20the\x20business\x20flow\x0a\x0a'+'CORRECT\x20PATTERN:\x0a'+'\x20\x20-\x20Machine:\x20business\x20states\x20only\x20(ordered\x20->\x20shipped\x20->\x20delivered\x20->\x20completed)\x0a'+'\x20\x20-\x20Arbitration:\x20separate\x20object\x20with\x20its\x20own\x20Permission\x20(NOT\x20shared\x20with\x20Service)\x0a'+'\x20\x20-\x20Arb:\x207-state\x20lifecycle\x20(Principal_confirming\x20->\x20Arbitrator_confirming\x20->\x20Voting\x20->\x20Arbitrated\x20->\x20Objectionable\x20->\x20Finished\x20->\x20Withdrawn)\x0a'+'\x20\x20-\x20R-M1-11:\x20NEVER\x20name\x20nodes\x20\x27refunded\x27/\x27disputed\x27/\x27arb\x27/\x27refund\x27\x20—\x20use\x20business\x20states\x20(\x27cancelled\x27/\x27returned\x27)\x20for\x20dispute\x20OUTCOMES;\x20refunds\x20route\x20via\x20Allocator\x20triggered\x20by\x20those\x20states,\x20disputes\x20via\x20the\x20separate\x20Arbitration\x20object\x0a\x0a'+'If\x20this\x20node\x20name\x20is\x20a\x20legitimate\x20business\x20state\x20(not\x20arbitration),\x20ignore\x20this\x20warning.');}}const a3=new CallMachine(b['data']),a4=b['submission']?await a3['call_with_submission'](f,await transformSubmission(b['submission'])):await a3['call'](f),a5=await buildGuardSubmissionPrompt(a4,'machine',{'network':f?.['network'],'signer':f?.['account'],'machine_address':b['data']?.['object']});if(a5)c['push'](a5);const a6=handleCallResult(a4,m(b['data']));return d(n,o,b['operation_type'],a4)['catch'](()=>{}),a6;}case'progress':{b['data']?.['operate']&&c['push']('Progress\x20routing\x20hint:\x20if\x20this\x20Progress\x20is\x20bound\x20to\x20an\x20Order\x20and\x20the\x20target\x20'+'Forward\x20uses\x20namedOperator=\x22\x22\x20(empty\x20string\x20=\x20OrderHolder),\x20use\x20'+'order.progress\x20(NOT\x20progress.operate).\x20Direct\x20progress::next\x20fails\x20with\x20'+'Permission\x20denied\x20for\x20OrderHolder\x20forwards.\x20Use\x20progress.operate\x20only\x20for\x20'+'non-empty\x20namedOperator\x20or\x20permissionIndex-only\x20forwards.');const ag=new CallProgress(b['data']),ah=b['submission']?await ag['call_with_submission'](f,await transformSubmission(b['submission'])):await ag['call'](f);if(!b['submission']&&ah&&typeof ah==='object'&&'submission'in ah){const aj=ah['submission'];if(Array['isArray'](aj)&&aj['length']>0x0){const ak=aj[0x0]?.['guard'];if(ak){const al={'operation':'progress_next','network':f?.['network'],'signer':f?.['account'],'progress_address':b['data']?.['object'],'order_address':b['data']?.['task']},am=await generateGuardSubmissionPrompt(ak,al);am&&c['push'](formatSubmissionPrompt(am));}}}const ai=handleCallResult(ah,m(b['data']));if(ah&&typeof ah==='object'&&'digest'in ah&&ah?.['effects']?.['status']?.['status']==='success'&&typeof b['data']?.['object']==='string'){const an=b['data']?.['operate'],ao=an?.['operation'],ap=await enrichWorkflowGuidance({'progressRef':b['data']['object'],'network':f?.['network'],'accountName':f?.['account'],'noCache':!![],'operate':ao?.['forward']&&ao?.['next_node_name']?{'forward':ao['forward'],'next_node_name':ao['next_node_name'],'op':an?.['op']}:undefined});mergeGuidanceIntoOutput(ai,ap);}return d(n,o,b['operation_type'],ah)['catch'](()=>{}),ai;}case'repository':{const aq=new CallRepository(b['data']),ar=b['submission']?await aq['call_with_submission'](f,await transformSubmission(b['submission'])):await aq['call'](f),as=await buildGuardSubmissionPrompt(ar,'repository',{'network':f?.['network'],'signer':f?.['account'],'extra':{'repository':b['data']?.['object']}});if(as)c['push'](as);const at=handleCallResult(ar,m(b['data']));return d(n,o,b['operation_type'],ar)['catch'](()=>{}),at;}case'arbitration':{const au=await prepareFundOperation(b['data'],'arbitration',f?.['network']);if(au['blockingErrors']['length']>0x0)return buildFundBlockResult(au,'arbitration');c['push'](...au['warnings']);if(au['confirmation']){c['push'](au['confirmation']['message']);const az=a331b(au['confirmation']);if(az)c['push'](az);}const av=new CallArbitration(b['data']),aw=b['submission']?await av['call_with_submission'](f,await transformSubmission(b['submission'])):await av['call'](f),ax=await buildGuardSubmissionPrompt(aw,'arbitration',{'network':f?.['network'],'signer':f?.['account'],'extra':{'arbitration':b['data']?.['object']}});if(ax)c['push'](ax);const ay=handleCallResult(aw,m(b['data']));return d(n,o,b['operation_type'],aw)['catch'](()=>{}),ay;}case'contact':{const aA=new CallContact(b['data']),aB=b['submission']?await aA['call_with_submission'](f,await transformSubmission(b['submission'])):await aA['call'](f),aC=await buildGuardSubmissionPrompt(aB,'contact',{'network':f?.['network'],'signer':f?.['account']});if(aC)c['push'](aC);const aD=handleCallResult(aB,m(b['data']));return d(n,o,b['operation_type'],aB)['catch'](()=>{}),aD;}case'treasury':{const aE=await prepareFundOperation(b['data'],'treasury',f?.['network']);if(aE['blockingErrors']['length']>0x0)return buildFundBlockResult(aE,'treasury');c['push'](...aE['warnings']);if(aE['confirmation']){c['push'](aE['confirmation']['message']);const aJ=a331b(aE['confirmation']);if(aJ)c['push'](aJ);}const aF=new CallTreasury(b['data']),aG=b['submission']?await aF['call_with_submission'](f,await transformSubmission(b['submission'])):await aF['call'](f),aH=await buildGuardSubmissionPrompt(aG,'treasury',{'network':f?.['network'],'signer':f?.['account'],'extra':{'treasury':b['data']?.['object']}});if(aH)c['push'](aH);const aI=handleCallResult(aG,m(b['data']));return d(n,o,b['operation_type'],aG)['catch'](()=>{}),aI;}case'reward':{const aK=await prepareFundOperation(b['data'],'reward',f?.['network']);if(aK['blockingErrors']['length']>0x0)return buildFundBlockResult(aK,'reward');c['push'](...aK['warnings']);if(aK['confirmation']){c['push'](aK['confirmation']['message']);const aQ=a331b(aK['confirmation']);if(aQ)c['push'](aQ);}const aL=transformRewardInput(b['data']),aM=new CallReward(aL),aN=b['submission']?await aM['call_with_submission'](f,await transformSubmission(b['submission'])):await aM['call'](f),aO=await buildGuardSubmissionPrompt(aN,'reward',{'network':f?.['network'],'signer':f?.['account'],'extra':{'reward':b['data']?.['object']}});if(aO)c['push'](aO);const aP=handleCallResult(aN,m(b['data']));return d(n,o,b['operation_type'],aN)['catch'](()=>{}),aP;}case'allocation':{const aR=await prepareFundOperation(b['data'],'allocation',f?.['network']);if(aR['blockingErrors']['length']>0x0)return buildFundBlockResult(aR,'allocation');c['push'](...aR['warnings']);if(aR['confirmation']){c['push'](aR['confirmation']['message']);const aX=a331b(aR['confirmation']);if(aX)c['push'](aX);}const aS=new CallAllocation(b['data']),aT=b['submission']?await aS['call_with_submission'](f,await transformSubmission(b['submission'])):await aS['call'](f),aU=await buildGuardSubmissionPrompt(aT,'allocation',{'network':f?.['network'],'signer':f?.['account'],'allocation_address':b['data']?.['object']});if(aU)c['push'](aU);const aV=b['data'];if(aV?.['alloc_by_guard']){const aY=ResponseData(aT)['filter'](aZ=>aZ?.['type']==='Payment'&&aZ?.['change']==='created');if(aY['length']>0x0){const aZ=aY['map'](b0=>b0['object'])['join'](',\x20');try{const b0=await batchQueryObjectsByIds(aY['map'](b3=>b3['object']),f?.['network'],!![]),b1=[];let b2=BigInt(0x0);for(const b3 of b0){if(b3?.['type']==='Payment'&&b3?.['record']){for(const b4 of b3['record']){const b5=formatRecipientLabel(b4['recipient']),b6=typeof b4['amount']==='string'?b4['amount']:String(b4['amount']),b7=BigInt(b6);b2+=b7,b1['push']('\x20\x20•\x20'+b5+':\x20'+formatMistAmount(b7));}b3['object']&&b1['push']('\x20\x20•\x20Payment\x20object:\x20'+b3['object']);}}if(b1['length']>0x0){b1['unshift']('DISTRIBUTION\x20DETAILS\x20(alloc_by_guard):'),b1['push']('\x20\x20─────────────────','\x20\x20•\x20Total\x20distributed:\x20'+formatMistAmount(b2));const b8=b0['some'](b9=>b9?.['type']==='Payment'&&b9?.['info']?.['for_object']);b8&&b1['push']('','ESCROW\x20MODE:\x20Funds\x20are\x20held\x20in\x20escrow\x20(Payment.for_object\x20points\x20to\x20an\x20Order).\x20'+'The\x20Order\x20owner\x20must\x20call\x20order_claim\x20(or\x20service_order_claim)\x20to\x20actually\x20receive\x20the\x20funds.\x20'+'This\x20happens\x20when\x20the\x20Guard\x27s\x20sharing\x20config\x20uses\x20{\x20GuardIdentifier:\x200\x20}.'),c['push'](b1['join']('\x0a'));}}catch{c['push']('alloc_by_guard\x20created\x20Payment\x20object(s)\x20['+aZ+'].\x20'+'Query\x20these\x20Payment\x20objects\x20to\x20see\x20the\x20distribution\x20details\x20and\x20check\x20for_object\x20for\x20escrow\x20mode.');}}}const aW=handleCallResult(aT,m(b['data']));return d(n,o,b['operation_type'],aT)['catch'](()=>{}),aW;}case'permission':{const b9=b['operation_type'],ba=handlePermissionOperations(b['data'],f,m);return ba&&typeof ba==='object'&&'then'in ba&&ba['then'](bb=>{bb?.['structuredContent']?.['result']&&d(n,o,b9,bb['structuredContent']['result'])['catch'](()=>{});})['catch'](()=>{}),ba;}case'guard':{const bb=b['data'],bc=bb['root'];if(bc?.['type']==='file'){const bg=bc,bh=resolve(bg['file_path']);let bi;try{bi=readFileSync(bh,'utf-8');}catch(bl){throw new Error('Failed\x20to\x20read\x20Guard\x20definition\x20file\x20\x27'+bg['file_path']+'\x27:\x20'+bl['message']);}const bj=parseGuardFile(bi,bg['format']);if(!bj['success']){const bm=formatGuardParseErrors(bj['errors']);throw new Error('Guard\x20validation\x20failed\x20for\x20file\x20\x27'+bg['file_path']+'\x27:\x0a\x0a'+bm);}const bk=bj['data'];bb['root']={'type':'node','node':bk['root']},bk['table']!==undefined&&bb['table']===undefined&&(bb['table']=bk['table']),bk['description']!==undefined&&bb['description']===undefined&&(bb['description']=bk['description']),bk['rely']!==undefined&&bb['rely']===undefined&&(bb['rely']=bk['rely']),bk['namedNew']!==undefined&&bb['namedNew']===undefined&&(bb['namedNew']=bk['namedNew']);}if(bb['root']&&typeof bb['root']==='object'){const bn=bb['root'];bn['type']==='node'&&bn['node']&&(bb['root']=bn['node']);}if(!bb['table']||bb['table']['length']===0x0)throw new Error('Guard\x20\x27table\x27\x20field\x20is\x20required\x20and\x20cannot\x20be\x20empty');if(!bb['root'])throw new Error('Guard\x20\x27root\x27\x20field\x20is\x20required');const bd=new CallGuard(bb),be=await bd['call'](f);if(be&&typeof be==='object'&&'digest'in be&&be?.['effects']?.['status']?.['status']==='success')try{const bo=bb['root']?.['type']??'<unknown>',bp=Array['isArray'](bb['table'])?bb['table']:[],bq=bp['length'],br=bp['filter'](bw=>bw?.['b_submission']===!![])['length'],bs=bb['rely']?.['guards'],bt=Array['isArray'](bs)?bs['length']:0x0,bu=bb['rely']?.['logic_or']===!![]?'OR':bb['rely']?.['logic_or']===![]?'AND':'none',bv=['GUARD\x20LOGIC\x20SUMMARY:','\x20\x20•\x20root\x20type:\x20'+bo,'\x20\x20•\x20table\x20entries:\x20'+bq+'\x20('+br+'\x20require\x20runtime\x20submission)'];bt>0x0&&bv['push']('\x20\x20•\x20relies\x20on:\x20'+bt+'\x20guard(s)\x20(mode:\x20'+bu+')');if(bb['description']){const bw=String(bb['description'])['slice'](0x0,0x50);bv['push']('\x20\x20•\x20description:\x20\x22'+bw+'\x22');}c['push'](bv['join']('\x0a'));}catch{}const bf=handleCallResult(be,m(b['data']));return d(n,o,b['operation_type'],be)['catch'](()=>{}),bf;}case'personal':{const bx=transformPersonalInput(b['data']),by=new CallPersonal(bx),bz=await by['call'](f),bA=handleCallResult(bz,m(b['data']));return d(n,o,b['operation_type'],bz)['catch'](()=>{}),bA;}case'payment':{const bB=await prepareFundOperation(b['data'],'payment',f?.['network']);if(bB['blockingErrors']['length']>0x0)return buildFundBlockResult(bB,'payment');c['push'](...bB['warnings']);if(bB['confirmation']){c['push'](bB['confirmation']['message']);const bG=a331b(bB['confirmation']);if(bG)c['push'](bG);}const bC=b['data'];if(bC?.['receive']===!![]){const bH=typeof bC?.['object']==='string'&&bC['object']['length']>0x0;c['push']('RECEIVE\x20MODE\x20(order_claim):\x20You\x20are\x20unwrapping\x20CoinWrapper(s)\x20to\x20your\x20wallet.\x20'+'This\x20is\x20the\x20final\x20step\x20of\x20the\x20escrow\x20flow:\x0a'+'\x20\x201.\x20Allocation\x27s\x20alloc_by_guard\x20created\x20a\x20Payment\x20object\x20with\x20your\x20address\x20as\x20a\x20recipient\x0a'+'\x20\x202.\x20The\x20Payment\x27s\x20revenue\x20split\x20transferred\x20CoinWrapper(s)\x20to\x20your\x20wallet\x20(owned\x20but\x20not\x20spendable)\x0a'+'\x20\x203.\x20'+(bH?'THIS\x20operation\x20unwraps\x20the\x20specified\x20CoinWrapper\x20via\x20payment::unwrap_to_myself':'AUTO-RECEIVE:\x20this\x20operation\x20unwraps\x20EVERY\x20CoinWrapper\x20currently\x20owned\x20by\x20you\x20in\x20a\x20single\x20transaction')+',\x20deleting\x20the\x20CoinWrapper(s)\x20and\x20transferring\x20the\x20underlying\x20coin\x20to\x20tx_context::sender\x0a'+'Requirements:\x0a'+'\x20\x20-\x20You\x20MUST\x20be\x20the\x20CoinWrapper\x27s\x20owner\x20(the\x20recipient\x20specified\x20in\x20the\x20Allocation)\x0a'+'\x20\x20-\x20type_parameter\x20is\x20OPTIONAL:\x20when\x20omitted\x20it\x20is\x20auto-derived\x20from\x20the\x20CoinWrapper\x27s\x20'+'own\x20on-chain\x20type\x20(the\x20inner\x20T\x20of\x20CoinWrapper<T>)\x0a'+(bH?'\x20\x20-\x20object\x20can\x20be\x20a\x20CoinWrapper\x20ID\x20(0x...)\x20or\x20a\x20local\x20mark\x20name\x0a':'\x20\x20-\x20When\x20\x27object\x27\x20is\x20omitted,\x20no\x20wrapper\x20lookup\x20is\x20needed\x20—\x20all\x20your\x20CoinWrappers\x20are\x20unwrapped\x20at\x20once\x0a')+'To\x20find\x20received\x20CoinWrappers:\x20call\x20query_toolkit\x20with\x20query_type=\x27onchain_received\x27\x20'+'and\x20type=\x27CoinWrapper\x27\x20for\x20your\x20account.\x0a'+'After\x20success:\x20verify\x20your\x20balance\x20increased\x20via\x20account_balance\x20query.');}else bC?.['revenue']&&c['push']('CREATE\x20MODE:\x20Creating\x20a\x20new\x20Payment\x20object.\x20Payments\x20are\x20IMMUTABLE\x20after\x20creation\x20—\x20'+'they\x20cannot\x20be\x20modified.\x20The\x20\x27revenue\x27\x20array\x20defines\x20the\x20recipients\x20and\x20amounts;\x20'+'ensure\x20correctness\x20before\x20submitting.\x20The\x20\x27info.for_guard\x27\x20field\x20(if\x20set)\x20binds\x20this\x20'+'Payment\x20to\x20a\x20Guard\x20for\x20conditional\x20release\x20(common\x20in\x20escrow\x20workflows).');const bD=new CallPayment(b['data']),bE=await bD['call'](f),bF=handleCallResult(bE,m(b['data']));return d(n,o,b['operation_type'],bE)['catch'](()=>{}),bF;}case'demand':{const bI=new CallDemand(b['data']),bJ=b['submission']?await bI['call_with_submission'](f,await transformSubmission(b['submission'])):await bI['call'](f),bK=await buildGuardSubmissionPrompt(bJ,'demand',{'network':f?.['network'],'signer':f?.['account'],'extra':{'demand':b['data']?.['object']}});if(bK)c['push'](bK);const bL=handleCallResult(bJ,m(b['data']));return d(n,o,b['operation_type'],bJ)['catch'](()=>{}),bL;}case'order':{b['data']?.['progress']&&(c['push']('Order\x20routing\x20hint:\x20order.progress\x20works\x20only\x20for\x20Forwards\x20with\x20'+'namedOperator=\x22\x22\x20(OrderHolder).\x20If\x20the\x20target\x20Forward\x20uses\x20a\x20'+'non-empty\x20namedOperator\x20or\x20permissionIndex-only,\x20use\x20progress.operate\x20'+'on\x20the\x20Progress\x20object\x20directly\x20instead.'),c['push']('Allocation\x20hint:\x20if\x20this\x20operation\x20advances\x20the\x20order\x20to\x20a\x20terminal\x20'+'state\x20(e.g.\x20Completed/Cancelled/Refunded),\x20funds\x20remain\x20in\x20the\x20'+'Allocation\x20object\x20and\x20are\x20NOT\x20auto-distributed.\x20To\x20release\x20funds,\x20'+'trigger\x20the\x20corresponding\x20Guard\x20verification\x20via\x20allocation\x20operation\x20'+'(the\x20Guard\x20bound\x20to\x20the\x20matching\x20Allocator\x20will\x20verify\x20and\x20distribute).'));const bM=new CallOrder(b['data']),bN=b['submission']?await bM['call_with_submission'](f,await transformSubmission(b['submission'])):await bM['call'](f),bO=await buildGuardSubmissionPrompt(bN,'order',{'network':f?.['network'],'signer':f?.['account'],'order_address':b['data']?.['object']});if(bO)c['push'](bO);const bP=handleCallResult(bN,m(b['data']));if(bN&&typeof bN==='object'&&'digest'in bN&&bN?.['effects']?.['status']?.['status']==='success'&&b['data']?.['progress']&&typeof b['data']?.['object']==='string')try{const bQ=b['data']['object'],bR=bQ['startsWith']('0x')?bQ:await LocalMark['Instance']()['get_address'](bQ)??undefined;let bS;if(bR){const bT=await query_objects({'objects':[bR],'no_cache':!![],'network':f?.['network']}),bU=bT?.['objects']?.[0x0];bS=(bU?.['data']??bU)?.['progress'];}if(bS){const bV=b['data']['progress']?.['operation'],bW=await enrichWorkflowGuidance({'progressRef':bS,'network':f?.['network'],'accountName':f?.['account'],'noCache':!![],'operate':bV?.['forward']&&bV?.['next_node_name']?{'forward':bV['forward'],'next_node_name':bV['next_node_name'],'op':b['data']['progress']?.['op']}:undefined});mergeGuidanceIntoOutput(bP,bW);}}catch{}return d(n,o,b['operation_type'],bN)['catch'](()=>{}),bP;}case'gen_passport':{const bX=await gen_passport(f,b['guard'],b['info']),bY=handleCallResult(bX,m(b['data']));return d(n,o,b['operation_type'],bX)['catch'](()=>{}),bY;}case'proof':{const bZ=new CallProof(b['data']),c0=b['submission']?await bZ['call_with_submission'](f,await transformSubmission(b['submission'])):await bZ['call'](f),c1=await buildGuardSubmissionPrompt(c0,'proof',{'network':f?.['network'],'signer':f?.['account']});if(c1)c['push'](c1);const c2=handleCallResult(c0,m(b['data']));return d(n,o,b['operation_type'],c0)['catch'](()=>{}),c2;}case'gen_proof':{const c3=await gen_proof(f,b['proof'],b['server_pubkey'],b['server_signature'],b['proof_type'],b['description'],b['item_count'],b['about_address']),c4=handleCallResult(c3,m(b['data']));return d(n,o,b['operation_type'],c3)['catch'](()=>{}),c4;}}const r=b;throw new Error('Unknown\x20on-chain\x20operation\x20type:\x20'+String(r['operation_type']));}catch(c5){const c6=c5 instanceof Error?c5['message']:String(c5),c7=b?.['operation_type'],c8=b&&'data'in b?b['data']:undefined;return handleCallResult({'error':c6},c7?{'operation_type':c7,'data':c8}:undefined);}}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type McpServer } from "@modelcontextprotocol/server";
|
|
2
|
-
import type { ToolEntry, ToolDispatchResult, DispatchOptions } from "./types.js";
|
|
2
|
+
import type { ToolEntry, ToolDispatchResult, DispatchOptions, ToolRequestContext } from "./types.js";
|
|
3
3
|
export { monitorEventStore, MonitorEventStore, monitorEventId } from "../monitor/EventStore.js";
|
|
4
4
|
export type { MonitorEventRecord, MonitorEventWithSeen, MonitorEventModule, LegacyMonitorState, } from "../monitor/EventStore.js";
|
|
5
5
|
export { monitorLoop, MonitorLoop } from "../monitor/MonitorLoop.js";
|
|
@@ -15,7 +15,7 @@ export interface StructuredSchemaError {
|
|
|
15
15
|
received_value?: unknown;
|
|
16
16
|
suggestion: string;
|
|
17
17
|
}
|
|
18
|
-
export declare function dispatchToolCall(name: string, args: unknown, options?: DispatchOptions): Promise<ToolDispatchResult>;
|
|
18
|
+
export declare function dispatchToolCall(name: string, args: unknown, options?: DispatchOptions, req?: ToolRequestContext): Promise<ToolDispatchResult>;
|
|
19
19
|
export interface ToolListEntry {
|
|
20
20
|
name: string;
|
|
21
21
|
title: string;
|