pandora-cli-skills 1.1.129 → 1.1.131

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 (39) hide show
  1. package/benchmarks/latest/core-bundle.json +77 -19
  2. package/benchmarks/latest/core-history.json +61 -3
  3. package/benchmarks/latest/core-report.json +15 -15
  4. package/benchmarks/locks/core.lock.json +13 -13
  5. package/cli/lib/fees_command_service.cjs +5 -2
  6. package/cli/lib/lp_command_service.cjs +15 -18
  7. package/cli/lib/market_admin_service.cjs +10 -34
  8. package/cli/lib/markets_create_command_service.cjs +2 -4
  9. package/cli/lib/mcp_server_service.cjs +0 -2
  10. package/cli/lib/mirror_command_service.cjs +43 -3
  11. package/cli/lib/mirror_handlers/hedge.cjs +55 -2
  12. package/cli/lib/mirror_hedge/status.cjs +199 -3
  13. package/cli/lib/mirror_hedge_daemon_service.cjs +14 -13
  14. package/cli/lib/mirror_hedge_service.cjs +208 -54
  15. package/cli/lib/mirror_hedge_state_store.cjs +8 -7
  16. package/cli/lib/mirror_sizing_service.cjs +7 -5
  17. package/cli/lib/mirror_state_store.cjs +2 -0
  18. package/cli/lib/mirror_sync_service.cjs +8 -20
  19. package/cli/lib/model_command_service.cjs +9 -7
  20. package/cli/lib/operation_service.cjs +13 -8
  21. package/cli/lib/operations_command_service.cjs +29 -71
  22. package/cli/lib/parsers/polymarket_flags.cjs +7 -0
  23. package/cli/lib/policy_command_service.cjs +25 -3
  24. package/cli/lib/policy_profile_guidance_service.cjs +9 -3
  25. package/cli/lib/polymarket_command_service.cjs +20 -83
  26. package/cli/lib/polymarket_ops_service.cjs +5 -2
  27. package/cli/lib/profile_command_service.cjs +23 -3
  28. package/cli/lib/recipe_command_service.cjs +23 -47
  29. package/cli/lib/risk_command_service.cjs +34 -62
  30. package/cli/lib/trade_command_service.cjs +9 -3
  31. package/cli/lib/watch_command_service.cjs +17 -14
  32. package/cli/lib/webhook_service.cjs +32 -28
  33. package/docs/benchmarks/history.json +61 -3
  34. package/package.json +3 -3
  35. package/sdk/generated/contract-registry.json +16 -18
  36. package/sdk/generated/manifest.json +6 -6
  37. package/sdk/python/pandora_agent/generated/manifest.json +4 -4
  38. package/sdk/typescript/generated/manifest.json +4 -4
  39. package/docs/proving-ground/README.md +0 -70
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "suite": "core",
4
- "generatedAt": "2026-04-05T22:25:33.752Z",
4
+ "generatedAt": "2026-04-08T21:39:13.171Z",
5
5
  "package": {
6
6
  "name": "pandora-cli-skills",
7
- "version": "1.1.129"
7
+ "version": "1.1.131"
8
8
  },
9
9
  "assets": {
10
10
  "reportPath": "benchmarks/latest/core-report.json",
11
11
  "lockPath": "benchmarks/locks/core.lock.json",
12
12
  "historyPath": "benchmarks/latest/core-history.json",
13
13
  "docsHistoryPath": "docs/benchmarks/history.json",
14
- "reportSha256": "94caa32a45f24ebaf36ade64d92b642e36fa333be330b4e70502c606415ad0be",
15
- "lockSha256": "7df51d1d695ce33ac0dc1292766d9f62d4ea224b30054613e93ef83d11626000"
14
+ "reportSha256": "32726ccc0c83e9cdb0f776ddd98aab2ac65d4204b44044e1fc4989e0061decef",
15
+ "lockSha256": "1fb38a069007222a4b2ce11d1951d976ac23373174a19a7871cc021e7e2d8b21"
16
16
  },
17
17
  "latest": {
18
18
  "summary": {
@@ -144,26 +144,26 @@
144
144
  ]
145
145
  },
146
146
  "runtime": {
147
- "packageVersion": "1.1.129"
147
+ "packageVersion": "1.1.131"
148
148
  },
149
149
  "contractLock": {
150
- "capabilitiesLocalHash": "99c1518dac4d608f9ff652d3945070c90fedbaf49838f492714a2e109163c885",
151
- "capabilitiesRemoteTemplateHash": "b3f2aef2a799653a525d50f0902447ae5ed90cdfbcbae02627ef8e964e47556a",
150
+ "capabilitiesLocalHash": "3cb11e1fcb9b3f3c1a4fef2e2450cc02d6c48dc162d0e490a7e21be784878502",
151
+ "capabilitiesRemoteTemplateHash": "0c7c1934577a503a4f318150d36ee5742902982bb674557c9a260ef6bca54fb6",
152
152
  "commandDescriptorVersion": "1.4.3",
153
153
  "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
154
154
  "documentationRegistryHash": "eebe2a201c559e44b45d1a780713f6b302f56726a03a4a57538fcf6762530826",
155
155
  "generatedArtifactHashes": {
156
156
  "generatedCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
157
- "generatedContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
158
- "generatedManifest": "bbd5d4175d871062c4c148f912baa6523dce57208dd25db98daabb434aace14f",
157
+ "generatedContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
158
+ "generatedManifest": "218d766ace4b3c4b8bd538effd900da4991607a84a11bcc86d155de41bb876bc",
159
159
  "generatedMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6",
160
160
  "pyCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
161
- "pyContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
162
- "pyManifest": "ad8226fc146d310e85223d86640d7dda04918f0f6b24050084202cab51c56661",
161
+ "pyContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
162
+ "pyManifest": "1195f54e990cdfaf1dae1f826c96f3be2bf20a28f219b48ee8abdb1c94c8daf3",
163
163
  "pyMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6",
164
164
  "tsCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
165
- "tsContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
166
- "tsManifest": "e75660c84753fc91de7b54c5f9adcb35df9a4535966bea3e5d7545e009229e99",
165
+ "tsContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
166
+ "tsManifest": "e788d09341d814cfd673d647c95d27bcb35e3fcc893621632966a1abdc2cdfa4",
167
167
  "tsMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6"
168
168
  },
169
169
  "generatedManifestCommandDescriptorVersion": "1.4.3",
@@ -179,7 +179,7 @@
179
179
  "principalTemplatesHash": "525835bb3c4710fa326e662e8a961e74de1798f4fb1bccb2a00be557ed037740",
180
180
  "routedTopLevelHash": "02e98ac94f1eadbeded065bef652f8a917f108a8a08726ad7163503cc1b3384d",
181
181
  "topLevelHash": "04e58344eaec2c14dfa336b13eff952a584c7c5355d90775c3bc8336ab0752ee",
182
- "trustDistributionHash": "3a926813503a3638bd98ce9689077494031ba758b0a322c4218815935d105459"
182
+ "trustDistributionHash": "71850c223646b5eb0c34566080e1051515774820cd08b19ab7dcfe7757ed4d08"
183
183
  },
184
184
  "generatedManifestVersion": "1.0.0",
185
185
  "registryDigest": {
@@ -193,19 +193,77 @@
193
193
  "principalTemplatesHash": "525835bb3c4710fa326e662e8a961e74de1798f4fb1bccb2a00be557ed037740",
194
194
  "routedTopLevelHash": "02e98ac94f1eadbeded065bef652f8a917f108a8a08726ad7163503cc1b3384d",
195
195
  "topLevelHash": "04e58344eaec2c14dfa336b13eff952a584c7c5355d90775c3bc8336ab0752ee",
196
- "trustDistributionHash": "3a926813503a3638bd98ce9689077494031ba758b0a322c4218815935d105459"
196
+ "trustDistributionHash": "71850c223646b5eb0c34566080e1051515774820cd08b19ab7dcfe7757ed4d08"
197
197
  },
198
- "schemaHash": "491cbbceb1c302dd6c9fa5a60509b74c46a17d1be2eb0dbe5522cd141d4b0d18"
198
+ "schemaHash": "0105b3c948c1481f9ca566751d41f8ad715f92196cc5afbf294c3c098fa20788"
199
199
  },
200
200
  "contractLockMatchesExpected": true
201
201
  },
202
202
  "history": {
203
203
  "schemaVersion": "1.0.0",
204
204
  "suite": "core",
205
- "generatedAt": "2026-04-05T22:25:33.752Z",
206
- "latestVersion": "1.1.129",
207
- "latestGeneratedAt": "2026-04-05T22:25:33.752Z",
205
+ "generatedAt": "2026-04-08T21:39:13.171Z",
206
+ "latestVersion": "1.1.131",
207
+ "latestGeneratedAt": "2026-04-08T21:39:13.171Z",
208
208
  "entries": [
209
+ {
210
+ "schemaVersion": "1.0.0",
211
+ "suite": "core",
212
+ "packageName": "pandora-cli-skills",
213
+ "version": "1.1.131",
214
+ "packageVersion": "1.1.131",
215
+ "generatedAt": "2026-04-08T21:39:13.171Z",
216
+ "summary": {
217
+ "weightedScore": 100,
218
+ "overallPass": true,
219
+ "scenarioCount": 19,
220
+ "passedCount": 19,
221
+ "failedCount": 0,
222
+ "failedParityGroupCount": 0
223
+ },
224
+ "weightedScore": 100,
225
+ "overallPass": true,
226
+ "scenarioCount": 19,
227
+ "passedCount": 19,
228
+ "failedCount": 0,
229
+ "failedParityGroupCount": 0,
230
+ "contractLockMatchesExpected": true,
231
+ "parityFailedGroups": [],
232
+ "descriptorHash": "664970d781e477a11a683bc265cbd7fc8b0cf9576b50da49ab301b773e38b47d",
233
+ "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
234
+ "reportSha256": "32726ccc0c83e9cdb0f776ddd98aab2ac65d4204b44044e1fc4989e0061decef",
235
+ "lockSha256": "1fb38a069007222a4b2ce11d1951d976ac23373174a19a7871cc021e7e2d8b21",
236
+ "lockSchemaVersion": "1.0.0"
237
+ },
238
+ {
239
+ "schemaVersion": "1.0.0",
240
+ "suite": "core",
241
+ "packageName": "pandora-cli-skills",
242
+ "version": "1.1.130",
243
+ "packageVersion": "1.1.130",
244
+ "generatedAt": "2026-04-06T21:49:08.476Z",
245
+ "summary": {
246
+ "weightedScore": 100,
247
+ "overallPass": true,
248
+ "scenarioCount": 19,
249
+ "passedCount": 19,
250
+ "failedCount": 0,
251
+ "failedParityGroupCount": 0
252
+ },
253
+ "weightedScore": 100,
254
+ "overallPass": true,
255
+ "scenarioCount": 19,
256
+ "passedCount": 19,
257
+ "failedCount": 0,
258
+ "failedParityGroupCount": 0,
259
+ "contractLockMatchesExpected": true,
260
+ "parityFailedGroups": [],
261
+ "descriptorHash": "664970d781e477a11a683bc265cbd7fc8b0cf9576b50da49ab301b773e38b47d",
262
+ "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
263
+ "reportSha256": "2e3c414a7935e15d62791ccf837573237eca1904b478725c93cfe6d08b609469",
264
+ "lockSha256": "66b0d4e052a69bc225e43c40e1d8c5eacab4b8d425dd5e4a57f787ffd7b921e8",
265
+ "lockSchemaVersion": "1.0.0"
266
+ },
209
267
  {
210
268
  "schemaVersion": "1.0.0",
211
269
  "suite": "core",
@@ -1,10 +1,68 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
3
  "suite": "core",
4
- "generatedAt": "2026-04-05T22:25:33.752Z",
5
- "latestVersion": "1.1.129",
6
- "latestGeneratedAt": "2026-04-05T22:25:33.752Z",
4
+ "generatedAt": "2026-04-08T21:39:13.171Z",
5
+ "latestVersion": "1.1.131",
6
+ "latestGeneratedAt": "2026-04-08T21:39:13.171Z",
7
7
  "entries": [
8
+ {
9
+ "schemaVersion": "1.0.0",
10
+ "suite": "core",
11
+ "packageName": "pandora-cli-skills",
12
+ "version": "1.1.131",
13
+ "packageVersion": "1.1.131",
14
+ "generatedAt": "2026-04-08T21:39:13.171Z",
15
+ "summary": {
16
+ "weightedScore": 100,
17
+ "overallPass": true,
18
+ "scenarioCount": 19,
19
+ "passedCount": 19,
20
+ "failedCount": 0,
21
+ "failedParityGroupCount": 0
22
+ },
23
+ "weightedScore": 100,
24
+ "overallPass": true,
25
+ "scenarioCount": 19,
26
+ "passedCount": 19,
27
+ "failedCount": 0,
28
+ "failedParityGroupCount": 0,
29
+ "contractLockMatchesExpected": true,
30
+ "parityFailedGroups": [],
31
+ "descriptorHash": "664970d781e477a11a683bc265cbd7fc8b0cf9576b50da49ab301b773e38b47d",
32
+ "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
33
+ "reportSha256": "32726ccc0c83e9cdb0f776ddd98aab2ac65d4204b44044e1fc4989e0061decef",
34
+ "lockSha256": "1fb38a069007222a4b2ce11d1951d976ac23373174a19a7871cc021e7e2d8b21",
35
+ "lockSchemaVersion": "1.0.0"
36
+ },
37
+ {
38
+ "schemaVersion": "1.0.0",
39
+ "suite": "core",
40
+ "packageName": "pandora-cli-skills",
41
+ "version": "1.1.130",
42
+ "packageVersion": "1.1.130",
43
+ "generatedAt": "2026-04-06T21:49:08.476Z",
44
+ "summary": {
45
+ "weightedScore": 100,
46
+ "overallPass": true,
47
+ "scenarioCount": 19,
48
+ "passedCount": 19,
49
+ "failedCount": 0,
50
+ "failedParityGroupCount": 0
51
+ },
52
+ "weightedScore": 100,
53
+ "overallPass": true,
54
+ "scenarioCount": 19,
55
+ "passedCount": 19,
56
+ "failedCount": 0,
57
+ "failedParityGroupCount": 0,
58
+ "contractLockMatchesExpected": true,
59
+ "parityFailedGroups": [],
60
+ "descriptorHash": "664970d781e477a11a683bc265cbd7fc8b0cf9576b50da49ab301b773e38b47d",
61
+ "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
62
+ "reportSha256": "2e3c414a7935e15d62791ccf837573237eca1904b478725c93cfe6d08b609469",
63
+ "lockSha256": "66b0d4e052a69bc225e43c40e1d8c5eacab4b8d425dd5e4a57f787ffd7b921e8",
64
+ "lockSchemaVersion": "1.0.0"
65
+ },
8
66
  {
9
67
  "schemaVersion": "1.0.0",
10
68
  "suite": "core",
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "contractLock": {
3
- "capabilitiesLocalHash": "99c1518dac4d608f9ff652d3945070c90fedbaf49838f492714a2e109163c885",
4
- "capabilitiesRemoteTemplateHash": "b3f2aef2a799653a525d50f0902447ae5ed90cdfbcbae02627ef8e964e47556a",
3
+ "capabilitiesLocalHash": "3cb11e1fcb9b3f3c1a4fef2e2450cc02d6c48dc162d0e490a7e21be784878502",
4
+ "capabilitiesRemoteTemplateHash": "0c7c1934577a503a4f318150d36ee5742902982bb674557c9a260ef6bca54fb6",
5
5
  "commandDescriptorVersion": "1.4.3",
6
6
  "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
7
7
  "documentationRegistryHash": "eebe2a201c559e44b45d1a780713f6b302f56726a03a4a57538fcf6762530826",
8
8
  "generatedArtifactHashes": {
9
9
  "generatedCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
10
- "generatedContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
11
- "generatedManifest": "bbd5d4175d871062c4c148f912baa6523dce57208dd25db98daabb434aace14f",
10
+ "generatedContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
11
+ "generatedManifest": "218d766ace4b3c4b8bd538effd900da4991607a84a11bcc86d155de41bb876bc",
12
12
  "generatedMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6",
13
13
  "pyCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
14
- "pyContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
15
- "pyManifest": "ad8226fc146d310e85223d86640d7dda04918f0f6b24050084202cab51c56661",
14
+ "pyContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
15
+ "pyManifest": "1195f54e990cdfaf1dae1f826c96f3be2bf20a28f219b48ee8abdb1c94c8daf3",
16
16
  "pyMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6",
17
17
  "tsCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
18
- "tsContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
19
- "tsManifest": "e75660c84753fc91de7b54c5f9adcb35df9a4535966bea3e5d7545e009229e99",
18
+ "tsContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
19
+ "tsManifest": "e788d09341d814cfd673d647c95d27bcb35e3fcc893621632966a1abdc2cdfa4",
20
20
  "tsMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6"
21
21
  },
22
22
  "generatedManifestCommandDescriptorVersion": "1.4.3",
@@ -32,7 +32,7 @@
32
32
  "principalTemplatesHash": "525835bb3c4710fa326e662e8a961e74de1798f4fb1bccb2a00be557ed037740",
33
33
  "routedTopLevelHash": "02e98ac94f1eadbeded065bef652f8a917f108a8a08726ad7163503cc1b3384d",
34
34
  "topLevelHash": "04e58344eaec2c14dfa336b13eff952a584c7c5355d90775c3bc8336ab0752ee",
35
- "trustDistributionHash": "3a926813503a3638bd98ce9689077494031ba758b0a322c4218815935d105459"
35
+ "trustDistributionHash": "71850c223646b5eb0c34566080e1051515774820cd08b19ab7dcfe7757ed4d08"
36
36
  },
37
37
  "generatedManifestVersion": "1.0.0",
38
38
  "registryDigest": {
@@ -46,9 +46,9 @@
46
46
  "principalTemplatesHash": "525835bb3c4710fa326e662e8a961e74de1798f4fb1bccb2a00be557ed037740",
47
47
  "routedTopLevelHash": "02e98ac94f1eadbeded065bef652f8a917f108a8a08726ad7163503cc1b3384d",
48
48
  "topLevelHash": "04e58344eaec2c14dfa336b13eff952a584c7c5355d90775c3bc8336ab0752ee",
49
- "trustDistributionHash": "3a926813503a3638bd98ce9689077494031ba758b0a322c4218815935d105459"
49
+ "trustDistributionHash": "71850c223646b5eb0c34566080e1051515774820cd08b19ab7dcfe7757ed4d08"
50
50
  },
51
- "schemaHash": "491cbbceb1c302dd6c9fa5a60509b74c46a17d1be2eb0dbe5522cd141d4b0d18"
51
+ "schemaHash": "0105b3c948c1481f9ca566751d41f8ad715f92196cc5afbf294c3c098fa20788"
52
52
  },
53
53
  "contractLockMatchesExpected": true,
54
54
  "contractLockMismatches": [],
@@ -284,7 +284,7 @@
284
284
  ]
285
285
  },
286
286
  "publication": {
287
- "contractLockHash": "561a99c5164b8dccfbe6ad83c36531462e46a0ae35b5332ad17e1f11f5b5ccae",
287
+ "contractLockHash": "ca8a6dc441b6dce243db7ee4d7ec599b1941bd77e1af7d3dba4df68ac03f2117",
288
288
  "contractLockStatus": "locked",
289
289
  "deterministic": true,
290
290
  "expectedScenarioCount": 19,
@@ -293,12 +293,12 @@
293
293
  "minimumWeightedScore": 95,
294
294
  "releaseGatePass": true,
295
295
  "reportPath": "benchmarks/latest/core-report.json",
296
- "scorecardHash": "5a014e14aa2503889b833507f421a4b1d208d62d2f03c5c34ba34a3d6d450058",
297
- "suiteLockHash": "7df51d1d695ce33ac0dc1292766d9f62d4ea224b30054613e93ef83d11626000",
296
+ "scorecardHash": "70bf62a4d3f53c58d8a4b5f32a957a7914234c4e2f7dba2df8126a7e99e3e993",
297
+ "suiteLockHash": "1fb38a069007222a4b2ce11d1951d976ac23373174a19a7871cc021e7e2d8b21",
298
298
  "suiteLockPath": "benchmarks/locks/core.lock.json"
299
299
  },
300
300
  "runtime": {
301
- "packageVersion": "1.1.129"
301
+ "packageVersion": "1.1.131"
302
302
  },
303
303
  "scenarios": [
304
304
  {
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "contractLock": {
3
- "capabilitiesLocalHash": "99c1518dac4d608f9ff652d3945070c90fedbaf49838f492714a2e109163c885",
4
- "capabilitiesRemoteTemplateHash": "b3f2aef2a799653a525d50f0902447ae5ed90cdfbcbae02627ef8e964e47556a",
3
+ "capabilitiesLocalHash": "3cb11e1fcb9b3f3c1a4fef2e2450cc02d6c48dc162d0e490a7e21be784878502",
4
+ "capabilitiesRemoteTemplateHash": "0c7c1934577a503a4f318150d36ee5742902982bb674557c9a260ef6bca54fb6",
5
5
  "commandDescriptorVersion": "1.4.3",
6
6
  "documentationContentHash": "cb130209bc40f5bdb9fccbd55ad07b6ec1fefbc95ab0d11fe6d50ef8eb6fa566",
7
7
  "documentationRegistryHash": "eebe2a201c559e44b45d1a780713f6b302f56726a03a4a57538fcf6762530826",
8
8
  "generatedArtifactHashes": {
9
9
  "generatedCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
10
- "generatedContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
11
- "generatedManifest": "bbd5d4175d871062c4c148f912baa6523dce57208dd25db98daabb434aace14f",
10
+ "generatedContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
11
+ "generatedManifest": "218d766ace4b3c4b8bd538effd900da4991607a84a11bcc86d155de41bb876bc",
12
12
  "generatedMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6",
13
13
  "pyCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
14
- "pyContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
15
- "pyManifest": "ad8226fc146d310e85223d86640d7dda04918f0f6b24050084202cab51c56661",
14
+ "pyContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
15
+ "pyManifest": "1195f54e990cdfaf1dae1f826c96f3be2bf20a28f219b48ee8abdb1c94c8daf3",
16
16
  "pyMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6",
17
17
  "tsCommandDescriptors": "60ab2ae91d950b5639093413fb1806d979f024203ffad0b686705a94d5b06e07",
18
- "tsContractRegistry": "fe8b9a3b82f1490b37448a109c4f3f0ff4fbf4ee7c90902d7e79edf60612498b",
19
- "tsManifest": "e75660c84753fc91de7b54c5f9adcb35df9a4535966bea3e5d7545e009229e99",
18
+ "tsContractRegistry": "6546a216e3de8c9df871454fdae4d3c2406aae87298164193fd964ef46eb2fad",
19
+ "tsManifest": "e788d09341d814cfd673d647c95d27bcb35e3fcc893621632966a1abdc2cdfa4",
20
20
  "tsMcpToolDefinitions": "6dc62098f1c71b3816d75115ab5e31734484d9bc19ecff0bce32e7ab50fc00d6"
21
21
  },
22
22
  "generatedManifestCommandDescriptorVersion": "1.4.3",
@@ -32,7 +32,7 @@
32
32
  "principalTemplatesHash": "525835bb3c4710fa326e662e8a961e74de1798f4fb1bccb2a00be557ed037740",
33
33
  "routedTopLevelHash": "02e98ac94f1eadbeded065bef652f8a917f108a8a08726ad7163503cc1b3384d",
34
34
  "topLevelHash": "04e58344eaec2c14dfa336b13eff952a584c7c5355d90775c3bc8336ab0752ee",
35
- "trustDistributionHash": "3a926813503a3638bd98ce9689077494031ba758b0a322c4218815935d105459"
35
+ "trustDistributionHash": "71850c223646b5eb0c34566080e1051515774820cd08b19ab7dcfe7757ed4d08"
36
36
  },
37
37
  "generatedManifestVersion": "1.0.0",
38
38
  "registryDigest": {
@@ -46,16 +46,16 @@
46
46
  "principalTemplatesHash": "525835bb3c4710fa326e662e8a961e74de1798f4fb1bccb2a00be557ed037740",
47
47
  "routedTopLevelHash": "02e98ac94f1eadbeded065bef652f8a917f108a8a08726ad7163503cc1b3384d",
48
48
  "topLevelHash": "04e58344eaec2c14dfa336b13eff952a584c7c5355d90775c3bc8336ab0752ee",
49
- "trustDistributionHash": "3a926813503a3638bd98ce9689077494031ba758b0a322c4218815935d105459"
49
+ "trustDistributionHash": "71850c223646b5eb0c34566080e1051515774820cd08b19ab7dcfe7757ed4d08"
50
50
  },
51
- "schemaHash": "491cbbceb1c302dd6c9fa5a60509b74c46a17d1be2eb0dbe5522cd141d4b0d18"
51
+ "schemaHash": "0105b3c948c1481f9ca566751d41f8ad715f92196cc5afbf294c3c098fa20788"
52
52
  },
53
53
  "publication": {
54
- "contractLockHash": "561a99c5164b8dccfbe6ad83c36531462e46a0ae35b5332ad17e1f11f5b5ccae",
54
+ "contractLockHash": "ca8a6dc441b6dce243db7ee4d7ec599b1941bd77e1af7d3dba4df68ac03f2117",
55
55
  "deterministic": true,
56
56
  "grade": "release-grade",
57
57
  "kind": "benchmark-contract-lock",
58
- "lockDocumentHash": "090c19b306a285b417d7ea26034d5b558c3af6b4b7fcf66cc7eef45f886c0ee2",
58
+ "lockDocumentHash": "a9bf9449ca7e5af6ed1840f28e3b3be6018352d6f2a8a5596d39619a0aefc05a",
59
59
  "suiteLockPath": "benchmarks/locks/core.lock.json"
60
60
  },
61
61
  "schemaVersion": "1.0.0",
@@ -101,6 +101,9 @@ const FEE_MARKET_DISCOVERY_FIELDS = [
101
101
  'pollAddress',
102
102
  ];
103
103
 
104
+ const ADDRESS_PATTERN = /^0x[a-fA-F0-9]{40}$/;
105
+ const PRIVATE_KEY_PATTERN = /^0x[a-fA-F0-9]{64}$/;
106
+
104
107
  function requireDep(deps, name) {
105
108
  if (!deps || typeof deps[name] !== 'function') {
106
109
  throw new Error(`createRunFeesCommand requires deps.${name}()`);
@@ -110,11 +113,11 @@ function requireDep(deps, name) {
110
113
 
111
114
  function normalizeAddress(value) {
112
115
  const raw = String(value || '').trim();
113
- return /^0x[a-fA-F0-9]{40}$/.test(raw) ? raw : null;
116
+ return ADDRESS_PATTERN.test(raw) ? raw : null;
114
117
  }
115
118
 
116
119
  function isValidPrivateKey(value) {
117
- return /^0x[a-fA-F0-9]{64}$/.test(String(value || '').trim());
120
+ return PRIVATE_KEY_PATTERN.test(String(value || '').trim());
118
121
  }
119
122
 
120
123
  function requireFlagValue(args, index, flagName, CliError) {
@@ -1,3 +1,5 @@
1
+ const LP_USAGE = 'pandora [--output table|json] lp add|remove|positions|remove-all [--market-address <address>] [--wallet <address>] [--amount-usdc <n>] [--lp-tokens <n>|--all|--all-markets] [--dry-run|--execute] [--fork] [--fork-rpc-url <url>] [--fork-chain-id <id>] [--chain-id <id>] [--rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>] [--usdc <address>] [--deadline-seconds <n>] [--indexer-url <url>] [--timeout-ms <ms>]';
2
+
1
3
  function requireDep(deps, name) {
2
4
  if (!deps || typeof deps[name] !== 'function') {
3
5
  throw new Error(`createRunLpCommand requires deps.${name}()`);
@@ -6,7 +8,7 @@ function requireDep(deps, name) {
6
8
  }
7
9
 
8
10
  function normalizeOperationToken(value, options = {}) {
9
- if (value === undefined || value === null) return null;
11
+ if (value == null) return null;
10
12
  const trimmed = String(value).trim();
11
13
  if (!trimmed) return null;
12
14
  return options.preserveCase ? trimmed : trimmed.toLowerCase();
@@ -14,30 +16,26 @@ function normalizeOperationToken(value, options = {}) {
14
16
 
15
17
  function encodeOperationIdPart(value, options = {}) {
16
18
  const normalized = normalizeOperationToken(value, options);
17
- return normalized ? encodeURIComponent(normalized) : null;
19
+ return normalized && encodeURIComponent(normalized);
18
20
  }
19
21
 
20
22
  function normalizeOperationChainId(value) {
21
23
  const numeric = Number(value);
22
- if (!Number.isInteger(numeric) || numeric <= 0) {
23
- return null;
24
- }
25
- return numeric;
24
+ return numeric > 0 && Number.isInteger(numeric) ? numeric : null;
26
25
  }
27
26
 
28
27
  function inferOperationStatus(payload, defaultStatus) {
29
- if (payload && payload.mode === 'dry-run') {
28
+ if (payload?.mode === 'dry-run') {
30
29
  return 'planned';
31
30
  }
32
- const successCount = Number.isInteger(payload && payload.successCount) ? payload.successCount : null;
33
- const failureCount = Number.isInteger(payload && payload.failureCount) ? payload.failureCount : null;
34
- if (successCount === null || failureCount === null) {
31
+ const successCount = Number.isInteger(payload?.successCount) ? payload.successCount : null;
32
+ const failureCount = Number.isInteger(payload?.failureCount) ? payload.failureCount : null;
33
+ if (!Number.isInteger(successCount) || !Number.isInteger(failureCount)) {
35
34
  return defaultStatus;
36
35
  }
37
- if (failureCount === 0) {
38
- return successCount > 0 ? 'completed' : 'no-op';
39
- }
40
- return successCount > 0 ? 'partial' : 'failed';
36
+ return successCount > 0
37
+ ? (failureCount > 0 ? 'partial' : 'completed')
38
+ : (failureCount > 0 ? 'failed' : 'no-op');
41
39
  }
42
40
 
43
41
  function buildLpOperationContext(options = {}, payload = {}) {
@@ -46,7 +44,6 @@ function buildLpOperationContext(options = {}, payload = {}) {
46
44
  if (!allMarkets) {
47
45
  return null;
48
46
  }
49
-
50
47
  const wallet = normalizeOperationToken(payload.wallet || options.wallet);
51
48
  if (!wallet) {
52
49
  return null;
@@ -127,14 +124,14 @@ function createRunLpCommand(deps) {
127
124
  context.outputMode,
128
125
  'lp.help',
129
126
  commandHelpPayload(
130
- 'pandora [--output table|json] lp add|remove|positions [--market-address <address>] [--wallet <address>] [--amount-usdc <n>] [--lp-tokens <n>|--all|--all-markets] [--dry-run|--execute] [--fork] [--fork-rpc-url <url>] [--fork-chain-id <id>] [--chain-id <id>] [--rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>] [--usdc <address>] [--deadline-seconds <n>] [--indexer-url <url>] [--timeout-ms <ms>]\n'
131
- + 'pandora [--output table|json] lp simulate-remove --market-address <address> [--wallet <address>] [--lp-tokens <n>|--all] [--fork] [--fork-rpc-url <url>] [--fork-chain-id <id>] [--chain-id <id>] [--rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>]',
127
+ `${LP_USAGE}
128
+ pandora [--output table|json] lp simulate-remove --market-address <address> [--wallet <address>] [--lp-tokens <n>|--all] [--fork] [--fork-rpc-url <url>] [--fork-chain-id <id>] [--chain-id <id>] [--rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>]`,
132
129
  ),
133
130
  );
134
131
  } else {
135
132
  // eslint-disable-next-line no-console
136
133
  console.log(
137
- 'Usage: pandora [--output table|json] lp add|remove|positions [--market-address <address>] [--wallet <address>] [--amount-usdc <n>] [--lp-tokens <n>|--all|--all-markets] [--dry-run|--execute] [--fork] [--fork-rpc-url <url>] [--fork-chain-id <id>] [--chain-id <id>] [--rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>] [--usdc <address>] [--deadline-seconds <n>] [--indexer-url <url>] [--timeout-ms <ms>]\n'
134
+ `Usage: ${LP_USAGE}\n`
138
135
  + ' pandora [--output table|json] lp simulate-remove --market-address <address> [--wallet <address>] [--lp-tokens <n>|--all] [--fork] [--fork-rpc-url <url>] [--fork-chain-id <id>] [--chain-id <id>] [--rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>]',
139
136
  );
140
137
  }
@@ -83,49 +83,25 @@ const OUTCOME_TOKEN_REF_ABI_CANDIDATES = [
83
83
  ],
84
84
  ];
85
85
 
86
+ const CALC_REMOVE_LIQUIDITY_BASE = {
87
+ type: 'function',
88
+ name: 'calcRemoveLiquidity',
89
+ stateMutability: 'view',
90
+ inputs: [{ name: 'sharesToBurn', type: 'uint256' }],
91
+ };
92
+
86
93
  const CALC_REMOVE_LIQUIDITY_ABI_CANDIDATES = [
87
94
  {
88
95
  order: 'collateral-yes-no',
89
- abi: [
90
- {
91
- type: 'function',
92
- name: 'calcRemoveLiquidity',
93
- stateMutability: 'view',
94
- inputs: [{ name: 'sharesToBurn', type: 'uint256' }],
95
- outputs: [
96
- { name: 'collateralOut', type: 'uint256' },
97
- { name: 'yesOut', type: 'uint256' },
98
- { name: 'noOut', type: 'uint256' },
99
- ],
100
- },
101
- ],
96
+ abi: [{ ...CALC_REMOVE_LIQUIDITY_BASE, outputs: [{ name: 'collateralOut', type: 'uint256' }, { name: 'yesOut', type: 'uint256' }, { name: 'noOut', type: 'uint256' }] }],
102
97
  },
103
98
  {
104
99
  order: 'collateral-yes',
105
- abi: [
106
- {
107
- type: 'function',
108
- name: 'calcRemoveLiquidity',
109
- stateMutability: 'view',
110
- inputs: [{ name: 'sharesToBurn', type: 'uint256' }],
111
- outputs: [
112
- { name: 'collateralOut', type: 'uint256' },
113
- { name: 'yesOut', type: 'uint256' },
114
- ],
115
- },
116
- ],
100
+ abi: [{ ...CALC_REMOVE_LIQUIDITY_BASE, outputs: [{ name: 'collateralOut', type: 'uint256' }, { name: 'yesOut', type: 'uint256' }] }],
117
101
  },
118
102
  {
119
103
  order: 'collateral-only',
120
- abi: [
121
- {
122
- type: 'function',
123
- name: 'calcRemoveLiquidity',
124
- stateMutability: 'view',
125
- inputs: [{ name: 'sharesToBurn', type: 'uint256' }],
126
- outputs: [{ name: 'collateralOut', type: 'uint256' }],
127
- },
128
- ],
104
+ abi: [{ ...CALC_REMOVE_LIQUIDITY_BASE, outputs: [{ name: 'collateralOut', type: 'uint256' }] }],
129
105
  },
130
106
  ];
131
107
 
@@ -43,10 +43,8 @@ function buildCreateHelp(commandHelpPayload) {
43
43
  'markets create run supports post-poll execution routing via --tx-route public|auto|flashbots-private|flashbots-bundle. auto chooses flashbots-private when no approval is needed and flashbots-bundle when approval is required.',
44
44
  'Validation tickets are bound to the exact final payload: question, rules, sources, target timestamp, liquidity, market type, fee/curve params, and distribution. Any change requires a fresh ticket.',
45
45
  'For AMM markets, prefer `--initial-yes-pct` / `--initial-no-pct` to set the opening probability directly.',
46
- 'Use `--yes-reserve-weight-pct` / `--no-reserve-weight-pct` only for explicit pool allocation. A 77/23 reserve split opens YES near 23/77.',
47
- 'Legacy `--distribution-yes-pct` / `--distribution-no-pct` are rejected with a migration error because they were ambiguous for AMM pricing.',
48
- 'If you omit AMM distribution flags, markets create seeds a balanced 50/50 pool.',
49
- 'Legacy `launch` remains script-native; `markets create` is the canonical agent-facing replacement.',
46
+ 'For AMM markets, `--initial-yes-pct` / `--initial-no-pct` set the opening YES probability directly. Use `--yes-reserve-weight-pct` / `--no-reserve-weight-pct` only for explicit pool allocation (e.g., 77/23 opens YES near 23/77). Omitting both seeds a balanced 50/50 pool. Legacy `--distribution-yes-pct` / `--distribution-no-pct` are rejected with a migration error.',
47
+
50
48
  ];
51
49
  return {
52
50
  command: 'markets.create.help',
@@ -40,12 +40,10 @@ function createRunMcpServer(options = {}) {
40
40
  notes: [
41
41
  'pandora mcp runs an MCP stdio server.',
42
42
  'pandora mcp http runs a remote streamable HTTP MCP gateway.',
43
- 'The HTTP gateway also exposes direct authenticated endpoints for /auth, /bootstrap, /capabilities, /schema, /tools, and /operations.',
44
43
  '--compact-tools / --code-mode exposes only search and execute over MCP for reduced tool-list token cost.',
45
44
  'Use gateway:auth:read to inspect configured principals and gateway:auth:write to rotate or revoke bearer tokens remotely.',
46
45
  '--auth-tokens-file enables multi-principal rotation and durable revocation without restarting the gateway.',
47
46
  'If no auth token is provided, the gateway generates one and stores it in ~/.pandora/mcp-http/auth-token.',
48
- 'Do not pass --output json to this command in normal MCP operation.',
49
47
  ],
50
48
  },
51
49
  };
@@ -4,10 +4,29 @@
4
4
  * @type {string}
5
5
  */
6
6
  const MIRROR_GO_USAGE =
7
- 'pandora [--output table|json] mirror go --polymarket-market-id <id>|--polymarket-slug <slug> [--liquidity-usdc <n>] [--fee-tier <500-50000>] [--max-imbalance <n>] [--arbiter <address>] [--category <id|name>] [--paper|--dry-run|--execute-live|--execute] [--auto-sync] [--sync-once] [--auto-resolve] [--auto-close] [--resolve-answer yes|no] [--resolve-reason <text>] [--resolve-watch-interval-ms <ms>] [--resolve-watch-timeout-ms <ms>] [--sync-interval-ms <ms>] [--drift-trigger-bps <n>] [--hedge-trigger-usdc <n>] [--hedge-ratio <n>] [--hedge-scope pool|total] [--skip-initial-hedge] [--rebalance-mode atomic|incremental] [--price-source on-chain|indexer] [--rebalance-route public|auto|flashbots-private|flashbots-bundle] [--rebalance-route-fallback fail|public] [--flashbots-relay-url <url>] [--flashbots-auth-key <key>] [--flashbots-target-block-offset <n>] [--no-hedge] [--max-rebalance-usdc <n>] [--max-hedge-usdc <n>] [--max-open-exposure-usdc <amount>] [--max-trades-per-day <n>] [--cooldown-ms <ms>] [--depth-slippage-bps <n>] [--min-time-to-close-sec <n>] [--strict-close-time-delta] [--chain-id <id>] [--rpc-url <url>] [--polymarket-rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>] [--funder <address>] [--usdc <address>] [--oracle <address>] [--factory <address>] [--initial-yes-pct <pct>|--initial-no-pct <pct>] [--distribution-yes <parts>] [--distribution-no <parts>] [--yes-reserve-weight-pct <pct>] [--no-reserve-weight-pct <pct>] [--sources <url...>] [--validation-ticket <ticket>] [--target-timestamp <unix|iso>] [--manifest-file <path>] [--trust-deploy] [--skip-gate] [--polymarket-host <url>] [--polymarket-gamma-url <url>] [--polymarket-gamma-mock-url <url>] [--polymarket-mock-url <url>] [--with-rules] [--include-similarity] [--min-close-lead-seconds <n>] [--dotenv-path <path>]';
7
+ 'pandora [--output table|json] mirror go --polymarket-market-id <id>|--polymarket-slug <slug>'
8
+ + ' [--liquidity-usdc <n>] [--fee-tier <500-50000>] [--max-imbalance <n>] [--arbiter <address>]'
9
+ + ' [--category <id|name>] [--paper|--dry-run|--execute-live|--execute] [--auto-sync] [--sync-once]'
10
+ + ' [--auto-resolve] [--auto-close] [--resolve-answer yes|no] [--resolve-reason <text>]'
11
+ + ' [--resolve-watch-interval-ms <ms>] [--resolve-watch-timeout-ms <ms>] [--sync-interval-ms <ms>]'
12
+ + ' [--drift-trigger-bps <n>] [--hedge-trigger-usdc <n>] [--hedge-ratio <n>] [--hedge-scope pool|total]'
13
+ + ' [--skip-initial-hedge] [--rebalance-mode atomic|incremental] [--price-source on-chain|indexer]'
14
+ + ' [--rebalance-route public|auto|flashbots-private|flashbots-bundle] [--rebalance-route-fallback fail|public]'
15
+ + ' [--flashbots-relay-url <url>] [--flashbots-auth-key <key>] [--flashbots-target-block-offset <n>]'
16
+ + ' [--no-hedge] [--max-rebalance-usdc <n>] [--max-hedge-usdc <n>] [--max-open-exposure-usdc <amount>]'
17
+ + ' [--max-trades-per-day <n>] [--cooldown-ms <ms>] [--depth-slippage-bps <n>]'
18
+ + ' [--min-time-to-close-sec <n>] [--strict-close-time-delta] [--chain-id <id>] [--rpc-url <url>]'
19
+ + ' [--polymarket-rpc-url <url>] [--private-key <hex>|--profile-id <id>|--profile-file <path>]'
20
+ + ' [--funder <address>] [--usdc <address>] [--oracle <address>] [--factory <address>]'
21
+ + ' [--initial-yes-pct <pct>|--initial-no-pct <pct>] [--distribution-yes <parts>]'
22
+ + ' [--distribution-no <parts>] [--yes-reserve-weight-pct <pct>] [--no-reserve-weight-pct <pct>]'
23
+ + ' [--sources <url...>] [--validation-ticket <ticket>] [--target-timestamp <unix|iso>]'
24
+ + ' [--manifest-file <path>] [--trust-deploy] [--skip-gate] [--polymarket-host <url>]'
25
+ + ' [--polymarket-gamma-url <url>] [--polymarket-gamma-mock-url <url>] [--polymarket-mock-url <url>]'
26
+ + ' [--with-rules] [--include-similarity] [--min-close-lead-seconds <n>] [--dotenv-path <path>]';
8
27
 
9
28
  const MIRROR_SYNC_SUMMARY =
10
- 'pandora [--output table|json] mirror sync once|run|start|stop|status|unlock ...';
29
+ 'pandora [--output table|json] mirror sync once|run|start|stop|status ...';
11
30
  const MIRROR_HEDGE_SUMMARY =
12
31
  'pandora [--output table|json] mirror hedge plan|run|start|status|stop|bundle ...';
13
32
 
@@ -17,11 +36,32 @@ const MIRROR_HEDGE_SUMMARY =
17
36
  * @type {string}
18
37
  */
19
38
  const MIRROR_SYNC_USAGE =
20
- 'pandora [--output table|json] mirror sync once|run --pandora-market-address <address>|--market-address <address> --polymarket-market-id <id>|--polymarket-slug <slug> [--paper|--dry-run|--execute-live|--execute] [--private-key <hex>|--profile-id <id>|--profile-file <path>] [--funder <address>] [--usdc <address>] [--trust-deploy] [--manifest-file <path>] [--skip-gate] [--strict-close-time-delta] [--stream|--no-stream] [--verbose] [--interval-ms <ms>] [--drift-trigger-bps <n>] [--hedge-trigger-usdc <n>] [--hedge-ratio <n>] [--hedge-scope pool|total] [--skip-initial-hedge] [--adopt-existing-positions] [--rebalance-mode atomic|incremental] [--price-source on-chain|indexer] [--rebalance-route public|auto|flashbots-private|flashbots-bundle] [--rebalance-route-fallback fail|public] [--flashbots-relay-url <url>] [--flashbots-auth-key <key>] [--flashbots-target-block-offset <n>] [--no-hedge] [--max-rebalance-usdc <n>] [--max-hedge-usdc <n>] [--max-open-exposure-usdc <amount>] [--max-trades-per-day <n>] [--cooldown-ms <ms>] [--depth-slippage-bps <n>] [--min-time-to-close-sec <n>] [--iterations <n>] [--state-file <path>] [--kill-switch-file <path>] [--chain-id <id>] [--rpc-url <url>] [--polymarket-rpc-url <url>] [--polymarket-host <url>] [--polymarket-gamma-url <url>] [--polymarket-gamma-mock-url <url>] [--polymarket-mock-url <url>] [--webhook-url <url>] [--telegram-bot-token <token>] [--telegram-chat-id <id>] [--discord-webhook-url <url>]';
39
+ 'pandora [--output table|json] mirror sync once|run'
40
+ + ' --pandora-market-address <address>|--market-address <address>'
41
+ + ' --polymarket-market-id <id>|--polymarket-slug <slug>'
42
+ + ' [--paper|--dry-run|--execute-live|--execute]'
43
+ + ' [--private-key <hex>|--profile-id <id>|--profile-file <path>] [--funder <address>]'
44
+ + ' [--usdc <address>] [--trust-deploy] [--manifest-file <path>] [--skip-gate]'
45
+ + ' [--strict-close-time-delta] [--stream|--no-stream] [--verbose] [--interval-ms <ms>]'
46
+ + ' [--drift-trigger-bps <n>] [--hedge-trigger-usdc <n>] [--hedge-ratio <n>]'
47
+ + ' [--hedge-scope pool|total] [--skip-initial-hedge] [--adopt-existing-positions]'
48
+ + ' [--rebalance-mode atomic|incremental] [--price-source on-chain|indexer]'
49
+ + ' [--rebalance-route public|auto|flashbots-private|flashbots-bundle]'
50
+ + ' [--rebalance-route-fallback fail|public] [--flashbots-relay-url <url>]'
51
+ + ' [--flashbots-auth-key <key>] [--flashbots-target-block-offset <n>] [--no-hedge]'
52
+ + ' [--max-rebalance-usdc <n>] [--max-hedge-usdc <n>] [--max-open-exposure-usdc <amount>]'
53
+ + ' [--max-trades-per-day <n>] [--cooldown-ms <ms>] [--depth-slippage-bps <n>]'
54
+ + ' [--min-time-to-close-sec <n>] [--iterations <n>] [--state-file <path>]'
55
+ + ' [--kill-switch-file <path>] [--chain-id <id>] [--rpc-url <url>]'
56
+ + ' [--polymarket-rpc-url <url>] [--polymarket-host <url>] [--polymarket-gamma-url <url>]'
57
+ + ' [--polymarket-gamma-mock-url <url>] [--polymarket-mock-url <url>]'
58
+ + ' [--webhook-url <url>] [--telegram-bot-token <token>] [--telegram-chat-id <id>]'
59
+ + ' [--discord-webhook-url <url>]';
21
60
 
22
61
  const INVALID_SUBCOMMAND_MESSAGE =
23
62
  'mirror requires subcommand: browse|plan|deploy|verify|lp-explain|hedge-calc|calc|simulate|go|sync|hedge|trace|dashboard|status|health|panic|drift|hedge-check|pnl|audit|replay|logs|close';
24
63
 
64
+
25
65
  /**
26
66
  * Build the `mirror` subcommand dispatcher with lazy-loaded action handlers.
27
67
  * @param {object} deps