@wowok/agent-mcp 2.7.3 → 2.7.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.
Files changed (76) hide show
  1. package/dist/evaluation/builtins/arbitration-score.d.ts +1 -1
  2. package/dist/evaluation/builtins/arbitration-score.js +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/knowledge/arbitration-ledger.js +1 -1
  5. package/dist/knowledge/demand-confirm.js +1 -1
  6. package/dist/knowledge/demand-risk.js +1 -1
  7. package/dist/knowledge/demand-translation.js +1 -1
  8. package/dist/knowledge/guard-design-patterns.js +1 -1
  9. package/dist/knowledge/index.d.ts +2 -2
  10. package/dist/knowledge/index.js +1 -1
  11. package/dist/knowledge/onchain-constants.d.ts +2 -2
  12. package/dist/knowledge/onchain-constants.js +1 -1
  13. package/dist/knowledge/payment-risk.js +1 -1
  14. package/dist/knowledge/permission-context.d.ts +11 -0
  15. package/dist/knowledge/permission-context.js +1 -1
  16. package/dist/knowledge/personal-risk.js +1 -1
  17. package/dist/knowledge/progress-ledger.js +1 -1
  18. package/dist/knowledge/progress-risk.js +1 -1
  19. package/dist/knowledge/progress-templates.js +1 -1
  20. package/dist/knowledge/progress-translation.js +1 -1
  21. package/dist/knowledge/registrar-risk.js +1 -1
  22. package/dist/knowledge/registrar-translation.js +1 -1
  23. package/dist/knowledge/reward-ledger.js +1 -1
  24. package/dist/knowledge/reward-translation.js +1 -1
  25. package/dist/knowledge/tools-reference.js +1 -1
  26. package/dist/knowledge/treasury-context.d.ts +1 -1
  27. package/dist/knowledge/treasury-context.js +1 -1
  28. package/dist/knowledge/treasury-ledger.js +1 -1
  29. package/dist/knowledge/treasury-risk.js +1 -1
  30. package/dist/knowledge/util-confirm.js +1 -1
  31. package/dist/knowledge/util-risk.js +1 -1
  32. package/dist/knowledge/util-translation.d.ts +3 -2
  33. package/dist/knowledge/util-translation.js +1 -1
  34. package/dist/knowledge/workflow-guidance.d.ts +64 -0
  35. package/dist/knowledge/workflow-guidance.js +1 -1
  36. package/dist/project/evaluation.js +1 -1
  37. package/dist/project/graph-builder.d.ts +2 -2
  38. package/dist/project/graph-builder.js +1 -1
  39. package/dist/project/semantic-assembler.d.ts +2 -2
  40. package/dist/project/semantic-assembler.js +1 -1
  41. package/dist/schema/evaluation/index.d.ts +1 -1
  42. package/dist/schema/evaluation/index.js +1 -1
  43. package/dist/schema/index.d.ts +2 -0
  44. package/dist/schema/index.js +1 -1
  45. package/dist/schema/operations.d.ts +251 -2
  46. package/dist/schema/operations.js +1 -1
  47. package/dist/schema/permission/index.d.ts +121 -0
  48. package/dist/schema/permission/index.js +1 -0
  49. package/dist/schema/query/index.d.ts +223 -22
  50. package/dist/schema/query/index.js +1 -1
  51. package/dist/schema/schema-version.js +1 -1
  52. package/dist/schema/workflow/index.d.ts +161 -0
  53. package/dist/schema/workflow/index.js +1 -0
  54. package/dist/schema-query-impl/index.js +1 -1
  55. package/dist/schemas/evaluation_operation.schema.json +2 -2
  56. package/dist/schemas/index.json +13 -1
  57. package/dist/schemas/onchain_table_data.output.json +821 -5
  58. package/dist/schemas/onchain_table_data.schema.json +154 -1
  59. package/dist/schemas/permission_operation.output.json +173 -0
  60. package/dist/schemas/permission_operation.schema.json +39 -0
  61. package/dist/schemas/query_toolkit.output.json +15 -15
  62. package/dist/schemas/workflow_operation.output.json +164 -0
  63. package/dist/schemas/workflow_operation.schema.json +116 -0
  64. package/dist/tools/handlers/config.js +1 -1
  65. package/dist/tools/handlers/evaluation.js +1 -1
  66. package/dist/tools/handlers/onchain.js +1 -1
  67. package/dist/tools/handlers/permission.d.ts +2 -0
  68. package/dist/tools/handlers/permission.js +1 -0
  69. package/dist/tools/handlers/query.js +1 -1
  70. package/dist/tools/handlers/workflow.d.ts +2 -0
  71. package/dist/tools/handlers/workflow.js +1 -0
  72. package/dist/tools/handlers/workspace.d.ts +2 -0
  73. package/dist/tools/handlers/workspace.js +1 -1
  74. package/dist/tools/index.js +1 -1
  75. package/dist/tools/shared.js +1 -1
  76. package/package.json +2 -2
@@ -1 +1 @@
1
- import{strictParse,WatchQueryOperationsSchema,OnchainTableDataSchema,OnchainEventsInputSchema,ProtocolInfoQuerySchema}from'../../schema/index.js';import{checkUpgrade}from'../upgrade-check.js';import{getUniversalTemplate}from'../../knowledge/universal-template.js';import{query_local_mark_list,query_account_list,query_local_info_list,query_local_token_list,query_account,GetLocalNamesByAddresses,query_personal,query_objects,query_table,query_tableItem,queryTableItem_RepositoryData,queryTableItem_PermissionPerm,queryTableItem_RewardRecord,queryTableItem_DemandPresenter,queryTableItem_TreasuryHistory,queryTableItem_MachineNode,queryTableItem_ProgressHistory,queryTableItem_AddressMark,queryTableItem_EntityRegistrar,queryTableItem_EntityLinker,query_received,queryProtocolInfo,query_events,query_transaction,query_object_history,query_address_activity,generateNodeComments}from'@wowok/wowok';import{buildDataSemantic}from'../../schema/call/semantic.js';import{enrichWorkflowGuidance}from'../../knowledge/workflow-guidance.js';import{formatChainValue,annotateObjectMonetaryFields,annotateTableItemMonetaryFields,annotateEventsMonetaryFields,annotateBalanceChanges,resolveParentObjectTokenType,convertTokenValue}from'../../knowledge/fund-layer.js';import{normalizeAccountOrMark}from'./messenger.js';async function annotateAccountBalance(a,b){if(!a||typeof a!=='object')return;const e={},f=(j,k)=>{if(j===null||j===undefined)return undefined;if(typeof j!=='string'&&typeof j!=='number'&&typeof j!=='bigint')return undefined;if(typeof k!=='string'||!k)return undefined;return formatChainValue(j,k,b);},g=a['balance'];if(g&&typeof g==='object'){const j=g['coinType'],k=await f(g['totalBalance'],j);if(k)e['balance.totalBalance']=k;if(g['lockedBalance']!==undefined){const l=await f(g['lockedBalance'],j);if(l)e['balance.lockedBalance']=l;}}const h=a['coin']?.['data'];if(Array['isArray'](h))for(let m=0x0;m<h['length'];m++){const n=h[m],o=await f(n?.['balance'],n?.['coinType']);if(o)e['coin.data['+m+'].balance']=o;}Object['keys'](e)['length']>0x0&&(a['_money_display']=e);}export async function handleWatchQueryOperations(a){const c=strictParse(WatchQueryOperationsSchema,a,'watch_and_query\x20input');let d;switch(c['query_type']){case'local_mark_list':{const e=await query_local_mark_list(c['filter']||{});d={'query_type':'local_mark_list','result':e};break;}case'account_list':{const f=await query_account_list(c['filter']);d={'query_type':'account_list','result':f};break;}case'local_info_list':{const g=await query_local_info_list(c['filter']);d={'query_type':'local_info_list','result':g};break;}case'token_list':{const h=await query_local_token_list(c['filter']||{});d={'query_type':'token_list','result':h};break;}case'account_balance':{const j=await query_account({'name_or_address':c['name_or_address'],'token_type':c['token_type'],'balance':c['balance'],'coin':c['coin'],'network':c['network']});await annotateAccountBalance(j,c['network']),d={'query_type':'account_balance','result':j};break;}case'local_names':{const k=await GetLocalNamesByAddresses(c['addresses']);d={'query_type':'local_names','result':k};break;}case'onchain_personal_profile':{const l=await query_personal({'account':c['account'],'no_cache':c['no_cache'],'network':c['network']});d={'query_type':'onchain_personal_profile','result':l};break;}case'onchain_objects':{const m=await query_objects({'objects':c['objects'],'no_cache':c['no_cache'],'network':c['network']});if(m&&m['objects']&&Array['isArray'](m['objects'])){m['objects']=m['objects']['map'](n=>{if(n&&n['data']&&n['data']['type']==='Guard'&&n['data']['root'])try{const o=generateNodeComments(n['data']['root']);return{...n,'_guard_node_comments':o};}catch(p){return n;}return n;}),m['objects']=m['objects']['map'](n=>{if(n&&n['data']&&n['data']['type']==='Progress'&&n['data']['current']===''){const o=n['data']['machine'],p=n['data']['task'];return{...n,'_diagnostic':{'issue':'Progress.current\x20is\x20empty\x20—\x20order\x20workflow\x20is\x20stuck\x20at\x20the\x20initial\x20state','cause':'The\x20Machine\x27s\x20entry\x20node\x20(prev_node=\x27\x27)\x20likely\x20has\x20no\x20forwards\x20defined.\x20'+'When\x20Progress\x20starts,\x20it\x20looks\x20up\x20the\x20entry\x20node\x27s\x20forwards\x20to\x20determine\x20'+'the\x20next\x20node.\x20Without\x20forwards,\x20Progress\x20cannot\x20advance\x20and\x20the\x20order\x20'+'is\x20permanently\x20stuck.','machine_object_id':o??null,'bound_order_id':p??null,'fix':['1.\x20Query\x20the\x20Machine\x20object\x20(use\x20query_toolkit\x20with\x20query_type=\x27onchain_objects\x27\x20and\x20objects=['+JSON['stringify'](o)+']).','2.\x20Inspect\x20node.pairs\x20for\x20the\x20entry\x20node\x20(prev_node=\x27\x27).','3.\x20If\x20forwards\x20is\x20empty:\x20this\x20is\x20the\x20root\x20cause.\x20The\x20Machine\x20must\x20be\x20republished\x20with\x20at\x20least\x20one\x20forward\x20on\x20the\x20entry\x20node.','4.\x20To\x20republish:\x20clone\x20the\x20Machine\x20nodes,\x20add\x20a\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs,\x20then\x20create\x20a\x20new\x20Machine\x20(Machine\x20nodes\x20are\x20immutable\x20after\x20publish\x20—\x20see\x20P0-2\x20schema\x20validation\x20that\x20now\x20blocks\x20this).','5.\x20Rebind\x20the\x20new\x20Machine\x20to\x20the\x20Service\x20(service.machine\x20field)\x20and\x20create\x20a\x20new\x20Order\x20to\x20test.'],'reference':'P0-2\x20schema\x20refinement\x20in\x20MachineNodePairSchema\x20ensures\x20new\x20Machines\x20cannot\x20be\x20published\x20with\x20empty\x20entry-node\x20forwards.\x20This\x20diagnostic\x20catches\x20legacy\x20Machines\x20that\x20predate\x20the\x20fix.'}};}return n;});for(const n of m['objects']){const o=n?.['data']??n;if((n?.['type']??o?.['type'])!=='Progress')continue;const p=n?.['object']??o?.['object'];if(!p)continue;try{const q=await enrichWorkflowGuidance({'progressRef':p,'network':c['network'],'noCache':c['no_cache']});if(q?.['guidance']){n['_workflow_guidance']=q['guidance'];if(q['text'])n['_workflow_guidance_text']=q['text'];}}catch{}}for(const r of m['objects']){try{await annotateObjectMonetaryFields(r,c['network']);}catch{}}}d={'query_type':'onchain_objects','result':m};break;}case'onchain_received':{const s=await query_received({'name_or_address':normalizeAccountOrMark(c['name_or_address']),'type':c['type'],'cursor':c['cursor'],'limit':c['limit'],'no_cache':c['no_cache'],'network':c['network']}),t=s;if(t&&typeof t==='object'&&typeof t['balance']==='bigint'){const u=t['token_type'];t['balance']=t['balance']['toString']();if(Array['isArray'](t['received']))for(const v of t['received']){v&&typeof v['balance']==='bigint'&&(v['balance']=v['balance']['toString']());}if(u)try{const w={'balance':await formatChainValue(t['balance'],u,c['network'])};if(Array['isArray'](t['received']))for(let x=0x0;x<t['received']['length'];x++){const y=t['received'][x]?.['balance'];y!==undefined&&y!==null&&(w['received['+x+'].balance']=await formatChainValue(y,u,c['network']));}t['_money_display']=w;}catch{}}d={'query_type':'onchain_received','result':t};break;}case'onchain_transaction':{const z=await query_transaction({'digest':c['digest'],'no_cache':c['no_cache'],'network':c['network']});try{await annotateBalanceChanges(z?.['balance_changes'],c['network']);}catch{}d={'query_type':'onchain_transaction','result':z};break;}case'onchain_object_history':{const A=await query_object_history({'object':c['object'],'cursor':c['cursor'],'limit':c['limit'],'order':c['order'],'no_cache':c['no_cache'],'network':c['network']});d={'query_type':'onchain_object_history','result':A};break;}case'onchain_address_activity':{const B=typeof c['name_or_address']==='string'?c['name_or_address']:c['name_or_address']['name_or_address'],C=await query_address_activity({'name_or_address':B,'cursor':c['cursor'],'limit':c['limit'],'order':c['order'],'no_cache':c['no_cache'],'network':c['network']});d={'query_type':'onchain_address_activity','result':C};break;}case'token_value_convert':{const D=c['raw']!==undefined,E=c['unit']!==undefined;if(D===E)throw new Error('token_value_convert:\x20provide\x20EXACTLY\x20ONE\x20of\x20\x27raw\x27\x20(u64\x20smallest\x20units\x20→\x20unit\x20value)\x20'+('or\x20\x27unit\x27\x20(unit\x20value\x20→\x20u64\x20raw).\x20Received\x20raw='+JSON['stringify'](c['raw'])+',\x20')+('unit='+JSON['stringify'](c['unit'])+'.'));const F=await convertTokenValue(c['token_type'],D?{'raw':c['raw']}:{'unit':c['unit']},c['network']);d={'query_type':'token_value_convert','result':F};break;}default:throw new Error('Unknown\x20query\x20type.\x20Valid\x20query_types\x20are:\x20\x22local_mark_list\x22,\x20\x22account_list\x22,\x20\x22local_info_list\x22,\x20\x22token_list\x22,\x20\x22account_balance\x22,\x20\x22local_names\x22,\x20\x22onchain_personal_profile\x22,\x20\x22onchain_objects\x22,\x20\x22onchain_received\x22,\x20\x22onchain_transaction\x22,\x20\x22onchain_object_history\x22,\x20\x22onchain_address_activity\x22,\x20\x22token_value_convert\x22.\x20For\x20table\x20queries,\x20use\x20the\x20\x22onchain_table_data\x22\x20tool.');}return{'content':[{'type':'text','text':JSON['stringify']({'result':d})}],'structuredContent':{'result':d,'semantic':buildDataSemantic(d,{'operation_type':'query_toolkit','data':c})}};}export async function handleOnchainTableData(a){const b=strictParse(OnchainTableDataSchema,a,'onchain_table_data\x20input');let c;switch(b['query_type']){case'onchain_table':{const d=await query_table({'parent':b['parent'],'cursor':b['cursor'],'limit':b['limit'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table','result':d};break;}case'onchain_table_item_repository_data':{const e=await queryTableItem_RepositoryData({'parent':b['parent'],'name':b['name'],'entity':b['entity'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_repository_data','result':e};break;}case'onchain_table_item_permission_perm':{const f=await queryTableItem_PermissionPerm({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_permission_perm','result':f};break;}case'onchain_table_item_reward_record':{const g=await queryTableItem_RewardRecord({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(g)try{const h=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(g,h,b['network']);}catch{}c={'query_type':'onchain_table_item_reward_record','result':g};break;}case'onchain_table_item_demand_presenter':{const i=await queryTableItem_DemandPresenter({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_demand_presenter','result':i};break;}case'onchain_table_item_treasury_history':{const j=await queryTableItem_TreasuryHistory({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(j)try{const k=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(j,k,b['network']);}catch{}c={'query_type':'onchain_table_item_treasury_history','result':j};break;}case'onchain_table_item_machine_node':{const l=await queryTableItem_MachineNode({'parent':b['parent'],'key':b['key'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_machine_node','result':l};break;}case'onchain_table_item_progress_history':{const m=await queryTableItem_ProgressHistory({'parent':b['parent'],'u64':b['u64'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_progress_history','result':m};break;}case'onchain_table_item_address_mark':{const n=await queryTableItem_AddressMark({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_address_mark','result':n};break;}case'onchain_table_item_entity_registrar':{const o=await queryTableItem_EntityRegistrar({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_registrar','result':o};break;}case'onchain_table_item_entity_linker':{const p=await queryTableItem_EntityLinker({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_linker','result':p};break;}case'onchain_table_item_generic':{const q=await query_tableItem({'parent':b['parent'],'key':{'type':b['key_type'],'value':b['key_value']},'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_generic','result':q};break;}default:throw new Error('Unknown\x20table\x20query\x20type.\x20Valid\x20query_types\x20are:\x20\x22onchain_table\x22,\x20\x22onchain_table_item_repository_data\x22,\x20\x22onchain_table_item_permission_perm\x22,\x20\x22onchain_table_item_reward_record\x22,\x20\x22onchain_table_item_demand_presenter\x22,\x20\x22onchain_table_item_treasury_history\x22,\x20\x22onchain_table_item_machine_node\x22,\x20\x22onchain_table_item_progress_history\x22,\x20\x22onchain_table_item_address_mark\x22,\x20\x22onchain_table_item_entity_registrar\x22,\x20\x22onchain_table_item_entity_linker\x22,\x20\x22onchain_table_item_generic\x22');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_table_data','data':b})}};}export async function handleOnchainEvents(a){const b=strictParse(OnchainEventsInputSchema,a,'onchain_events\x20input'),c=await query_events({'type':b['type'],'cursor':b['cursor']?{'eventSeq':String(b['cursor']['eventSeq']),'txDigest':b['cursor']['txDigest']}:null,'limit':b['limit']??null,'order':b['order']??null,'no_cache':b['no_cache'],'network':b['network']});try{await annotateEventsMonetaryFields(c?.['data'],b['network']);}catch{}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_events','data':b})}};}export async function handleWowokInfo(a){const b=strictParse(ProtocolInfoQuerySchema,a,'wowok_buildin_info\x20input');if(b['info']==='upgrade_check'){const d=await checkUpgrade(),e={'info':'upgrade_check','result':d};return{'content':[{'type':'text','text':JSON['stringify']({'result':e})}],'structuredContent':{'result':e}};}if(b['info']==='universal_template'){const f={'info':'universal_template','result':getUniversalTemplate()};return{'content':[{'type':'text','text':JSON['stringify']({'result':f})}],'structuredContent':{'result':f}};}const c=await queryProtocolInfo(b);return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
1
+ import{strictParse,WatchQueryOperationsSchema,OnchainTableDataSchema,OnchainEventsInputSchema,ProtocolInfoQuerySchema}from'../../schema/index.js';import{checkUpgrade}from'../upgrade-check.js';import{getUniversalTemplate}from'../../knowledge/universal-template.js';import{query_local_mark_list,query_account_list,query_local_info_list,query_local_token_list,query_account,GetLocalNamesByAddresses,query_personal,query_objects,query_table,query_tableItem,queryTableItem_RepositoryData,queryTableItem_PermissionPerm,queryTableItem_RewardRecord,queryTableItem_DemandPresenter,queryTableItem_TreasuryHistory,queryTableItem_MachineNode,queryTableItem_ProgressHistory,queryTableItem_AddressMark,queryTableItem_EntityRegistrar,queryTableItem_EntityLinker,queryTableItem_EntityContact,queryTableItem_ObjectLinkerCore,queryTableItem_ObjectLinkerTx,query_received,queryProtocolInfo,query_events,query_transaction,query_object_history,query_address_activity,generateNodeComments}from'@wowok/wowok';import{buildDataSemantic}from'../../schema/call/semantic.js';import{enrichWorkflowGuidance}from'../../knowledge/workflow-guidance.js';import{formatChainValue,annotateObjectMonetaryFields,annotateTableItemMonetaryFields,annotateEventsMonetaryFields,annotateBalanceChanges,resolveParentObjectTokenType,convertTokenValue}from'../../knowledge/fund-layer.js';import{normalizeAccountOrMark}from'./messenger.js';async function annotateAccountBalance(a,b){if(!a||typeof a!=='object')return;const e={},f=(j,k)=>{if(j===null||j===undefined)return undefined;if(typeof j!=='string'&&typeof j!=='number'&&typeof j!=='bigint')return undefined;if(typeof k!=='string'||!k)return undefined;return formatChainValue(j,k,b);},g=a['balance'];if(g&&typeof g==='object'){const j=g['coinType'],k=await f(g['totalBalance'],j);if(k)e['balance.totalBalance']=k;if(g['lockedBalance']!==undefined){const l=await f(g['lockedBalance'],j);if(l)e['balance.lockedBalance']=l;}}const h=a['coin']?.['data'];if(Array['isArray'](h))for(let m=0x0;m<h['length'];m++){const n=h[m],o=await f(n?.['balance'],n?.['coinType']);if(o)e['coin.data['+m+'].balance']=o;}Object['keys'](e)['length']>0x0&&(a['_money_display']=e);}export async function handleWatchQueryOperations(a){const c=strictParse(WatchQueryOperationsSchema,a,'watch_and_query\x20input');let d;switch(c['query_type']){case'local_mark_list':{const e=await query_local_mark_list(c['filter']||{});d={'query_type':'local_mark_list','result':e};break;}case'account_list':{const f=await query_account_list(c['filter']);d={'query_type':'account_list','result':f};break;}case'local_info_list':{const g=await query_local_info_list(c['filter']);d={'query_type':'local_info_list','result':g};break;}case'token_list':{const h=await query_local_token_list(c['filter']||{});d={'query_type':'token_list','result':h};break;}case'account_balance':{const j=await query_account({'name_or_address':c['name_or_address'],'token_type':c['token_type'],'balance':c['balance'],'coin':c['coin'],'network':c['network']});await annotateAccountBalance(j,c['network']),d={'query_type':'account_balance','result':j};break;}case'local_names':{const k=await GetLocalNamesByAddresses(c['addresses']);d={'query_type':'local_names','result':k};break;}case'onchain_personal_profile':{const l=await query_personal({'account':c['account'],'no_cache':c['no_cache'],'network':c['network']});d={'query_type':'onchain_personal_profile','result':l};break;}case'onchain_objects':{const m=await query_objects({'objects':c['objects'],'no_cache':c['no_cache'],'network':c['network']});if(m&&m['objects']&&Array['isArray'](m['objects'])){m['objects']=m['objects']['map'](n=>{if(n&&n['data']&&n['data']['type']==='Guard'&&n['data']['root'])try{const o=generateNodeComments(n['data']['root']);return{...n,'_guard_node_comments':o};}catch(p){return n;}return n;}),m['objects']=m['objects']['map'](n=>{if(n&&n['data']&&n['data']['type']==='Progress'&&n['data']['current']===''){const o=n['data']['machine'],p=n['data']['task'];return{...n,'_diagnostic':{'issue':'Progress.current\x20is\x20empty\x20—\x20order\x20workflow\x20is\x20stuck\x20at\x20the\x20initial\x20state','cause':'The\x20Machine\x27s\x20entry\x20node\x20(prev_node=\x27\x27)\x20likely\x20has\x20no\x20forwards\x20defined.\x20'+'When\x20Progress\x20starts,\x20it\x20looks\x20up\x20the\x20entry\x20node\x27s\x20forwards\x20to\x20determine\x20'+'the\x20next\x20node.\x20Without\x20forwards,\x20Progress\x20cannot\x20advance\x20and\x20the\x20order\x20'+'is\x20permanently\x20stuck.','machine_object_id':o??null,'bound_order_id':p??null,'fix':['1.\x20Query\x20the\x20Machine\x20object\x20(use\x20query_toolkit\x20with\x20query_type=\x27onchain_objects\x27\x20and\x20objects=['+JSON['stringify'](o)+']).','2.\x20Inspect\x20node.pairs\x20for\x20the\x20entry\x20node\x20(prev_node=\x27\x27).','3.\x20If\x20forwards\x20is\x20empty:\x20this\x20is\x20the\x20root\x20cause.\x20The\x20Machine\x20must\x20be\x20republished\x20with\x20at\x20least\x20one\x20forward\x20on\x20the\x20entry\x20node.','4.\x20To\x20republish:\x20clone\x20the\x20Machine\x20nodes,\x20add\x20a\x20forward\x20to\x20the\x20entry\x20node\x27s\x20pairs,\x20then\x20create\x20a\x20new\x20Machine\x20(Machine\x20nodes\x20are\x20immutable\x20after\x20publish\x20—\x20see\x20P0-2\x20schema\x20validation\x20that\x20now\x20blocks\x20this).','5.\x20Rebind\x20the\x20new\x20Machine\x20to\x20the\x20Service\x20(service.machine\x20field)\x20and\x20create\x20a\x20new\x20Order\x20to\x20test.'],'reference':'P0-2\x20schema\x20refinement\x20in\x20MachineNodePairSchema\x20ensures\x20new\x20Machines\x20cannot\x20be\x20published\x20with\x20empty\x20entry-node\x20forwards.\x20This\x20diagnostic\x20catches\x20legacy\x20Machines\x20that\x20predate\x20the\x20fix.'}};}return n;});for(const n of m['objects']){const o=n?.['data']??n;if((n?.['type']??o?.['type'])!=='Progress')continue;const p=n?.['object']??o?.['object'];if(!p)continue;try{const q=await enrichWorkflowGuidance({'progressRef':p,'network':c['network'],'noCache':c['no_cache']});if(q?.['guidance']){n['_workflow_guidance']=q['guidance'];if(q['text'])n['_workflow_guidance_text']=q['text'];}}catch{}}for(const r of m['objects']){try{await annotateObjectMonetaryFields(r,c['network']);}catch{}}}d={'query_type':'onchain_objects','result':m};break;}case'onchain_received':{const s=await query_received({'name_or_address':normalizeAccountOrMark(c['name_or_address']),'type':c['type'],'cursor':c['cursor'],'limit':c['limit'],'no_cache':c['no_cache'],'network':c['network']}),t=s;if(t&&typeof t==='object'&&typeof t['balance']==='bigint'){const u=t['token_type'];t['balance']=t['balance']['toString']();if(Array['isArray'](t['received']))for(const v of t['received']){v&&typeof v['balance']==='bigint'&&(v['balance']=v['balance']['toString']());}if(u)try{const w={'balance':await formatChainValue(t['balance'],u,c['network'])};if(Array['isArray'](t['received']))for(let x=0x0;x<t['received']['length'];x++){const y=t['received'][x]?.['balance'];y!==undefined&&y!==null&&(w['received['+x+'].balance']=await formatChainValue(y,u,c['network']));}t['_money_display']=w;}catch{}}d={'query_type':'onchain_received','result':t};break;}case'onchain_transaction':{const z=await query_transaction({'digest':c['digest'],'no_cache':c['no_cache'],'network':c['network']});try{await annotateBalanceChanges(z?.['balance_changes'],c['network']);}catch{}d={'query_type':'onchain_transaction','result':z};break;}case'onchain_object_history':{const A=await query_object_history({'object':c['object'],'cursor':c['cursor'],'limit':c['limit'],'order':c['order'],'no_cache':c['no_cache'],'network':c['network']});d={'query_type':'onchain_object_history','result':A};break;}case'onchain_address_activity':{const B=typeof c['name_or_address']==='string'?c['name_or_address']:c['name_or_address']['name_or_address'],C=await query_address_activity({'name_or_address':B,'cursor':c['cursor'],'limit':c['limit'],'order':c['order'],'no_cache':c['no_cache'],'network':c['network']});d={'query_type':'onchain_address_activity','result':C};break;}case'token_value_convert':{const D=c['raw']!==undefined,E=c['unit']!==undefined;if(D===E)throw new Error('token_value_convert:\x20provide\x20EXACTLY\x20ONE\x20of\x20\x27raw\x27\x20(u64\x20smallest\x20units\x20→\x20unit\x20value)\x20'+('or\x20\x27unit\x27\x20(unit\x20value\x20→\x20u64\x20raw).\x20Received\x20raw='+JSON['stringify'](c['raw'])+',\x20')+('unit='+JSON['stringify'](c['unit'])+'.'));const F=await convertTokenValue(c['token_type'],D?{'raw':c['raw']}:{'unit':c['unit']},c['network']);d={'query_type':'token_value_convert','result':F};break;}default:throw new Error('Unknown\x20query\x20type.\x20Valid\x20query_types\x20are:\x20\x22local_mark_list\x22,\x20\x22account_list\x22,\x20\x22local_info_list\x22,\x20\x22token_list\x22,\x20\x22account_balance\x22,\x20\x22local_names\x22,\x20\x22onchain_personal_profile\x22,\x20\x22onchain_objects\x22,\x20\x22onchain_received\x22,\x20\x22onchain_transaction\x22,\x20\x22onchain_object_history\x22,\x20\x22onchain_address_activity\x22,\x20\x22token_value_convert\x22.\x20For\x20table\x20queries,\x20use\x20the\x20\x22onchain_table_data\x22\x20tool.');}return{'content':[{'type':'text','text':JSON['stringify']({'result':d})}],'structuredContent':{'result':d,'semantic':buildDataSemantic(d,{'operation_type':'query_toolkit','data':c})}};}export async function handleOnchainTableData(a){const b=strictParse(OnchainTableDataSchema,a,'onchain_table_data\x20input');let c;switch(b['query_type']){case'onchain_table':{const d=await query_table({'parent':b['parent'],'cursor':b['cursor'],'limit':b['limit'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table','result':d};break;}case'onchain_table_item_repository_data':{const e=await queryTableItem_RepositoryData({'parent':b['parent'],'name':b['name'],'entity':b['entity'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_repository_data','result':e};break;}case'onchain_table_item_permission_perm':{const f=await queryTableItem_PermissionPerm({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_permission_perm','result':f};break;}case'onchain_table_item_reward_record':{const g=await queryTableItem_RewardRecord({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(g)try{const h=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(g,h,b['network']);}catch{}c={'query_type':'onchain_table_item_reward_record','result':g};break;}case'onchain_table_item_demand_presenter':{const i=await queryTableItem_DemandPresenter({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_demand_presenter','result':i};break;}case'onchain_table_item_treasury_history':{const j=await queryTableItem_TreasuryHistory({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});if(j)try{const k=await resolveParentObjectTokenType(b['parent'],b['network']);await annotateTableItemMonetaryFields(j,k,b['network']);}catch{}c={'query_type':'onchain_table_item_treasury_history','result':j};break;}case'onchain_table_item_machine_node':{const l=await queryTableItem_MachineNode({'parent':b['parent'],'key':b['key'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_machine_node','result':l};break;}case'onchain_table_item_progress_history':{const m=await queryTableItem_ProgressHistory({'parent':b['parent'],'u64':b['u64'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_progress_history','result':m};break;}case'onchain_table_item_address_mark':{const n=await queryTableItem_AddressMark({'parent':b['parent'],'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_address_mark','result':n};break;}case'onchain_table_item_entity_registrar':{const o=await queryTableItem_EntityRegistrar({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_registrar','result':o};break;}case'onchain_table_item_entity_linker':{const p=await queryTableItem_EntityLinker({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_linker','result':p};break;}case'onchain_table_item_entity_contact':{const q=await queryTableItem_EntityContact({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_entity_contact','result':q};break;}case'onchain_table_item_object_linker_core':{const r=await queryTableItem_ObjectLinkerCore({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_object_linker_core','result':r};break;}case'onchain_table_item_object_linker_tx':{const s=await queryTableItem_ObjectLinkerTx({'address':b['address'],'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_object_linker_tx','result':s};break;}case'onchain_table_item_generic':{const t=await query_tableItem({'parent':b['parent'],'key':{'type':b['key_type'],'value':b['key_value']},'no_cache':b['no_cache'],'network':b['network']});c={'query_type':'onchain_table_item_generic','result':t};break;}default:throw new Error('Unknown\x20table\x20query\x20type.\x20Valid\x20query_types\x20are:\x20\x22onchain_table\x22,\x20\x22onchain_table_item_repository_data\x22,\x20\x22onchain_table_item_permission_perm\x22,\x20\x22onchain_table_item_reward_record\x22,\x20\x22onchain_table_item_demand_presenter\x22,\x20\x22onchain_table_item_treasury_history\x22,\x20\x22onchain_table_item_machine_node\x22,\x20\x22onchain_table_item_progress_history\x22,\x20\x22onchain_table_item_address_mark\x22,\x20\x22onchain_table_item_entity_registrar\x22,\x20\x22onchain_table_item_entity_linker\x22,\x20\x22onchain_table_item_entity_contact\x22,\x20\x22onchain_table_item_object_linker_core\x22,\x20\x22onchain_table_item_object_linker_tx\x22,\x20\x22onchain_table_item_generic\x22');}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_table_data','data':b})}};}export async function handleOnchainEvents(a){const b=strictParse(OnchainEventsInputSchema,a,'onchain_events\x20input'),c=await query_events({'type':b['type'],'cursor':b['cursor']?{'eventSeq':String(b['cursor']['eventSeq']),'txDigest':b['cursor']['txDigest']}:null,'limit':b['limit']??null,'order':b['order']??null,'no_cache':b['no_cache'],'network':b['network']});try{await annotateEventsMonetaryFields(c?.['data'],b['network']);}catch{}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c,'semantic':buildDataSemantic(c,{'operation_type':'onchain_events','data':b})}};}export async function handleWowokInfo(a){const b=strictParse(ProtocolInfoQuerySchema,a,'wowok_buildin_info\x20input');if(b['info']==='upgrade_check'){const d=await checkUpgrade(),e={'info':'upgrade_check','result':d};return{'content':[{'type':'text','text':JSON['stringify']({'result':e})}],'structuredContent':{'result':e}};}if(b['info']==='universal_template'){const f={'info':'universal_template','result':getUniversalTemplate()};return{'content':[{'type':'text','text':JSON['stringify']({'result':f})}],'structuredContent':{'result':f}};}const c=await queryProtocolInfo(b);return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
@@ -0,0 +1,2 @@
1
+ import type { ToolDispatchResult } from "../types.js";
2
+ export declare function handleWorkflowOperation(args: unknown): Promise<ToolDispatchResult>;
@@ -0,0 +1 @@
1
+ import{query_objects,query_events}from'@wowok/wowok';import{strictParse,WorkflowOperationInputSchema}from'../../schema/index.js';import{fetchMachineNodes,fetchPermissionContext,fetchOrderContext,listLocalAccounts,accountCanExecuteForward}from'../../knowledge/index.js';import{handleOnchainOperations}from'./onchain.js';function operatorKind(a){if(a['namedOperator']==='')return'order_holder';if(typeof a['namedOperator']==='string'&&a['namedOperator']['length']>0x0)return'named_operator';return'permission_index';}async function buildWorkflowTask(a,b,c,d){try{const e=await query_objects({'objects':[a],'no_cache':d,'network':c}),g=e?.['objects']?.[0x0];if(g?.['type']!=='Progress')return undefined;const h=g?.['data']??g,i=h['current']??'',j=h['machine'],k=h['task']??null,l=(Array['isArray'](h['namedOperator'])?h['namedOperator']:[])['map'](r=>({'name':String(r?.['name']??''),'operators':(r?.['operators']??[])['map'](s=>String(s))}));if(!j)return undefined;const m=await fetchMachineNodes(j,c,d);let n;try{const r=await query_objects({'objects':[j],'no_cache':d,'network':c}),s=r?.['objects']?.[0x0]?.['data']??r?.['objects']?.[0x0],t=s?.['permission'];if(t)n=await fetchPermissionContext(t,c,d);}catch{n=undefined;}let o,p;if(k){o=await fetchOrderContext(k,c,d);if(o)try{const u=await query_objects({'objects':[k],'no_cache':d,'network':c}),v=u?.['objects']?.[0x0]?.['data']??u?.['objects']?.[0x0];p=v?.['service'];}catch{p=undefined;}}const q=[];for(const w of m){for(const x of w['pairs']){if(x['prev_node']!==i)continue;for(const y of x['forwards']){if(!y['name'])continue;const z=b['filter'](A=>accountCanExecuteForward(y,A['address'],l,o,n));q['push']({'next_node':w['name'],'forward':y['name'],'weight':y['weight'],'threshold':x['threshold'],'guard':y['guard'],'operator_kind':operatorKind(y),'permission_index':y['permissionIndex']??undefined,'named_operator':typeof y['namedOperator']==='string'&&y['namedOperator']['length']>0x0?y['namedOperator']:undefined,'executable_accounts':z['map'](A=>({'address':A['address'],'name':A['name']}))});}}}if(!q['some'](A=>A['executable_accounts']['length']>0x0))return undefined;return{'progress':a,'current':i,'machine':j,'task':k,'service':p,'options':q,'terminal':q['length']===0x0};}catch{return undefined;}}async function handleList(a){const b=a['limit']??0x32,c=a['network'],d=a['no_cache'],e=await listLocalAccounts();if(e['length']===0x0){const j={'action':'list','tasks':[],'note':'No\x20local\x20accounts\x20found\x20—\x20create\x20or\x20import\x20an\x20account\x20first.'};return{'content':[{'type':'text','text':JSON['stringify']({'result':j})}],'structuredContent':{'result':j}};}const f=await query_events({'type':'ProgressEvent','order':'descending','limit':b*0x3,'no_cache':d,'network':c}),g=[...new Set((f?.['data']??[])['map'](k=>k?.['progress'])['filter'](k=>typeof k==='string'&&k['startsWith']('0x')))],h=[];for(const k of g){const l=await buildWorkflowTask(k,e,c,d);if(l)h['push'](l);if(h['length']>=b)break;}const i={'action':'list','tasks':h};return{'content':[{'type':'text','text':JSON['stringify']({'result':i})}],'structuredContent':{'result':i}};}async function handleOperate(a){const b={'operation_type':'progress','data':{'object':a['progress'],'operate':a['operate']},'env':{'account':a['account']??'','network':a['network'],'no_cache':a['no_cache']}};return await handleOnchainOperations(b);}export async function handleWorkflowOperation(a){const b=strictParse(WorkflowOperationInputSchema,a,'workflow_operation\x20input');if(b['action']==='list')return await handleList(b);return await handleOperate(b);}
@@ -1,2 +1,4 @@
1
1
  import type { ToolDispatchResult } from "../types.js";
2
+ export declare function workspaceReadmeContent(): string;
3
+ export declare function ensureWorkspaceReadme(): string;
2
4
  export declare function handleWorkspaceOperation(args: unknown): Promise<ToolDispatchResult>;
@@ -1 +1 @@
1
- import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,rmSync,statSync,cpSync,renameSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{getWowokWorkspaceDir}from'@wowok/wowok';import{strictParse}from'../../schema/index.js';import{WorkspaceOperationInputSchema}from'../../schema/workspace/index.js';const WORKSPACE_ROOT=getWowokWorkspaceDir();function resolveWorkspacePath(a){const b=resolve(WORKSPACE_ROOT,a);if(b!==WORKSPACE_ROOT&&!b['startsWith'](WORKSPACE_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20workspace\x20root');return b;}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}export async function handleWorkspaceOperation(a){const b=strictParse(WorkspaceOperationInputSchema,a,'workspace_operation\x20input');mkdirSync(WORKSPACE_ROOT,{'recursive':!![]});let c;switch(b['action']){case'resolve':c={'action':'resolve','dir':WORKSPACE_ROOT};break;case'list':{const d=[];listRecursive(WORKSPACE_ROOT,WORKSPACE_ROOT,d),c={'action':'list','dir':WORKSPACE_ROOT,'files':d};break;}case'read':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read\x27');const e=resolveWorkspacePath(b['path']);if(!existsSync(e))throw new Error('file\x20not\x20found:\x20'+b['path']);c={'action':'read','path':e,'content':readFileSync(e,'utf-8')};break;}case'write':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write\x27');const f=resolveWorkspacePath(b['path']);mkdirSync(dirname(f),{'recursive':!![]}),writeFileSync(f,b['content'],'utf-8'),c={'action':'write','path':f,'ok':!![]};break;}case'delete':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete\x27');const g=resolveWorkspacePath(b['path']);if(!existsSync(g))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(g,{'recursive':!![],'force':!![]}),c={'action':'delete','path':g,'ok':!![]};break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const h=resolveWorkspacePath(b['path']);if(existsSync(h))throw new Error('file\x20already\x20exists:\x20'+b['path']);mkdirSync(dirname(h),{'recursive':!![]}),writeFileSync(h,b['content']??'','utf-8'),c={'action':'create_file','path':h,'ok':!![]};break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const i=resolveWorkspacePath(b['path']);mkdirSync(i,{'recursive':!![]}),c={'action':'create_dir','path':i,'ok':!![]};break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const j=resolveWorkspacePath(b['from']);let k=resolveWorkspacePath(b['to']);if(!existsSync(j))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(k)&&statSync(k)['isDirectory']()&&(k=join(k,basename(j)));}catch{}if(k===j)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');mkdirSync(dirname(k),{'recursive':!![]}),cpSync(j,k,{'recursive':!![],'force':!![]}),c={'action':'copy','from':j,'to':k,'ok':!![]};break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');const l=resolveWorkspacePath(b['from']);let m=resolveWorkspacePath(b['to']);if(!existsSync(l))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(m)&&statSync(m)['isDirectory']()&&(m=join(m,basename(l)));}catch{}if(m===l)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(m),{'recursive':!![]}),renameSync(l,m),c={'action':b['action'],'from':l,'to':m,'ok':!![]};break;}default:throw new Error('Unknown\x20workspace_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}
1
+ import{readdirSync,readFileSync,writeFileSync,existsSync,mkdirSync,rmSync,statSync,cpSync,renameSync}from'node:fs';import{join,relative,resolve,sep,dirname,basename}from'node:path';import{getWowokWorkspaceDir}from'@wowok/wowok';import{strictParse}from'../../schema/index.js';import{WorkspaceOperationInputSchema}from'../../schema/workspace/index.js';const WORKSPACE_ROOT=getWowokWorkspaceDir();function resolveWorkspacePath(a){const b=resolve(WORKSPACE_ROOT,a);if(b!==WORKSPACE_ROOT&&!b['startsWith'](WORKSPACE_ROOT+sep))throw new Error('path\x20\x27'+a+'\x27\x20escapes\x20the\x20workspace\x20root');return b;}export function workspaceReadmeContent(){return['#\x20WoWok\x20Workspace','','>\x20This\x20folder\x20is\x20your\x20WoWok\x20file\x20workspace.\x20Files\x20here\x20are\x20managed\x20by\x20the','>\x20`workspace_operation`\x20tool\x20and\x20can\x20be\x20selected\x20as\x20AI\x20context\x20in\x20the\x20chat.','','##\x20What\x20lives\x20here','','-\x20**Generated\x20files**\x20—\x20`machineNode2file`\x20/\x20`guard2file`\x20exports\x20land\x20here','\x20\x20(`workspace/<kind>_<name>.<json|md>`)\x20for\x20review\x20before\x20deployment.','-\x20**WIP\x20/\x20WTS**\x20—\x20`generate_wip`,\x20`sign_wip`\x20/\x20`sign_wts`\x20and\x20`generate_wts`','\x20\x20write\x20their\x20outputs\x20here\x20(`wip_<ts>.wip`,\x20`signed_<name>`,\x20`wts/`).','-\x20**Your\x20documents**\x20—\x20anything\x20you\x20want\x20the\x20AI\x20to\x20read\x20as\x20context.','','##\x20How\x20to\x20use\x20it','','1.\x20Click\x20a\x20file\x20in\x20the\x20Workspace\x20drawer\x20to\x20load\x20it\x20into\x20the\x20chat\x20as\x20context.','2.\x20Ask\x20the\x20AI\x20to\x20generate\x20a\x20Machine\x20or\x20Guard\x20—\x20the\x20export\x20is\x20saved\x20here.','3.\x20Use\x20`workspace_operation`\x20(list\x20/\x20read\x20/\x20write\x20/\x20create\x20/\x20delete\x20/\x20move\x20/','\x20\x20\x20rename)\x20from\x20the\x20client\x20or\x20an\x20MCP-capable\x20AI\x20client.','','Everything\x20is\x20local\x20to\x20this\x20device\x20—\x20nothing\x20here\x20touches\x20the\x20chain.']['join']('\x0a');}export function ensureWorkspaceReadme(){mkdirSync(WORKSPACE_ROOT,{'recursive':!![]});const a=join(WORKSPACE_ROOT,'README.md');return!existsSync(a)&&writeFileSync(a,workspaceReadmeContent(),'utf-8'),a;}function listRecursive(a,b,c,d=0x0){if(d>0x8)return;let f;try{f=readdirSync(a,{'withFileTypes':!![]});}catch{return;}for(const g of f){const h=join(a,g['name']),i=relative(b,h)['split'](sep)['join']('/');let j=0x0,k=0x0;try{const l=statSync(h);k=l['size'],j=l['mtimeMs'];}catch{}g['isDirectory']()?(c['push']({'path':i,'is_dir':!![],'size':0x0,'mtime':j}),listRecursive(h,b,c,d+0x1)):c['push']({'path':i,'is_dir':![],'size':k,'mtime':j});}}export async function handleWorkspaceOperation(a){const b=strictParse(WorkspaceOperationInputSchema,a,'workspace_operation\x20input');mkdirSync(WORKSPACE_ROOT,{'recursive':!![]}),ensureWorkspaceReadme();let c;switch(b['action']){case'resolve':c={'action':'resolve','dir':WORKSPACE_ROOT};break;case'list':{const d=[];listRecursive(WORKSPACE_ROOT,WORKSPACE_ROOT,d),c={'action':'list','dir':WORKSPACE_ROOT,'files':d};break;}case'read':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27read\x27');const e=resolveWorkspacePath(b['path']);if(!existsSync(e))throw new Error('file\x20not\x20found:\x20'+b['path']);c={'action':'read','path':e,'content':readFileSync(e,'utf-8')};break;}case'write':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27write\x27');if(b['content']===undefined)throw new Error('\x27content\x27\x20is\x20required\x20for\x20action=\x27write\x27');const f=resolveWorkspacePath(b['path']);mkdirSync(dirname(f),{'recursive':!![]}),writeFileSync(f,b['content'],'utf-8'),c={'action':'write','path':f,'ok':!![]};break;}case'delete':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27delete\x27');const g=resolveWorkspacePath(b['path']);if(!existsSync(g))throw new Error('file\x20not\x20found:\x20'+b['path']);rmSync(g,{'recursive':!![],'force':!![]}),c={'action':'delete','path':g,'ok':!![]};break;}case'create_file':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_file\x27');const h=resolveWorkspacePath(b['path']);if(existsSync(h))throw new Error('file\x20already\x20exists:\x20'+b['path']);mkdirSync(dirname(h),{'recursive':!![]}),writeFileSync(h,b['content']??'','utf-8'),c={'action':'create_file','path':h,'ok':!![]};break;}case'create_dir':{if(!b['path'])throw new Error('\x27path\x27\x20is\x20required\x20for\x20action=\x27create_dir\x27');const i=resolveWorkspacePath(b['path']);mkdirSync(i,{'recursive':!![]}),c={'action':'create_dir','path':i,'ok':!![]};break;}case'copy':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27copy\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27copy\x27');const j=resolveWorkspacePath(b['from']);let k=resolveWorkspacePath(b['to']);if(!existsSync(j))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(k)&&statSync(k)['isDirectory']()&&(k=join(k,basename(j)));}catch{}if(k===j)throw new Error('\x27copy\x27\x20cannot\x20copy\x20a\x20file\x20onto\x20itself');mkdirSync(dirname(k),{'recursive':!![]}),cpSync(j,k,{'recursive':!![],'force':!![]}),c={'action':'copy','from':j,'to':k,'ok':!![]};break;}case'move':case'rename':{if(!b['from'])throw new Error('\x27from\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');if(!b['to'])throw new Error('\x27to\x27\x20is\x20required\x20for\x20action=\x27'+b['action']+'\x27');const l=resolveWorkspacePath(b['from']);let m=resolveWorkspacePath(b['to']);if(!existsSync(l))throw new Error('source\x20not\x20found:\x20'+b['from']);try{existsSync(m)&&statSync(m)['isDirectory']()&&(m=join(m,basename(l)));}catch{}if(m===l)throw new Error('\x27'+b['action']+'\x27\x20cannot\x20move\x20onto\x20itself');mkdirSync(dirname(m),{'recursive':!![]}),renameSync(l,m),c={'action':b['action'],'from':l,'to':m,'ok':!![]};break;}default:throw new Error('Unknown\x20workspace_operation\x20action:\x20'+String(b['action']));}return{'content':[{'type':'text','text':JSON['stringify']({'result':c})}],'structuredContent':{'result':c}};}