@kashdao/cli 0.1.1 → 0.2.1

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 (93) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +78 -27
  3. package/dist/{account-CVJZ3HVT.js → account-QHPOIZ6I.js} +9 -9
  4. package/dist/{auth-V5WVZBCO.js → auth-TE7BCN5Q.js} +12 -12
  5. package/dist/{auth-V5WVZBCO.js.map → auth-TE7BCN5Q.js.map} +1 -1
  6. package/dist/{chunk-MQUJG224.js → chunk-2HFKULGG.js} +2 -2
  7. package/dist/{chunk-BVFDUI73.js → chunk-2SR77BYA.js} +10 -9
  8. package/dist/chunk-2SR77BYA.js.map +1 -0
  9. package/dist/chunk-6QSTFU4R.js +9 -0
  10. package/dist/{chunk-KAM6KOFD.js.map → chunk-6QSTFU4R.js.map} +1 -1
  11. package/dist/{chunk-R4NGUZKN.js → chunk-6UU43MF5.js} +5 -3
  12. package/dist/chunk-6UU43MF5.js.map +1 -0
  13. package/dist/{chunk-A3IH5HUV.js → chunk-AROIP4EQ.js} +3 -3
  14. package/dist/chunk-AROIP4EQ.js.map +1 -0
  15. package/dist/{chunk-QALDZHTX.js → chunk-H2QGFDZP.js} +9 -11
  16. package/dist/chunk-H2QGFDZP.js.map +1 -0
  17. package/dist/{chunk-L4AFV2HK.js → chunk-IOLKGV45.js} +3 -3
  18. package/dist/chunk-IOLKGV45.js.map +1 -0
  19. package/dist/{chunk-KADB3OKE.js → chunk-VFBQVUL4.js} +2 -2
  20. package/dist/{chunk-X2VM6VKM.js → chunk-WL7XUYPH.js} +19 -20
  21. package/dist/chunk-WL7XUYPH.js.map +1 -0
  22. package/dist/{chunk-N26VGVGB.js → chunk-ZSMI63N3.js} +109 -37
  23. package/dist/chunk-ZSMI63N3.js.map +1 -0
  24. package/dist/client-REDY6K7J.js +14 -0
  25. package/dist/{completion-PK74S3EZ.js → completion-MXTJYK3D.js} +4 -4
  26. package/dist/{config-T5U6E6KU.js → config-TIJXUJ5N.js} +32 -23
  27. package/dist/config-TIJXUJ5N.js.map +1 -0
  28. package/dist/{config-store-UTFDUCKW.js → config-store-INJY4DDT.js} +6 -4
  29. package/dist/{docs-VA7CJ2ZF.js → docs-M5RZAQ6P.js} +5 -5
  30. package/dist/{eoa-RL3NLN3H.js → eoa-N55DYIN3.js} +18 -16
  31. package/dist/eoa-N55DYIN3.js.map +1 -0
  32. package/dist/{errors-2NNXRNES.js → errors-SMR7X5DU.js} +2 -2
  33. package/dist/{explain-3SPMWDYX.js → explain-HIDEZVLV.js} +31 -8
  34. package/dist/explain-HIDEZVLV.js.map +1 -0
  35. package/dist/{global-options-WFQ6CEFK.js → global-options-YONBFB7N.js} +4 -4
  36. package/dist/{health-2KD6XUTJ.js → health-LSJKP3NH.js} +9 -9
  37. package/dist/index.js +31 -28
  38. package/dist/index.js.map +1 -1
  39. package/dist/{markets-H6EK2XDE.js → markets-AGL6Q2ES.js} +23 -12
  40. package/dist/markets-AGL6Q2ES.js.map +1 -0
  41. package/dist/{output-FGTXXZEQ.js → output-M4NFSWGW.js} +4 -4
  42. package/dist/{portfolio-R63D5QB2.js → portfolio-RBRVUEYP.js} +11 -11
  43. package/dist/{portfolio-R63D5QB2.js.map → portfolio-RBRVUEYP.js.map} +1 -1
  44. package/dist/{protocol-ZB6R25IM.js → protocol-WYQAKN6N.js} +18 -16
  45. package/dist/protocol-WYQAKN6N.js.map +1 -0
  46. package/dist/{quote-OF6BTAPQ.js → quote-6CNHU36A.js} +10 -10
  47. package/dist/redeem-JESSTZ46.js +108 -0
  48. package/dist/redeem-JESSTZ46.js.map +1 -0
  49. package/dist/{schema-3HQN4RFL.js → schema-6EXADLRW.js} +12 -8
  50. package/dist/{schema-3HQN4RFL.js.map → schema-6EXADLRW.js.map} +1 -1
  51. package/dist/{setup-IIPQXLPL.js → setup-H46GTSVW.js} +8 -8
  52. package/dist/{trace-WMO3KDHS.js → trace-VDBWWTYL.js} +10 -10
  53. package/dist/{trade-YBCI6XD2.js → trade-FTSY23QG.js} +10 -10
  54. package/dist/trade-FTSY23QG.js.map +1 -0
  55. package/dist/{version-WB2ACHMU.js → version-JTLF3464.js} +7 -7
  56. package/dist/{version-check-PRAVPFC6.js → version-check-7JGBY6FZ.js} +4 -4
  57. package/dist/{webhooks-DVS55O4T.js → webhooks-JEWNX5HZ.js} +10 -10
  58. package/dist/{webhooks-DVS55O4T.js.map → webhooks-JEWNX5HZ.js.map} +1 -1
  59. package/dist/{with-retry-2MD2CNK2.js → with-retry-DYSHNLG7.js} +12 -6
  60. package/dist/with-retry-DYSHNLG7.js.map +1 -0
  61. package/package.json +5 -5
  62. package/dist/chunk-A3IH5HUV.js.map +0 -1
  63. package/dist/chunk-BVFDUI73.js.map +0 -1
  64. package/dist/chunk-KAM6KOFD.js +0 -9
  65. package/dist/chunk-L4AFV2HK.js.map +0 -1
  66. package/dist/chunk-N26VGVGB.js.map +0 -1
  67. package/dist/chunk-QALDZHTX.js.map +0 -1
  68. package/dist/chunk-R4NGUZKN.js.map +0 -1
  69. package/dist/chunk-X2VM6VKM.js.map +0 -1
  70. package/dist/client-75FVHGOH.js +0 -14
  71. package/dist/config-T5U6E6KU.js.map +0 -1
  72. package/dist/eoa-RL3NLN3H.js.map +0 -1
  73. package/dist/explain-3SPMWDYX.js.map +0 -1
  74. package/dist/markets-H6EK2XDE.js.map +0 -1
  75. package/dist/protocol-ZB6R25IM.js.map +0 -1
  76. package/dist/trade-YBCI6XD2.js.map +0 -1
  77. package/dist/with-retry-2MD2CNK2.js.map +0 -1
  78. /package/dist/{account-CVJZ3HVT.js.map → account-QHPOIZ6I.js.map} +0 -0
  79. /package/dist/{chunk-MQUJG224.js.map → chunk-2HFKULGG.js.map} +0 -0
  80. /package/dist/{chunk-KADB3OKE.js.map → chunk-VFBQVUL4.js.map} +0 -0
  81. /package/dist/{client-75FVHGOH.js.map → client-REDY6K7J.js.map} +0 -0
  82. /package/dist/{completion-PK74S3EZ.js.map → completion-MXTJYK3D.js.map} +0 -0
  83. /package/dist/{config-store-UTFDUCKW.js.map → config-store-INJY4DDT.js.map} +0 -0
  84. /package/dist/{docs-VA7CJ2ZF.js.map → docs-M5RZAQ6P.js.map} +0 -0
  85. /package/dist/{errors-2NNXRNES.js.map → errors-SMR7X5DU.js.map} +0 -0
  86. /package/dist/{global-options-WFQ6CEFK.js.map → global-options-YONBFB7N.js.map} +0 -0
  87. /package/dist/{health-2KD6XUTJ.js.map → health-LSJKP3NH.js.map} +0 -0
  88. /package/dist/{output-FGTXXZEQ.js.map → output-M4NFSWGW.js.map} +0 -0
  89. /package/dist/{quote-OF6BTAPQ.js.map → quote-6CNHU36A.js.map} +0 -0
  90. /package/dist/{setup-IIPQXLPL.js.map → setup-H46GTSVW.js.map} +0 -0
  91. /package/dist/{trace-WMO3KDHS.js.map → trace-VDBWWTYL.js.map} +0 -0
  92. /package/dist/{version-WB2ACHMU.js.map → version-JTLF3464.js.map} +0 -0
  93. /package/dist/{version-check-PRAVPFC6.js.map → version-check-7JGBY6FZ.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/schema.ts","../src/cli-schemas.ts"],"sourcesContent":["/**\n * `kash schema [<resource>]` — emit JSON Schema for the SDK's\n * request/response shapes.\n *\n * AI agents call this to understand the wire format without scraping\n * the OpenAPI spec or reading TypeScript types. The schemas come\n * straight from `@kashdao/sdk`'s Zod exports — so they always match\n * what the CLI actually sends and receives.\n *\n * Agents typically want one of two things:\n *\n * 1. `kash schema` — full catalog so they can index every shape\n * up front (returns `{ <name>: <jsonSchema>, … }`).\n * 2. `kash schema <name>` — one schema, e.g. `CreateTradeBody`,\n * to validate a request body locally before submitting.\n */\n\nimport {\n ConfirmTradeBodySchema,\n ConfirmTradeResponseSchema,\n CreateTradeAcceptedResponseSchema,\n CreateTradeBodySchema,\n GetMarketResponseSchema,\n GetTraceResponseSchema,\n GetTradeResponseSchema,\n ListMarketsResponseSchema,\n ListTradesResponseSchema,\n ListWebhookEventsResponseSchema,\n MarketResourceSchema,\n PaginationSchema,\n PortfolioSummarySchema,\n PositionResourceSchema,\n PositionsResponseSchema,\n ProblemDetailsSchema,\n QuoteBuyDetailSchema,\n QuoteMarketSummarySchema,\n QuoteResponseSchema,\n QuoteSellDetailSchema,\n RedeliverWebhookEventSchema,\n RedeliverWebhookResponseSchema,\n RotateWebhookSecretResponseSchema,\n TraceEventDataSchema,\n TraceEventSchema,\n TraceResourceSchema,\n TradeResourceSchema,\n WebhookEventResourceSchema,\n} from '@kashdao/sdk';\nimport { Command } from 'commander';\n\nimport {\n CliConfigEnvelopeSchema,\n CliErrorActionSchema,\n CliErrorEnvelopeSchema,\n HealthResultSchema,\n ProtocolBalanceEnvelopeSchema,\n ProtocolMarketEnvelopeSchema,\n ProtocolQuoteEnvelopeSchema,\n TradeDryRunEnvelopeSchema,\n VersionManifestSchema,\n} from '../cli-schemas.js';\nimport { CliError } from '../errors.js';\nimport { readGlobals } from '../utils/global-options.js';\nimport { print, printJson, style } from '../utils/output.js';\n\nimport type { ZodTypeAny } from 'zod';\nimport type { zodToJsonSchema as ZodToJsonSchemaFn } from 'zod-to-json-schema';\n\n/**\n * Stable name → Zod schema map. Adding entries is a minor bump;\n * removing/renaming is a major bump.\n *\n * Names are PascalCase to match the TypeScript types consumers see in\n * `@kashdao/sdk` — keeps documentation, code, and CLI output in sync.\n *\n * Two groups:\n * - **CLI-owned contracts** (`Cli*`, `VersionManifest`) — the\n * shapes the CLI itself emits. Pinning to these is the\n * recommended path for agents that consume `kash <cmd> --json`.\n * - **SDK request/response shapes** — the wire formats the CLI\n * forwards. Mirror what the public API produces.\n */\nconst SCHEMA_MAP: Record<string, ZodTypeAny> = {\n // CLI-owned contracts\n CliErrorEnvelope: CliErrorEnvelopeSchema,\n CliErrorAction: CliErrorActionSchema,\n CliConfigEnvelope: CliConfigEnvelopeSchema,\n VersionManifest: VersionManifestSchema,\n HealthResult: HealthResultSchema,\n // Direct-mode CLI-owned envelopes\n ProtocolBalanceEnvelope: ProtocolBalanceEnvelopeSchema,\n ProtocolMarketEnvelope: ProtocolMarketEnvelopeSchema,\n ProtocolQuoteEnvelope: ProtocolQuoteEnvelopeSchema,\n // Common (wire-format)\n Pagination: PaginationSchema,\n ProblemDetails: ProblemDetailsSchema,\n // Markets\n MarketResource: MarketResourceSchema,\n GetMarketResponse: GetMarketResponseSchema,\n ListMarketsResponse: ListMarketsResponseSchema,\n // Quotes\n QuoteResponse: QuoteResponseSchema,\n QuoteBuyDetail: QuoteBuyDetailSchema,\n QuoteSellDetail: QuoteSellDetailSchema,\n QuoteMarketSummary: QuoteMarketSummarySchema,\n // Trades — request bodies\n CreateTradeBody: CreateTradeBodySchema,\n ConfirmTradeBody: ConfirmTradeBodySchema,\n // Trades — dry-run envelope (CLI-owned)\n TradeDryRunEnvelope: TradeDryRunEnvelopeSchema,\n // Trades — responses\n TradeResource: TradeResourceSchema,\n CreateTradeAcceptedResponse: CreateTradeAcceptedResponseSchema,\n ConfirmTradeResponse: ConfirmTradeResponseSchema,\n GetTradeResponse: GetTradeResponseSchema,\n ListTradesResponse: ListTradesResponseSchema,\n // Portfolio\n PortfolioSummary: PortfolioSummarySchema,\n PositionResource: PositionResourceSchema,\n PositionsResponse: PositionsResponseSchema,\n // Webhooks\n WebhookEventResource: WebhookEventResourceSchema,\n ListWebhookEventsResponse: ListWebhookEventsResponseSchema,\n RedeliverWebhookEvent: RedeliverWebhookEventSchema,\n RedeliverWebhookResponse: RedeliverWebhookResponseSchema,\n RotateWebhookSecretResponse: RotateWebhookSecretResponseSchema,\n // Traces (correlation timeline)\n TraceEventData: TraceEventDataSchema,\n TraceEvent: TraceEventSchema,\n TraceResource: TraceResourceSchema,\n GetTraceResponse: GetTraceResponseSchema,\n};\n\nconst SCHEMA_NAMES = Object.keys(SCHEMA_MAP).sort();\n\n/**\n * Wrap `zodToJsonSchema` once at the boundary. Its generic argument\n * is `ZodType<any, ZodTypeDef, any>` — narrower than the\n * `ZodTypeAny` we use to type `SCHEMA_MAP`. Confining the\n * eslint-disable here keeps the rest of the file lint-clean.\n *\n * Calling `zodToJsonSchema(schema)` without `{ name }` produces the\n * unwrapped schema directly. The wrapped form (`{ $ref, definitions }`)\n * would be surprising for agents that expect the schema at the top\n * level. We commit to the unwrapped shape as the SemVer-stable\n * contract.\n *\n * **Lazy-loaded.** `zod-to-json-schema` adds ~10ms to startup; the\n * `kash schema` command is a niche introspection path, so we defer\n * the import to the first call. Cached after the first action so\n * iterating over `SCHEMA_MAP` doesn't re-import per entry.\n */\nlet zodToJsonSchemaImpl: typeof ZodToJsonSchemaFn | undefined;\n\nasync function loadZodToJsonSchema(): Promise<typeof ZodToJsonSchemaFn> {\n if (zodToJsonSchemaImpl !== undefined) return zodToJsonSchemaImpl;\n const mod = await import('zod-to-json-schema');\n zodToJsonSchemaImpl = mod.zodToJsonSchema;\n return zodToJsonSchemaImpl;\n}\n\nfunction toJsonSchema(\n impl: typeof ZodToJsonSchemaFn,\n schema: ZodTypeAny\n): ReturnType<typeof ZodToJsonSchemaFn> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return impl(schema);\n}\n\ntype SchemaOptions = {\n list?: boolean;\n};\n\nexport const schemaCommand = new Command('schema')\n .description('Emit JSON Schema for the SDK request/response shapes.')\n .argument(\n '[name]',\n `optional schema name; omit to list every available schema (one of: ${SCHEMA_NAMES.join(', ')})`\n )\n .option(\n '--list',\n 'emit only the schema names (cheap probe: skips the zod-to-json-schema conversion that the full --json catalog needs)'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n $ kash schema # list available schema names (human)\n $ kash schema --list --json --quiet # cheap agent probe: just the names\n $ kash schema CreateTradeBody --json # JSON Schema for the trade request\n $ kash schema TradeResource --json # JSON Schema for the trade response\n\nNotes:\n Bare \\`kash schema --json\\` converts every Zod schema (~36 entries)\n to JSON Schema — that's ~tens-of-KB and ~360ms of CPU. AI agents\n doing capability probes should use \\`kash schema --list --json\\`\n to fetch just the catalog of names, then drill into the specific\n schema they actually need.\n`\n )\n .action(async (name: string | undefined, options: SchemaOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n\n // --list short-circuits before zod-to-json-schema loads. Cheapest\n // path for agent probes: returns a flat name array.\n if (options.list === true) {\n if (globals.json) {\n printJson({ schemas: SCHEMA_NAMES });\n return;\n }\n print('');\n print(style.bold('Available schemas:'));\n for (const n of SCHEMA_NAMES) {\n print(` - ${n}`);\n }\n print('');\n return;\n }\n\n // Listing names without --json doesn't need the converter at all —\n // skip the heavy import for the catalog-listing case.\n if (name === undefined && !globals.json) {\n print('');\n print(style.bold('Available schemas:'));\n for (const n of SCHEMA_NAMES) {\n print(` - ${n}`);\n }\n print('');\n print(style.dim('Run `kash schema <name> --json` for the full JSON Schema.'));\n return;\n }\n\n const impl = await loadZodToJsonSchema();\n\n if (name === undefined) {\n // --json catalog: emit each schema inline (unwrapped — see comment\n // on the per-schema branch).\n const catalog: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(SCHEMA_MAP)) {\n catalog[key] = toJsonSchema(impl, schema);\n }\n printJson({ schemas: catalog });\n return;\n }\n\n const schema = SCHEMA_MAP[name];\n if (!schema) {\n throw new CliError(`Unknown schema: ${name}`, {\n code: 'INVALID_INPUT',\n recoverable: true,\n suggestion: `Run \\`kash schema\\` (no argument) to list every available schema name.`,\n });\n }\n\n const json = toJsonSchema(impl, schema);\n if (globals.json) {\n printJson(json);\n return;\n }\n print(JSON.stringify(json, null, 2));\n });\n","/**\n * CLI-owned Zod schemas — the SemVer-stable contracts the CLI itself\n * defines (rather than the wire formats the SDK defines).\n *\n * Currently:\n * - `CliErrorEnvelopeSchema` — the JSON shape every command emits\n * on failure when `--json` is set. Agents pin to this contract\n * to recover from errors deterministically.\n * - `CliErrorActionSchema` — discriminated union of recovery hints.\n * - `VersionManifestSchema` — what `kash version --json` returns.\n * - `CliConfigEnvelopeSchema` — what `kash config show --json` returns.\n *\n * These are exported via `kash schema --json` so an AI agent can\n * validate output against the schema before parsing.\n */\n\nimport { z } from 'zod';\n\nimport { BIGINT_STRING_REGEX, HEX_ADDRESS_REGEX, USDC_DECIMAL_REGEX } from './utils/trade-input.js';\n\nconst cliErrorActionSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('run_command'),\n command: z.string(),\n description: z.string(),\n /**\n * `true` when `command` contains `<placeholder>` tokens the\n * caller must substitute. Absent / `false` means concrete and\n * safe to auto-execute. Agents that auto-shell `run_command`\n * actions MUST honour this flag — otherwise the literal\n * \"<id>\" / \"<command>\" reaches the shell and fails.\n */\n template: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('set_env'),\n variable: z.string(),\n description: z.string(),\n }),\n z.object({\n type: z.literal('wait_and_retry'),\n delayMs: z.number().int().nonnegative(),\n description: z.string(),\n }),\n z.object({\n type: z.literal('open_url'),\n url: z.string().url(),\n description: z.string(),\n }),\n z.object({\n type: z.literal('check_input'),\n field: z.string(),\n description: z.string(),\n }),\n]);\n\nexport const CliErrorActionSchema = cliErrorActionSchema;\n\n/**\n * The error envelope `kash <cmd> --json` emits on any failure path.\n *\n * Required: `code`, `message`, `recoverable`, `actions`. The optional\n * fields (`suggestion`, `retryAfterMs`, `docsUrl`, `requestId`) appear\n * only when the underlying error provides them — agents pinning to\n * the schema must treat them as optional.\n */\nexport const CliErrorEnvelopeSchema = z.object({\n ok: z.literal(false),\n error: z.object({\n code: z.string(),\n message: z.string(),\n recoverable: z.boolean(),\n suggestion: z.string().optional(),\n retryAfterMs: z.number().int().nonnegative().optional(),\n docsUrl: z.string().url().optional(),\n requestId: z.string().optional(),\n actions: z.array(cliErrorActionSchema),\n }),\n});\n\nexport type CliErrorEnvelope = z.infer<typeof CliErrorEnvelopeSchema>;\n\n/**\n * Stable feature flags an AI-agent or downstream tool can pin against.\n * Each capability is a string token: presence means \"this CLI release\n * supports the feature.\" Removing a token is a SemVer-breaking event;\n * adding one is additive (consumers must do containment checks, not\n * equality).\n *\n * Maintained in `version.ts`'s manifest builder so a single grep\n * shows what every release advertises.\n */\nexport const CliCapabilitySchema = z.enum([\n // Output / agent surface\n 'json-envelope', // every command emits a stable `--json` shape\n 'json-quiet', // `--json --quiet` for compact NDJSON-style stdout\n 'fields-projection', // `--fields a,b,c` projection on JSON output\n 'filter-dsl', // `--filter` boolean DSL on JSON output\n 'ndjson-streaming', // `--ndjson` flag on list / streaming commands\n // Error surface\n 'kash-explain', // `kash explain CODE` recovery catalog\n 'structured-actions', // typed `actions[]` on every error envelope\n // Trade modes\n 'trade-place', // public-API hosted-trade flow (`kash trade buy/sell`)\n 'protocol-trade', // SA-mode direct UserOp execution\n 'eoa-trade', // EOA-mode vanilla EIP-1559 trade execution\n 'protocol-userop', // offline UserOp sign/submit lifecycle\n 'protocol-watch', // NDJSON event subscription\n 'partial-completion-records', // `{partial: true}` records on submit-then-wait failure\n // Webhooks\n 'webhooks-replay', // `kash webhooks replay` with HMAC re-signing\n 'webhooks-replay-dry-run', // `--dry-run` for inspect-without-send\n 'webhooks-replay-refuse-private', // `--refuse-private-addresses` hard-fail\n // Discovery\n 'mcp-server', // `kash mcp serve` (Model Context Protocol)\n]);\nexport type CliCapability = z.infer<typeof CliCapabilitySchema>;\n\n/** Shape of `kash version --json`. */\nexport const VersionManifestSchema = z.object({\n cli: z.string(),\n sdk: z.string(),\n node: z.string(),\n platform: z.string(),\n release: z.string(),\n arch: z.string(),\n /**\n * Feature-detection tokens — listed iff this release implements the\n * named capability. Additive across releases; removing a token is\n * a breaking change.\n */\n capabilities: z.array(CliCapabilitySchema).optional(),\n});\n\nexport type VersionManifest = z.infer<typeof VersionManifestSchema>;\n\n/**\n * Shape of `kash health --json`. Mirrors the SDK's\n * `KashClient.healthCheck` result: `ok` is the load-bearing field;\n * everything else is best-effort metadata.\n */\nexport const HealthResultSchema = z.object({\n ok: z.boolean(),\n latencyMs: z.number().nonnegative(),\n status: z.string().optional(),\n version: z.string().optional(),\n requestId: z.string().optional(),\n});\n\nexport type HealthResult = z.infer<typeof HealthResultSchema>;\n\n// ── Direct-mode (`kash protocol …`) envelopes ─────────────────────\n\n/** Shape of `kash protocol balance --json`. */\nexport const ProtocolBalanceEnvelopeSchema = z.object({\n account: z.string().regex(HEX_ADDRESS_REGEX),\n chainId: z.number().int().positive(),\n /** USDC balance in atomic units (6 decimals). Stringified bigint. */\n usdcAtomic: z.string().regex(BIGINT_STRING_REGEX),\n /** Native ETH balance in wei. Stringified bigint. */\n gasWei: z.string().regex(BIGINT_STRING_REGEX),\n});\nexport type ProtocolBalanceEnvelope = z.infer<typeof ProtocolBalanceEnvelopeSchema>;\n\n/** Shape of `kash protocol market --json`. */\nexport const ProtocolMarketEnvelopeSchema = z.object({\n marketAddress: z.string().regex(HEX_ADDRESS_REGEX),\n chainId: z.number().int().positive(),\n status: z.enum(['unseeded', 'active', 'frozen', 'resolved']),\n /** block.timestamp at read time (seconds), stringified bigint. */\n readAt: z.string().regex(BIGINT_STRING_REGEX),\n /** Reserve in WAD-18, stringified bigint. */\n reserveWad: z.string().regex(BIGINT_STRING_REGEX),\n outcomes: z.array(\n z.object({\n index: z.number().int().nonnegative(),\n outstandingTokensWad: z.string().regex(BIGINT_STRING_REGEX),\n weightWad: z.string().regex(BIGINT_STRING_REGEX),\n probability: z.number().min(0).max(1),\n })\n ),\n});\nexport type ProtocolMarketEnvelope = z.infer<typeof ProtocolMarketEnvelopeSchema>;\n\n/** Shape of `kash protocol quote --json`. */\nexport const ProtocolQuoteEnvelopeSchema = z.object({\n side: z.enum(['BUY', 'SELL']),\n outcomeIndex: z.number().int().nonnegative(),\n /** Atomic units: USDC (6dp) on BUY, outcome tokens (18dp) on SELL. */\n amountIn: z.string().regex(BIGINT_STRING_REGEX),\n /** Atomic units: outcome tokens (18dp) on BUY, USDC (6dp) on SELL. */\n amountOut: z.string().regex(BIGINT_STRING_REGEX),\n reserveAfterWad: z.string().regex(BIGINT_STRING_REGEX),\n pricesAfterWad: z.array(z.string().regex(BIGINT_STRING_REGEX)),\n});\nexport type ProtocolQuoteEnvelope = z.infer<typeof ProtocolQuoteEnvelopeSchema>;\n\n// ── Dry-run envelopes ─────────────────────────────────────────────\n\n/**\n * Shape of `kash trade buy --dry-run --json` and\n * `kash trade sell --dry-run --json`. Agents use this to plan a trade\n * locally without hitting the API: the envelope describes exactly what\n * the CLI WOULD send if the same invocation ran without `--dry-run`.\n *\n * `wouldSend` is the request body. `idempotencyKey` echoes the resolved\n * `Idempotency-Key` header (auto-generated UUID v4 when\n * `--auto-idempotency-key` is set; null otherwise). `endpoint` pins the\n * HTTP method + path so consumers can reproduce the call out-of-band.\n */\nexport const TradeDryRunEnvelopeSchema = z.object({\n wouldSend: z.object({\n marketId: z.string().uuid(),\n outcomeIndex: z.number().int().nonnegative(),\n amount: z.string().regex(USDC_DECIMAL_REGEX),\n side: z.enum(['buy', 'sell']),\n clientRequestId: z.string().optional(),\n }),\n idempotencyKey: z.string().nullable(),\n endpoint: z.object({\n method: z.literal('POST'),\n path: z.literal('/v1/trades'),\n }),\n});\nexport type TradeDryRunEnvelope = z.infer<typeof TradeDryRunEnvelopeSchema>;\n\n/**\n * Shape of `kash config show --json` and (mostly) of\n * `kash auth status --json`. Agents pin to this contract; the two\n * commands deliberately emit the same shape so consumers don't have\n * to keep two schemas in mind.\n */\nexport const CliConfigEnvelopeSchema = z.object({\n profile: z.string(),\n authenticated: z.boolean(),\n apiKey: z.string().nullable(),\n baseUrl: z.string().url(),\n defaultChainId: z.number().int().positive(),\n // Direct-mode fields. Always present (`null` when unset) so the\n // shape is uniform across Kash-orchestrated-only and self-orchestrated\n // profiles — agents pinning to this schema can read every field without\n // optionality branches. The `signerKeyRef` is a reference shape\n // (`file:<path>` / `env:<NAME>`); the raw private key is never\n // emitted (the CLI never persists keys, even redacted).\n rpcUrl: z.string().url().nullable(),\n smartAccount: z.string().regex(HEX_ADDRESS_REGEX).nullable(),\n bundlerUrl: z.string().url().nullable(),\n bundlerProvider: z.enum(['flashbots', 'pimlico', 'alchemy', 'generic']).nullable(),\n signerKeyRef: z.string().nullable(),\n /**\n * Custom-chain block — `null` when the profile uses the static\n * registry (the typical Base mainnet / Sepolia case). Required for\n * any chain the registry doesn't cover (Anvil / forks / sidechains).\n * `smartAccount` (the inner factory + EntryPoint addresses) is only\n * required when running SA mode on the custom chain — EOA mode\n * ignores it.\n */\n customChain: z\n .object({\n // All fields are optional in the persisted schema (so `kash\n // config set customChain.<leaf>` writes one leaf at a time);\n // completeness is enforced at use time in `resolveCliCustomChain`.\n // The JSON envelope mirrors that: half-built customChain blocks\n // are emitted faithfully so `kash config show --json` matches\n // what's on disk.\n name: z.string().min(1).optional(),\n factoryAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n usdcAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n oracleAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n vaultAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n tokens1155Address: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n paramRegistryAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n smartAccount: z\n .object({\n factoryAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n implementationAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n entryPointAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n })\n .optional(),\n })\n .nullable(),\n sources: z.object({\n apiKey: z.enum(['env', 'file', 'unset']),\n baseUrl: z.enum(['env', 'file', 'default']),\n defaultChainId: z.enum(['env', 'file', 'default']),\n profile: z.enum(['flag', 'env', 'file', 'default']),\n rpcUrl: z.enum(['env', 'file', 'unset']),\n smartAccount: z.enum(['env', 'file', 'unset']),\n bundlerUrl: z.enum(['env', 'file', 'unset']),\n bundlerProvider: z.enum(['env', 'file', 'unset']),\n signerKeyRef: z.enum(['env', 'file', 'unset']),\n customChain: z.enum(['file', 'unset']),\n }),\n});\n\nexport type CliConfigEnvelope = z.infer<typeof CliConfigEnvelopeSchema>;\n"],"mappings":"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","names":["schema"]}
1
+ {"version":3,"sources":["../src/commands/schema.ts","../src/cli-schemas.ts"],"sourcesContent":["/**\n * `kash schema [<resource>]` — emit JSON Schema for the SDK's\n * request/response shapes.\n *\n * AI agents call this to understand the wire format without scraping\n * the OpenAPI spec or reading TypeScript types. The schemas come\n * straight from `@kashdao/sdk`'s Zod exports — so they always match\n * what the CLI actually sends and receives.\n *\n * Agents typically want one of two things:\n *\n * 1. `kash schema` — full catalog so they can index every shape\n * up front (returns `{ <name>: <jsonSchema>, … }`).\n * 2. `kash schema <name>` — one schema, e.g. `CreateTradeBody`,\n * to validate a request body locally before submitting.\n */\n\nimport {\n ConfirmTradeBodySchema,\n ConfirmTradeResponseSchema,\n CreateTradeAcceptedResponseSchema,\n CreateTradeBodySchema,\n GetMarketResponseSchema,\n GetTraceResponseSchema,\n GetTradeResponseSchema,\n ListMarketsResponseSchema,\n ListTradesResponseSchema,\n ListWebhookEventsResponseSchema,\n MarketResourceSchema,\n PaginationSchema,\n PortfolioSummarySchema,\n PositionResourceSchema,\n PositionsResponseSchema,\n ProblemDetailsSchema,\n QuoteBuyDetailSchema,\n QuoteMarketSummarySchema,\n QuoteResponseSchema,\n QuoteSellDetailSchema,\n RedeliverWebhookEventSchema,\n RedeliverWebhookResponseSchema,\n RotateWebhookSecretResponseSchema,\n TraceEventDataSchema,\n TraceEventSchema,\n TraceResourceSchema,\n TradeResourceSchema,\n WebhookEventResourceSchema,\n} from '@kashdao/sdk';\nimport { Command } from 'commander';\n\nimport {\n CliConfigEnvelopeSchema,\n CliErrorActionSchema,\n CliErrorEnvelopeSchema,\n HealthResultSchema,\n ProtocolBalanceEnvelopeSchema,\n ProtocolMarketEnvelopeSchema,\n ProtocolQuoteEnvelopeSchema,\n TradeDryRunEnvelopeSchema,\n VersionManifestSchema,\n} from '../cli-schemas.js';\nimport { CliError } from '../errors.js';\nimport { readGlobals } from '../utils/global-options.js';\nimport { print, printJson, style } from '../utils/output.js';\n\nimport type { ZodTypeAny } from 'zod';\nimport type { zodToJsonSchema as ZodToJsonSchemaFn } from 'zod-to-json-schema';\n\n/**\n * Stable name → Zod schema map. Adding entries is a minor bump;\n * removing/renaming is a major bump.\n *\n * Names are PascalCase to match the TypeScript types consumers see in\n * `@kashdao/sdk` — keeps documentation, code, and CLI output in sync.\n *\n * Two groups:\n * - **CLI-owned contracts** (`Cli*`, `VersionManifest`) — the\n * shapes the CLI itself emits. Pinning to these is the\n * recommended path for agents that consume `kash <cmd> --json`.\n * - **SDK request/response shapes** — the wire formats the CLI\n * forwards. Mirror what the public API produces.\n */\nconst SCHEMA_MAP: Record<string, ZodTypeAny> = {\n // CLI-owned contracts\n CliErrorEnvelope: CliErrorEnvelopeSchema,\n CliErrorAction: CliErrorActionSchema,\n CliConfigEnvelope: CliConfigEnvelopeSchema,\n VersionManifest: VersionManifestSchema,\n HealthResult: HealthResultSchema,\n // Direct-mode CLI-owned envelopes\n ProtocolBalanceEnvelope: ProtocolBalanceEnvelopeSchema,\n ProtocolMarketEnvelope: ProtocolMarketEnvelopeSchema,\n ProtocolQuoteEnvelope: ProtocolQuoteEnvelopeSchema,\n // Common (wire-format)\n Pagination: PaginationSchema,\n ProblemDetails: ProblemDetailsSchema,\n // Markets\n MarketResource: MarketResourceSchema,\n GetMarketResponse: GetMarketResponseSchema,\n ListMarketsResponse: ListMarketsResponseSchema,\n // Quotes\n QuoteResponse: QuoteResponseSchema,\n QuoteBuyDetail: QuoteBuyDetailSchema,\n QuoteSellDetail: QuoteSellDetailSchema,\n QuoteMarketSummary: QuoteMarketSummarySchema,\n // Trades — request bodies\n CreateTradeBody: CreateTradeBodySchema,\n ConfirmTradeBody: ConfirmTradeBodySchema,\n // Trades — dry-run envelope (CLI-owned)\n TradeDryRunEnvelope: TradeDryRunEnvelopeSchema,\n // Trades — responses\n TradeResource: TradeResourceSchema,\n CreateTradeAcceptedResponse: CreateTradeAcceptedResponseSchema,\n ConfirmTradeResponse: ConfirmTradeResponseSchema,\n GetTradeResponse: GetTradeResponseSchema,\n ListTradesResponse: ListTradesResponseSchema,\n // Portfolio\n PortfolioSummary: PortfolioSummarySchema,\n PositionResource: PositionResourceSchema,\n PositionsResponse: PositionsResponseSchema,\n // Webhooks\n WebhookEventResource: WebhookEventResourceSchema,\n ListWebhookEventsResponse: ListWebhookEventsResponseSchema,\n RedeliverWebhookEvent: RedeliverWebhookEventSchema,\n RedeliverWebhookResponse: RedeliverWebhookResponseSchema,\n RotateWebhookSecretResponse: RotateWebhookSecretResponseSchema,\n // Traces (correlation timeline)\n TraceEventData: TraceEventDataSchema,\n TraceEvent: TraceEventSchema,\n TraceResource: TraceResourceSchema,\n GetTraceResponse: GetTraceResponseSchema,\n};\n\nconst SCHEMA_NAMES = Object.keys(SCHEMA_MAP).sort();\n\n/**\n * Wrap `zodToJsonSchema` once at the boundary. Its generic argument\n * is `ZodType<any, ZodTypeDef, any>` — narrower than the\n * `ZodTypeAny` we use to type `SCHEMA_MAP`. Confining the\n * eslint-disable here keeps the rest of the file lint-clean.\n *\n * Calling `zodToJsonSchema(schema)` without `{ name }` produces the\n * unwrapped schema directly. The wrapped form (`{ $ref, definitions }`)\n * would be surprising for agents that expect the schema at the top\n * level. We commit to the unwrapped shape as the SemVer-stable\n * contract.\n *\n * **Lazy-loaded.** `zod-to-json-schema` adds ~10ms to startup; the\n * `kash schema` command is a niche introspection path, so we defer\n * the import to the first call. Cached after the first action so\n * iterating over `SCHEMA_MAP` doesn't re-import per entry.\n */\nlet zodToJsonSchemaImpl: typeof ZodToJsonSchemaFn | undefined;\n\nasync function loadZodToJsonSchema(): Promise<typeof ZodToJsonSchemaFn> {\n if (zodToJsonSchemaImpl !== undefined) return zodToJsonSchemaImpl;\n const mod = await import('zod-to-json-schema');\n zodToJsonSchemaImpl = mod.zodToJsonSchema;\n return zodToJsonSchemaImpl;\n}\n\nfunction toJsonSchema(\n impl: typeof ZodToJsonSchemaFn,\n schema: ZodTypeAny\n): ReturnType<typeof ZodToJsonSchemaFn> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return impl(schema);\n}\n\ntype SchemaOptions = {\n list?: boolean;\n};\n\nexport const schemaCommand = new Command('schema')\n .description('Emit JSON Schema for the SDK request/response shapes.')\n .argument(\n '[name]',\n `optional schema name; omit to list every available schema (one of: ${SCHEMA_NAMES.join(', ')})`\n )\n .option(\n '--list',\n 'emit only the schema names (cheap probe: skips the zod-to-json-schema conversion that the full --json catalog needs)'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n $ kash schema # list available schema names (human)\n $ kash schema --list --json --quiet # cheap agent probe: just the names\n $ kash schema CreateTradeBody --json # JSON Schema for the trade request\n $ kash schema TradeResource --json # JSON Schema for the trade response\n\nNotes:\n Bare \\`kash schema --json\\` converts every Zod schema (~36 entries)\n to JSON Schema — that's ~tens-of-KB and ~360ms of CPU. AI agents\n doing capability probes should use \\`kash schema --list --json\\`\n to fetch just the catalog of names, then drill into the specific\n schema they actually need.\n`\n )\n .action(async (name: string | undefined, options: SchemaOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n\n // --list short-circuits before zod-to-json-schema loads. Cheapest\n // path for agent probes: returns a flat name array.\n if (options.list === true) {\n if (globals.json) {\n printJson({ schemas: SCHEMA_NAMES });\n return;\n }\n print('');\n print(style.bold('Available schemas:'));\n for (const n of SCHEMA_NAMES) {\n print(` - ${n}`);\n }\n print('');\n return;\n }\n\n // Listing names without --json doesn't need the converter at all —\n // skip the heavy import for the catalog-listing case.\n if (name === undefined && !globals.json) {\n print('');\n print(style.bold('Available schemas:'));\n for (const n of SCHEMA_NAMES) {\n print(` - ${n}`);\n }\n print('');\n print(style.dim('Run `kash schema <name> --json` for the full JSON Schema.'));\n return;\n }\n\n const impl = await loadZodToJsonSchema();\n\n if (name === undefined) {\n // --json catalog: emit each schema inline (unwrapped — see comment\n // on the per-schema branch).\n const catalog: Record<string, unknown> = {};\n for (const [key, schema] of Object.entries(SCHEMA_MAP)) {\n catalog[key] = toJsonSchema(impl, schema);\n }\n printJson({ schemas: catalog });\n return;\n }\n\n const schema = SCHEMA_MAP[name];\n if (!schema) {\n throw new CliError(`Unknown schema: ${name}`, {\n code: 'INVALID_INPUT',\n recoverable: true,\n suggestion: `Run \\`kash schema\\` (no argument) to list every available schema name.`,\n });\n }\n\n const json = toJsonSchema(impl, schema);\n if (globals.json) {\n printJson(json);\n return;\n }\n print(JSON.stringify(json, null, 2));\n });\n","/**\n * CLI-owned Zod schemas — the SemVer-stable contracts the CLI itself\n * defines (rather than the wire formats the SDK defines).\n *\n * Currently:\n * - `CliErrorEnvelopeSchema` — the JSON shape every command emits\n * on failure when `--json` is set. Agents pin to this contract\n * to recover from errors deterministically.\n * - `CliErrorActionSchema` — discriminated union of recovery hints.\n * - `VersionManifestSchema` — what `kash version --json` returns.\n * - `CliConfigEnvelopeSchema` — what `kash config show --json` returns.\n *\n * These are exported via `kash schema --json` so an AI agent can\n * validate output against the schema before parsing.\n */\n\nimport { z } from 'zod';\n\nimport { BIGINT_STRING_REGEX, HEX_ADDRESS_REGEX, USDC_DECIMAL_REGEX } from './utils/trade-input.js';\n\nconst cliErrorActionSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('run_command'),\n command: z.string(),\n description: z.string(),\n /**\n * `true` when `command` contains `<placeholder>` tokens the\n * caller must substitute. Absent / `false` means concrete and\n * safe to auto-execute. Agents that auto-shell `run_command`\n * actions MUST honour this flag — otherwise the literal\n * \"<id>\" / \"<command>\" reaches the shell and fails.\n */\n template: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('set_env'),\n variable: z.string(),\n description: z.string(),\n }),\n z.object({\n type: z.literal('wait_and_retry'),\n delayMs: z.number().int().nonnegative(),\n description: z.string(),\n }),\n z.object({\n type: z.literal('open_url'),\n url: z.string().url(),\n description: z.string(),\n }),\n z.object({\n type: z.literal('check_input'),\n field: z.string(),\n description: z.string(),\n }),\n]);\n\nexport const CliErrorActionSchema = cliErrorActionSchema;\n\n/**\n * The error envelope `kash <cmd> --json` emits on any failure path.\n *\n * Required: `code`, `message`, `recoverable`, `actions`. The optional\n * fields (`suggestion`, `retryAfterMs`, `docsUrl`, `requestId`) appear\n * only when the underlying error provides them — agents pinning to\n * the schema must treat them as optional.\n */\nexport const CliErrorEnvelopeSchema = z.object({\n ok: z.literal(false),\n error: z.object({\n code: z.string(),\n message: z.string(),\n recoverable: z.boolean(),\n suggestion: z.string().optional(),\n retryAfterMs: z.number().int().nonnegative().optional(),\n docsUrl: z.string().url().optional(),\n requestId: z.string().optional(),\n actions: z.array(cliErrorActionSchema),\n }),\n});\n\nexport type CliErrorEnvelope = z.infer<typeof CliErrorEnvelopeSchema>;\n\n/**\n * Stable feature flags an AI-agent or downstream tool can pin against.\n * Each capability is a string token: presence means \"this CLI release\n * supports the feature.\" Removing a token is a SemVer-breaking event;\n * adding one is additive (consumers must do containment checks, not\n * equality).\n *\n * Maintained in `version.ts`'s manifest builder so a single grep\n * shows what every release advertises.\n */\nexport const CliCapabilitySchema = z.enum([\n // Output / agent surface\n 'json-envelope', // every command emits a stable `--json` shape\n 'json-quiet', // `--json --quiet` for compact NDJSON-style stdout\n 'fields-projection', // `--fields a,b,c` projection on JSON output\n 'filter-dsl', // `--filter` boolean DSL on JSON output\n 'ndjson-streaming', // `--ndjson` flag on list / streaming commands\n // Error surface\n 'kash-explain', // `kash explain CODE` recovery catalog\n 'structured-actions', // typed `actions[]` on every error envelope\n // Trade modes\n 'trade-place', // public-API hosted-trade flow (`kash trade buy/sell`)\n 'protocol-trade', // SA-mode direct UserOp execution\n 'eoa-trade', // EOA-mode vanilla EIP-1559 trade execution\n 'protocol-userop', // offline UserOp sign/submit lifecycle\n 'protocol-watch', // NDJSON event subscription\n 'partial-completion-records', // `{partial: true}` records on submit-then-wait failure\n // Webhooks\n 'webhooks-replay', // `kash webhooks replay` with HMAC re-signing\n 'webhooks-replay-dry-run', // `--dry-run` for inspect-without-send\n 'webhooks-replay-refuse-private', // `--refuse-private-addresses` hard-fail\n // Discovery\n 'mcp-server', // `kash mcp serve` (Model Context Protocol)\n]);\nexport type CliCapability = z.infer<typeof CliCapabilitySchema>;\n\n/** Shape of `kash version --json`. */\nexport const VersionManifestSchema = z.object({\n cli: z.string(),\n sdk: z.string(),\n node: z.string(),\n platform: z.string(),\n release: z.string(),\n arch: z.string(),\n /**\n * Feature-detection tokens — listed iff this release implements the\n * named capability. Additive across releases; removing a token is\n * a breaking change.\n */\n capabilities: z.array(CliCapabilitySchema).optional(),\n});\n\nexport type VersionManifest = z.infer<typeof VersionManifestSchema>;\n\n/**\n * Shape of `kash health --json`. Mirrors the SDK's\n * `KashClient.healthCheck` result: `ok` is the load-bearing field;\n * everything else is best-effort metadata.\n */\nexport const HealthResultSchema = z.object({\n ok: z.boolean(),\n latencyMs: z.number().nonnegative(),\n status: z.string().optional(),\n version: z.string().optional(),\n requestId: z.string().optional(),\n});\n\nexport type HealthResult = z.infer<typeof HealthResultSchema>;\n\n// ── Direct-mode (`kash protocol …`) envelopes ─────────────────────\n\n/** Shape of `kash protocol balance --json`. */\nexport const ProtocolBalanceEnvelopeSchema = z.object({\n account: z.string().regex(HEX_ADDRESS_REGEX),\n chainId: z.number().int().positive(),\n /** USDC balance in atomic units (6 decimals). Stringified bigint. */\n usdcAtomic: z.string().regex(BIGINT_STRING_REGEX),\n /** Native ETH balance in wei. Stringified bigint. */\n gasWei: z.string().regex(BIGINT_STRING_REGEX),\n});\nexport type ProtocolBalanceEnvelope = z.infer<typeof ProtocolBalanceEnvelopeSchema>;\n\n/** Shape of `kash protocol market --json`. */\nexport const ProtocolMarketEnvelopeSchema = z.object({\n marketAddress: z.string().regex(HEX_ADDRESS_REGEX),\n chainId: z.number().int().positive(),\n status: z.enum(['unseeded', 'active', 'frozen', 'resolved']),\n /** block.timestamp at read time (seconds), stringified bigint. */\n readAt: z.string().regex(BIGINT_STRING_REGEX),\n /** Reserve in WAD-18, stringified bigint. */\n reserveWad: z.string().regex(BIGINT_STRING_REGEX),\n outcomes: z.array(\n z.object({\n index: z.number().int().nonnegative(),\n outstandingTokensWad: z.string().regex(BIGINT_STRING_REGEX),\n weightWad: z.string().regex(BIGINT_STRING_REGEX),\n probability: z.number().min(0).max(1),\n })\n ),\n});\nexport type ProtocolMarketEnvelope = z.infer<typeof ProtocolMarketEnvelopeSchema>;\n\n/** Shape of `kash protocol quote --json`. */\nexport const ProtocolQuoteEnvelopeSchema = z.object({\n side: z.enum(['BUY', 'SELL']),\n outcomeIndex: z.number().int().nonnegative(),\n /** Atomic units: USDC (6dp) on BUY, outcome tokens (18dp) on SELL. */\n amountIn: z.string().regex(BIGINT_STRING_REGEX),\n /** Atomic units: outcome tokens (18dp) on BUY, USDC (6dp) on SELL. */\n amountOut: z.string().regex(BIGINT_STRING_REGEX),\n reserveAfterWad: z.string().regex(BIGINT_STRING_REGEX),\n pricesAfterWad: z.array(z.string().regex(BIGINT_STRING_REGEX)),\n});\nexport type ProtocolQuoteEnvelope = z.infer<typeof ProtocolQuoteEnvelopeSchema>;\n\n// ── Dry-run envelopes ─────────────────────────────────────────────\n\n/**\n * Shape of `kash trade buy --dry-run --json` and\n * `kash trade sell --dry-run --json`. Agents use this to plan a trade\n * locally without hitting the API: the envelope describes exactly what\n * the CLI WOULD send if the same invocation ran without `--dry-run`.\n *\n * `wouldSend` is the request body. `idempotencyKey` echoes the resolved\n * `Idempotency-Key` header (auto-generated UUID v4 when\n * `--auto-idempotency-key` is set; null otherwise). `endpoint` pins the\n * HTTP method + path so consumers can reproduce the call out-of-band.\n */\nexport const TradeDryRunEnvelopeSchema = z.object({\n wouldSend: z.object({\n marketId: z.string().uuid(),\n outcomeIndex: z.number().int().nonnegative(),\n amount: z.string().regex(USDC_DECIMAL_REGEX),\n side: z.enum(['buy', 'sell']),\n clientRequestId: z.string().optional(),\n }),\n idempotencyKey: z.string().nullable(),\n endpoint: z.object({\n method: z.literal('POST'),\n path: z.literal('/v1/trades'),\n }),\n});\nexport type TradeDryRunEnvelope = z.infer<typeof TradeDryRunEnvelopeSchema>;\n\n/**\n * Shape of `kash config show --json` and (mostly) of\n * `kash auth status --json`. Agents pin to this contract; the two\n * commands deliberately emit the same shape so consumers don't have\n * to keep two schemas in mind.\n */\nexport const CliConfigEnvelopeSchema = z.object({\n profile: z.string(),\n authenticated: z.boolean(),\n apiKey: z.string().nullable(),\n baseUrl: z.string().url(),\n /** Public-API version the profile pins (`YYYY-MM-DD`). */\n apiVersion: z.string().regex(/^\\d{4}-\\d{2}-\\d{2}$/),\n /** Chain reference: `solana:mainnet-beta`, `solana:devnet`, `evm:8453`. */\n defaultChain: z.string().regex(/^(solana|evm):[a-z0-9-]+$/),\n // Direct-mode fields. Always present (`null` when unset) so the\n // shape is uniform across Kash-orchestrated-only and self-orchestrated\n // profiles — agents pinning to this schema can read every field without\n // optionality branches. The `signerKeyRef` is a reference shape\n // (`file:<path>` / `env:<NAME>`); the raw private key is never\n // emitted (the CLI never persists keys, even redacted).\n rpcUrl: z.string().url().nullable(),\n smartAccount: z.string().regex(HEX_ADDRESS_REGEX).nullable(),\n bundlerUrl: z.string().url().nullable(),\n bundlerProvider: z.enum(['flashbots', 'pimlico', 'alchemy', 'generic']).nullable(),\n signerKeyRef: z.string().nullable(),\n /**\n * Custom-chain block — `null` when the profile uses the static\n * registry (the typical Base mainnet / Sepolia case). Required for\n * any chain the registry doesn't cover (Anvil / forks / sidechains).\n * `smartAccount` (the inner factory + EntryPoint addresses) is only\n * required when running SA mode on the custom chain — EOA mode\n * ignores it.\n */\n customChain: z\n .object({\n // All fields are optional in the persisted schema (so `kash\n // config set customChain.<leaf>` writes one leaf at a time);\n // completeness is enforced at use time in `resolveCliCustomChain`.\n // The JSON envelope mirrors that: half-built customChain blocks\n // are emitted faithfully so `kash config show --json` matches\n // what's on disk.\n name: z.string().min(1).optional(),\n factoryAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n usdcAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n oracleAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n vaultAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n tokens1155Address: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n paramRegistryAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n smartAccount: z\n .object({\n factoryAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n implementationAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n entryPointAddress: z.string().regex(HEX_ADDRESS_REGEX).optional(),\n })\n .optional(),\n })\n .nullable(),\n sources: z.object({\n apiKey: z.enum(['env', 'file', 'unset']),\n baseUrl: z.enum(['env', 'file', 'default']),\n defaultChain: z.enum(['env', 'file', 'default']),\n apiVersion: z.enum(['env', 'file', 'default']),\n profile: z.enum(['flag', 'env', 'file', 'default']),\n rpcUrl: z.enum(['env', 'file', 'unset']),\n smartAccount: z.enum(['env', 'file', 'unset']),\n bundlerUrl: z.enum(['env', 'file', 'unset']),\n bundlerProvider: z.enum(['env', 'file', 'unset']),\n signerKeyRef: z.enum(['env', 'file', 'unset']),\n customChain: z.enum(['file', 'unset']),\n }),\n});\n\nexport type CliConfigEnvelope = z.infer<typeof CliConfigEnvelopeSchema>;\n"],"mappings":"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","names":["schema"]}
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  readGlobals
4
- } from "./chunk-A3IH5HUV.js";
4
+ } from "./chunk-AROIP4EQ.js";
5
5
  import {
6
6
  log,
7
7
  print,
8
8
  printJson,
9
9
  style
10
- } from "./chunk-MQUJG224.js";
11
- import "./chunk-KADB3OKE.js";
10
+ } from "./chunk-2HFKULGG.js";
11
+ import "./chunk-VFBQVUL4.js";
12
12
  import {
13
13
  CliError,
14
14
  toCliError
15
- } from "./chunk-X2VM6VKM.js";
15
+ } from "./chunk-WL7XUYPH.js";
16
16
 
17
17
  // src/commands/setup.ts
18
18
  import { Command } from "commander";
@@ -49,8 +49,8 @@ async function runSetup(options, globals) {
49
49
  const jsonMode = globals.json;
50
50
  const [{ confirm, input, password }, { updateConfig, setCurrentProfile }, { buildClient }] = await Promise.all([
51
51
  import("@inquirer/prompts"),
52
- import("./config-store-UTFDUCKW.js"),
53
- import("./client-75FVHGOH.js")
52
+ import("./config-store-INJY4DDT.js"),
53
+ import("./client-REDY6K7J.js")
54
54
  ]);
55
55
  if (!jsonMode) {
56
56
  print("");
@@ -190,7 +190,7 @@ async function runSetup(options, globals) {
190
190
  };
191
191
  }
192
192
  async function probeReadScopes(opts) {
193
- const { buildClient } = await import("./client-75FVHGOH.js");
193
+ const { buildClient } = await import("./client-REDY6K7J.js");
194
194
  const { client } = await buildClient({
195
195
  requireAuth: true,
196
196
  globals: { ...opts.globals, profile: opts.profile }
@@ -257,4 +257,4 @@ function pickNextStepHints(scopes) {
257
257
  export {
258
258
  setupCommand
259
259
  };
260
- //# sourceMappingURL=setup-IIPQXLPL.js.map
260
+ //# sourceMappingURL=setup-H46GTSVW.js.map
@@ -1,26 +1,26 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  formatDate
4
- } from "./chunk-R4NGUZKN.js";
4
+ } from "./chunk-6UU43MF5.js";
5
5
  import {
6
6
  buildClient
7
- } from "./chunk-QALDZHTX.js";
8
- import "./chunk-N26VGVGB.js";
9
- import "./chunk-BVFDUI73.js";
10
- import "./chunk-KAM6KOFD.js";
7
+ } from "./chunk-H2QGFDZP.js";
8
+ import "./chunk-ZSMI63N3.js";
9
+ import "./chunk-2SR77BYA.js";
10
+ import "./chunk-6QSTFU4R.js";
11
11
  import {
12
12
  readGlobals
13
- } from "./chunk-A3IH5HUV.js";
13
+ } from "./chunk-AROIP4EQ.js";
14
14
  import {
15
15
  print,
16
16
  printJson,
17
17
  style
18
- } from "./chunk-MQUJG224.js";
19
- import "./chunk-KADB3OKE.js";
18
+ } from "./chunk-2HFKULGG.js";
19
+ import "./chunk-VFBQVUL4.js";
20
20
  import {
21
21
  CliValidationError,
22
22
  toCliError
23
- } from "./chunk-X2VM6VKM.js";
23
+ } from "./chunk-WL7XUYPH.js";
24
24
 
25
25
  // src/commands/trace.ts
26
26
  import { Command } from "commander";
@@ -100,4 +100,4 @@ function formatSummary(event) {
100
100
  export {
101
101
  traceCommand
102
102
  };
103
- //# sourceMappingURL=trace-WMO3KDHS.js.map
103
+ //# sourceMappingURL=trace-VDBWWTYL.js.map
@@ -6,20 +6,20 @@ import {
6
6
  formatDate,
7
7
  formatUsdcDecimal,
8
8
  shortId
9
- } from "./chunk-R4NGUZKN.js";
9
+ } from "./chunk-6UU43MF5.js";
10
10
  import {
11
11
  buildClient
12
- } from "./chunk-QALDZHTX.js";
13
- import "./chunk-N26VGVGB.js";
12
+ } from "./chunk-H2QGFDZP.js";
13
+ import "./chunk-ZSMI63N3.js";
14
14
  import {
15
15
  parseOutcomeIndex,
16
16
  validateUsdcDecimalShape
17
- } from "./chunk-BVFDUI73.js";
18
- import "./chunk-KAM6KOFD.js";
17
+ } from "./chunk-2SR77BYA.js";
18
+ import "./chunk-6QSTFU4R.js";
19
19
  import {
20
20
  parsePositiveInt,
21
21
  readGlobals
22
- } from "./chunk-A3IH5HUV.js";
22
+ } from "./chunk-AROIP4EQ.js";
23
23
  import {
24
24
  isQuiet,
25
25
  log,
@@ -27,12 +27,12 @@ import {
27
27
  printJson,
28
28
  style,
29
29
  writeNdjson
30
- } from "./chunk-MQUJG224.js";
31
- import "./chunk-KADB3OKE.js";
30
+ } from "./chunk-2HFKULGG.js";
31
+ import "./chunk-VFBQVUL4.js";
32
32
  import {
33
33
  CliValidationError,
34
34
  toCliError
35
- } from "./chunk-X2VM6VKM.js";
35
+ } from "./chunk-WL7XUYPH.js";
36
36
 
37
37
  // src/commands/trade/index.ts
38
38
  import { Command as Command6 } from "commander";
@@ -583,4 +583,4 @@ var tradeCommand = new Command6("trade").description("Place trades and inspect t
583
583
  export {
584
584
  tradeCommand
585
585
  };
586
- //# sourceMappingURL=trade-YBCI6XD2.js.map
586
+ //# sourceMappingURL=trade-FTSY23QG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/trade/index.ts","../src/commands/trade/buy.ts","../src/commands/trade/place.ts","../src/commands/trade/confirm.ts","../src/commands/trade/list.ts","../src/commands/trade/sell.ts","../src/commands/trade/status.ts"],"sourcesContent":["/**\n * `kash trade` — place and manage trades.\n *\n * Every subcommand requires authentication: trades are written to a\n * specific actor (user or organization) determined by the API key's\n * scope. The buy/sell helpers honor `--wait` so scripts can block on\n * settlement without rolling their own poller.\n */\n\nimport { Command } from 'commander';\n\nimport { buyCommand } from './buy.js';\nimport { confirmCommand } from './confirm.js';\nimport { listTradesCommand } from './list.js';\nimport { sellCommand } from './sell.js';\nimport { statusCommand } from './status.js';\n\nexport const tradeCommand = new Command('trade')\n .description('Place trades and inspect their status.')\n .addCommand(buyCommand)\n .addCommand(sellCommand)\n .addCommand(statusCommand)\n .addCommand(listTradesCommand)\n .addCommand(confirmCommand);\n","/**\n * `kash trade buy <marketId>` — purchase outcome tokens.\n */\n\nimport { Command } from 'commander';\n\nimport { readGlobals } from '../../utils/global-options.js';\n\nimport { placeTrade, type PlaceTradeOptions } from './place.js';\n\nexport const buyCommand = new Command('buy')\n .description('Buy outcome tokens for a market.')\n .argument('<marketId>', 'market UUID')\n .requiredOption('-o, --outcome <index>', 'outcome index (0-based)')\n .requiredOption('-a, --amount <usdc>', 'USDC amount as a decimal (max 6 fractional digits)')\n .option('--wait', 'block until the trade reaches a terminal state')\n .option(\n '--wait-timeout-ms, --timeout <ms>',\n 'wait timeout in milliseconds (default 60000) — distinct from the global --timeout-ms (per-HTTP-request)'\n )\n .option(\n '--poll-interval-ms, --poll-interval <ms>',\n 'wait poll interval in milliseconds (default 2000)'\n )\n .option('--idempotency-key <key>', 'sets the Idempotency-Key HTTP header')\n .option(\n '--auto-idempotency-key',\n 'auto-generate an Idempotency-Key (UUID v4) and surface it in the response'\n )\n .option('--client-request-id <id>', 'sets the body-level clientRequestId for replay safety')\n .option(\n '--dry-run',\n 'preview the request without sending — emits the would-be body and resolved headers'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n $ kash trade buy 9f0b... --outcome 0 --amount 10\n $ kash trade buy 9f0b... --outcome 1 --amount 25 --wait\n $ kash trade buy 9f0b... --outcome 0 --amount 5 --auto-idempotency-key --json --quiet\n $ kash trade buy 9f0b... --outcome 0 --amount 10 --dry-run --json\n`\n )\n .action(async (marketId: string, options: PlaceTradeOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n await placeTrade({ marketId, side: 'buy', options, globals });\n });\n","/**\n * Shared \"place a trade\" implementation for `buy` and `sell`.\n *\n * The two commands differ only in the `side` field, so the heavy\n * lifting — input validation, idempotency wiring, optional polling,\n * 202-confirmation rendering — lives here.\n */\n\nimport ora from 'ora';\n\nimport { CliValidationError, toCliError } from '../../errors.js';\nimport { buildClient } from '../../utils/client.js';\nimport { capitalize, colorStatus, formatUsdcDecimal, shortId } from '../../utils/formatting.js';\nimport { parsePositiveInt } from '../../utils/global-options.js';\nimport { isQuiet, log, print, printJson, style } from '../../utils/output.js';\nimport { parseOutcomeIndex, validateUsdcDecimalShape } from '../../utils/trade-input.js';\n\nimport type { GlobalOptions } from '../../utils/global-options.js';\nimport type { KashClient, TradeResource, TradeSide } from '@kashdao/sdk';\n\nexport type PlaceTradeOptions = {\n outcome: string;\n amount: string;\n wait?: boolean;\n idempotencyKey?: string;\n autoIdempotencyKey?: boolean;\n clientRequestId?: string;\n timeout?: string;\n pollInterval?: string;\n dryRun?: boolean;\n};\n\nexport type PlaceTradeArgs = {\n marketId: string;\n side: TradeSide;\n options: PlaceTradeOptions;\n globals: GlobalOptions;\n};\n\nexport async function placeTrade({\n marketId,\n side,\n options,\n globals,\n}: PlaceTradeArgs): Promise<void> {\n const json = globals.json;\n // marketId is enforced as a required positional by Commander; no\n // defensive check needed here. Same for --outcome / --amount, which\n // are `requiredOption`s — but we re-validate their *values* (range,\n // format) below since Commander only enforces presence.\n // Markets carry 2-100 outcomes, so a valid outcome index is in\n // [0, 99]. Bouncing out-of-range values here\n // gives the agent INVALID_INPUT with a clear field name, instead of\n // a server-side `KashValidationError` half a round-trip later.\n const outcomeIndex = parseOutcomeIndex(options.outcome);\n const amount = options.amount?.trim();\n if (!amount) {\n throw new CliValidationError(\n '--amount is required.',\n 'Use a USDC decimal like \"10\" or \"12.50\".'\n );\n }\n // Shape-only validator — public-API mode ships the decimal string\n // verbatim to the SDK rather than converting to atomic units, so we\n // only need the shape pin here. `validateUsdcDecimalShape` is the\n // shared primitive that backs `decimalToAtomicUsdc` in SA/EOA mode.\n validateUsdcDecimalShape(amount, 'amount');\n\n const timeoutMs = options.timeout ? parsePositiveInt(options.timeout, 'timeout') : 60_000;\n const pollIntervalMs = options.pollInterval\n ? parsePositiveInt(options.pollInterval, 'poll-interval')\n : 2_000;\n\n // Resolve idempotency key. Explicit --idempotency-key wins; otherwise\n // --auto-idempotency-key generates a UUID v4. The resolved value is\n // surfaced on the response so an agent that retries a transient\n // failure can re-use the same key.\n let resolvedIdempotencyKey = options.idempotencyKey;\n if (resolvedIdempotencyKey === undefined && options.autoIdempotencyKey) {\n // `@kashdao/cli` is a published npm package and cannot depend on\n // workspace-only `@kashdao/utils`. `crypto.randomUUID()` is the\n // right primitive here.\n // eslint-disable-next-line no-restricted-properties\n resolvedIdempotencyKey = crypto.randomUUID();\n if (!json) {\n log.detail('Generated Idempotency-Key', resolvedIdempotencyKey);\n }\n }\n\n // --dry-run short-circuits before the network call. We still validate\n // inputs (above) and resolve the idempotency key so the envelope\n // accurately reflects what a real invocation would send. Crucially,\n // we do NOT instantiate the SDK client — `buildClient` would fail on\n // a missing API key, but a dry-run preview should work without auth\n // so agents can plan trades against an unconfigured profile.\n if (options.dryRun === true) {\n const wouldSend = {\n marketId,\n outcomeIndex,\n amount,\n side,\n ...(options.clientRequestId === undefined\n ? {}\n : { clientRequestId: options.clientRequestId }),\n };\n const envelope = {\n wouldSend,\n idempotencyKey: resolvedIdempotencyKey ?? null,\n endpoint: { method: 'POST' as const, path: '/v1/trades' as const },\n };\n if (json) {\n printJson(envelope);\n return;\n }\n print('');\n print(style.bold('Dry run — no request sent.'));\n print(` ${style.dim('Endpoint ')} POST /v1/trades`);\n print(` ${style.dim('Market ')} ${marketId}`);\n print(` ${style.dim('Side ')} ${side}`);\n print(` ${style.dim('Outcome ')} ${String(outcomeIndex)}`);\n print(` ${style.dim('Amount ')} ${amount} USDC`);\n if (options.clientRequestId !== undefined) {\n print(` ${style.dim('Client req ')} ${options.clientRequestId}`);\n }\n if (resolvedIdempotencyKey !== undefined) {\n print(` ${style.dim('Idem. key ')} ${resolvedIdempotencyKey}`);\n }\n print('');\n print(style.dim('Re-run without --dry-run to submit.'));\n return;\n }\n\n let response;\n try {\n const { client } = await buildClient({ requireAuth: true, globals });\n response = await client.trades.create(\n {\n marketId,\n outcomeIndex,\n amount,\n side,\n ...(options.clientRequestId === undefined\n ? {}\n : { clientRequestId: options.clientRequestId }),\n },\n resolvedIdempotencyKey === undefined ? {} : { idempotencyKey: resolvedIdempotencyKey }\n );\n\n // Attach the idempotency key (if we generated one) so agents that\n // retry can re-use it. Empty when neither flag was provided.\n const augment = <T extends object>(payload: T): T & { idempotencyKey?: string } =>\n resolvedIdempotencyKey === undefined\n ? (payload as T & { idempotencyKey?: string })\n : { ...payload, idempotencyKey: resolvedIdempotencyKey };\n\n // The flat result (TradeResource + idempotent + optional confirmation) —\n // see SDK's `TradeCreateResult`.\n if (response.confirmation) {\n if (json) {\n printJson(augment(response));\n return;\n }\n log.warn(\n 'High-value trade — server returned 202. Confirm with `kash trade confirm <id> <token>`.'\n );\n print(` ${style.dim('Trade id ')} ${response.id}`);\n print(` ${style.dim('Status ')} ${colorStatus(response.status)}`);\n print(` ${style.dim('Token ')} ${response.confirmation.token}`);\n print(` ${style.dim('Expires ')} ${response.confirmation.expiresAt}`);\n return;\n }\n\n if (!options.wait) {\n if (json) {\n printJson(augment(response));\n return;\n }\n log.success(\n `${capitalize(side)} accepted${response.idempotent ? ' (idempotent replay)' : ''}: ${shortId(response.id)}`\n );\n print(` ${style.dim('Trade id ')} ${response.id}`);\n print(` ${style.dim('Status ')} ${colorStatus(response.status)}`);\n print(` ${style.dim('Amount ')} ${formatUsdcDecimal(response.amount)}`);\n log.info(\"Run 'kash trade status <id> --poll' to follow it to completion.\");\n return;\n }\n\n // --wait: poll until terminal. Partial-completion guard: the\n // `client.trades.create` above already succeeded — `response.id`\n // is server-assigned and the trade exists in the API. If the\n // poll fails (timeout, transient network), surface the id so\n // the operator can resume via `kash trade status <id> --poll`\n // instead of losing the pointer to a created-but-unconfirmed\n // trade. Symmetric to the SA-mode userop / EOA-mode tx hash\n // partial-completion seams.\n let completed: TradeResource;\n try {\n completed = await waitForCompletion(client, response, {\n timeoutMs,\n pollIntervalMs,\n json,\n });\n } catch (waitCause) {\n if (json) {\n printJson({\n id: response.id,\n status: response.status,\n waited: false,\n partial: true,\n });\n } else {\n log.warn(\n `Trade created but poll did not reach a terminal state. Resume with: kash trade status ${response.id} --poll`\n );\n }\n throw waitCause;\n }\n\n if (json) {\n printJson(augment({ ...completed, idempotent: response.idempotent, waited: true }));\n return;\n }\n renderTerminal(completed);\n } catch (cause) {\n throw toCliError(cause);\n }\n}\n\nasync function waitForCompletion(\n client: KashClient,\n initial: TradeResource,\n opts: { timeoutMs: number; pollIntervalMs: number; json: boolean }\n): Promise<TradeResource> {\n // Wire SIGINT/SIGTERM to abort the in-flight poll cleanly. The\n // shape mirrors `trade status --poll`: register on entry, unwire\n // in the finally block. Without this, Ctrl-C during a 60s wait\n // leaves the in-flight HTTP request stranded — process tear-down\n // works via the global SIGPIPE handler but the SDK fetch never\n // sees the cancellation.\n const ac = new AbortController();\n const onSig = (): void => ac.abort();\n process.on('SIGINT', onSig);\n process.on('SIGTERM', onSig);\n try {\n if (opts.json || isQuiet()) {\n return await client.trades.waitForCompletion(initial.id, {\n timeoutMs: opts.timeoutMs,\n pollIntervalMs: opts.pollIntervalMs,\n signal: ac.signal,\n });\n }\n const spinner = ora({\n text: `Waiting for trade ${shortId(initial.id)}…`,\n stream: process.stderr,\n }).start();\n try {\n const completed = await client.trades.waitForCompletion(initial.id, {\n timeoutMs: opts.timeoutMs,\n pollIntervalMs: opts.pollIntervalMs,\n signal: ac.signal,\n onStatus: (trade) => {\n spinner.text = `Trade ${shortId(trade.id)} — status: ${trade.status}`;\n },\n });\n if (completed.status === 'completed') {\n spinner.succeed(`Trade ${shortId(completed.id)} completed.`);\n } else {\n spinner.fail(`Trade ${shortId(completed.id)} ${completed.status}.`);\n }\n return completed;\n } catch (cause) {\n spinner.fail('Polling stopped.');\n throw cause;\n }\n } finally {\n process.off('SIGINT', onSig);\n process.off('SIGTERM', onSig);\n }\n}\n\nfunction renderTerminal(trade: TradeResource): void {\n print('');\n print(` ${style.dim('Trade id ')} ${trade.id}`);\n print(` ${style.dim('Status ')} ${colorStatus(trade.status)}`);\n print(` ${style.dim('Amount ')} ${formatUsdcDecimal(trade.amount)}`);\n // Use explicit null checks for nullable fields rather than truthy\n // checks. `if (trade.errorMessage)` would silently hide a literal\n // empty-string error (`\"\"`), which the API can return for \"errored\n // but with no human message.\" Same for `tokensOut`/`txHash`: `\"0\"`\n // is a valid string but `Boolean(\"0\") === true`, so truthy checks\n // happen to work today but are accidentally correct.\n if (trade.txHash !== null) {\n print(` ${style.dim('Tx hash ')} ${trade.txHash}`);\n }\n if (trade.tokensOut !== null) {\n print(` ${style.dim('Tokens out ')} ${trade.tokensOut}`);\n }\n if (trade.errorMessage !== null || trade.errorCode !== null) {\n print(\n ` ${style.dim('Error ')} [${trade.errorCode ?? 'UNKNOWN'}] ${trade.errorMessage ?? ''}`\n );\n log.info(`Inspect the full timeline: kash trace ${trade.correlationId}`);\n }\n}\n\n// `parseOutcomeIndex` and `validateUsdcDecimalShape` live in\n// `utils/trade-input.ts` — single source of truth across SA, EOA,\n// and public-API modes. Imports at the top of this file.\n","/**\n * `kash trade confirm <id> [token]` — confirm a high-value trade.\n *\n * High-value trades come back from `POST /v1/trades` with HTTP 202 and\n * a one-time confirmation token. This command POSTs that token to\n * `/v1/trades/{id}/confirm` to release the trade for execution.\n *\n * Token input is sensitive (a captured token plus the trade id is\n * sufficient to release real money), so we support three input\n * paths that don't taint shell history:\n *\n * 1. Positional `<token>` — convenient, but lands in `~/.bash_history`.\n * Kept for backward compat.\n * 2. `--token-stdin` — pipe a token (the natural shape after\n * capturing the 202 envelope into a file or secret store).\n * 3. Interactive prompt — TTY only, prompt goes to stderr so the\n * stdout pipe stays clean.\n */\n\nimport { Command } from 'commander';\n\nimport { CliValidationError, toCliError } from '../../errors.js';\nimport { buildClient } from '../../utils/client.js';\nimport { colorStatus, formatUsdcDecimal } from '../../utils/formatting.js';\nimport { readGlobals } from '../../utils/global-options.js';\nimport { log, print, printJson, style } from '../../utils/output.js';\n\ntype ConfirmOptions = {\n tokenStdin?: boolean;\n};\n\nexport const confirmCommand = new Command('confirm')\n .description('Confirm a high-value trade using its one-time token.')\n .argument('<id>', 'trade UUID')\n .argument('[token]', 'confirmation token (omit to read from stdin or prompt)')\n .option('--token-stdin', 'read the confirmation token from stdin')\n .addHelpText(\n 'after',\n `\nExamples:\n # Interactive prompt (no shell history footprint).\n $ kash trade confirm 9f0b...\n\n # Pipe from a captured token.\n $ cat token.txt | kash trade confirm 9f0b... --token-stdin\n\n # Positional (convenient but shows up in ~/.bash_history).\n $ kash trade confirm 9f0b... eyJ...\n $ kash trade confirm 9f0b... eyJ... --json --quiet\n`\n )\n .action(\n async (id: string, positional: string | undefined, options: ConfirmOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n const token = await resolveToken(positional, options);\n\n let trade;\n try {\n const { client } = await buildClient({ requireAuth: true, globals });\n trade = await client.trades.confirm(id, { token });\n } catch (cause) {\n throw toCliError(cause);\n }\n\n if (globals.json) {\n printJson(trade);\n return;\n }\n\n log.success(`Trade ${trade.id} confirmed.`);\n print(` ${style.dim('Status ')} ${colorStatus(trade.status)}`);\n print(` ${style.dim('Amount ')} ${formatUsdcDecimal(trade.amount)}`);\n log.info(\"Run 'kash trade status <id> --poll' to follow it to completion.\");\n }\n );\n\nasync function resolveToken(\n positional: string | undefined,\n options: ConfirmOptions\n): Promise<string> {\n // Mutual-exclusion guard: `kash trade confirm <id> <token> --token-stdin`\n // would silently take the positional and drop the piped value.\n // That's a real footgun on a real-money path — refuse to guess.\n if (positional !== undefined && positional !== '' && options.tokenStdin === true) {\n throw new CliValidationError(\n 'Pass either the positional [token] OR --token-stdin, not both.',\n 'The positional token would silently win and the piped value would be dropped.',\n 'token'\n );\n }\n if (positional !== undefined && positional !== '') {\n return positional;\n }\n if (options.tokenStdin === true) {\n // BOM-aware read — see `utils/stdin.ts` for rationale.\n const { readStdinTrimmed } = await import('../../utils/stdin.js');\n return readStdinTrimmed();\n }\n if (process.stdin.isTTY) {\n // Use the masked-input prompt — confirmation tokens are sensitive\n // (a captured token + the trade id is enough to release real\n // money) and `readline.question` would echo every keystroke.\n const { password } = await import('@inquirer/prompts');\n const answer = await password({\n message: 'Paste the confirmation token:',\n mask: '*',\n });\n return answer.trim();\n }\n throw new CliValidationError(\n 'No confirmation token provided.',\n 'Pass the token positionally, use --token-stdin to read it from a pipe, or run interactively for a prompt.',\n 'token'\n );\n}\n","/**\n * `kash trade list` — list the authenticating user's trades.\n *\n * Status filter is forwarded as-is to the API (the API accepts\n * comma-separated multiplicities, e.g. `pending,completed`).\n */\n\nimport { Command } from 'commander';\n\nimport { CliValidationError, toCliError } from '../../errors.js';\nimport { buildClient } from '../../utils/client.js';\nimport { colorStatus, createTable, formatUsdcDecimal, shortId } from '../../utils/formatting.js';\nimport { parsePositiveInt, readGlobals } from '../../utils/global-options.js';\nimport { log, print, printJson, writeNdjson } from '../../utils/output.js';\n\nimport type { TradeResource } from '@kashdao/sdk';\n\ntype ListOptions = {\n status?: readonly string[];\n market?: string;\n limit?: string;\n cursor?: string;\n all?: boolean;\n ndjson?: boolean;\n};\n\nexport const listTradesCommand = new Command('list')\n .description('List your trades.')\n .option(\n '-s, --status <status...>',\n 'status filter; repeat or comma-separate (e.g. --status pending --status executing | --status pending,executing)'\n )\n .option('-m, --market <id>', 'filter by market id')\n .option('-l, --limit <n>', 'page size (1-100)', '20')\n .option('-c, --cursor <cursor>', 'pagination cursor')\n .option('-a, --all', 'walk every page (use with --json for export)')\n .option(\n '--ndjson',\n 'stream results as newline-delimited JSON (one record per line); implies --all'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n $ kash trade list\n $ kash trade list --status pending,executing --json --quiet\n $ kash trade list --status pending --status executing --json --quiet\n $ kash trade list --market 9f0b... --json --quiet | jq '.data[] | select(.status==\"completed\")'\n $ kash trade list --all --ndjson | while read -r line; do echo \"$line\" | jq -r .id; done\n`\n )\n .action(async (options: ListOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n const limit = options.limit === undefined ? 20 : parsePositiveInt(options.limit, 'limit');\n if (limit < 1 || limit > 100) {\n throw new CliValidationError('--limit must be between 1 and 100.', undefined, 'limit');\n }\n\n // Normalise --status: accept both `--status a,b,c` (single comma-string)\n // and `--status a --status b` (repeated). Both collapse to the\n // same comma-string the API expects. Mirrors `webhooks list`.\n const status = normaliseStatus(options.status);\n\n let response;\n try {\n const { client } = await buildClient({ requireAuth: true, globals });\n response = await client.trades.list({\n limit,\n ...(options.cursor === undefined ? {} : { cursor: options.cursor }),\n ...(status === undefined ? {} : { status }),\n ...(options.market === undefined ? {} : { marketId: options.market }),\n });\n\n if (options.ndjson) {\n for await (const trade of response) {\n writeNdjson(trade);\n }\n return;\n }\n\n if (options.all) {\n const collected: TradeResource[] = [];\n for await (const trade of response) collected.push(trade);\n if (globals.json) {\n // Canonical `{data, pagination, count}` — see markets/list.ts\n // for rationale. Same shape across single-page and walked\n // modes lets agents pin to one schema.\n printJson({\n data: collected,\n pagination: { hasMore: false, cursor: null },\n count: collected.length,\n });\n } else {\n renderTable(collected);\n }\n return;\n }\n } catch (cause) {\n throw toCliError(cause);\n }\n\n if (globals.json) {\n printJson({\n data: response.data,\n pagination: response.pagination,\n count: response.data.length,\n });\n return;\n }\n\n if (response.data.length === 0) {\n log.info('No trades matched the filter.');\n return;\n }\n renderTable(response.data);\n\n if (response.pagination.hasMore && response.pagination.cursor) {\n log.detail('Next page', `--cursor ${response.pagination.cursor}`);\n }\n });\n\n/**\n * Flatten + dedupe `--status`. Each entry may itself be a comma list.\n * Returns the canonical comma-string the API expects, or `undefined`\n * when no values were supplied (preserving the \"no filter\" default).\n */\nfunction normaliseStatus(raw: readonly string[] | undefined): string | undefined {\n if (!raw || raw.length === 0) return undefined;\n const seen = new Set<string>();\n for (const entry of raw) {\n for (const piece of entry.split(',')) {\n const trimmed = piece.trim();\n if (trimmed.length > 0) seen.add(trimmed);\n }\n }\n return seen.size === 0 ? undefined : [...seen].join(',');\n}\n\nfunction renderTable(trades: readonly TradeResource[]): void {\n const table = createTable(['Trade', 'Market', 'Side', 'Out#', 'Amount', 'Status', 'Tx']);\n for (const t of trades) {\n table.push([\n shortId(t.id),\n shortId(t.marketId),\n t.side,\n String(t.outcomeIndex),\n formatUsdcDecimal(t.amount),\n colorStatus(t.status),\n t.txHash ? shortId(t.txHash, 10) : '-',\n ]);\n }\n print(table.toString());\n}\n","/**\n * `kash trade sell <marketId>` — sell outcome tokens back to the AMM.\n */\n\nimport { Command } from 'commander';\n\nimport { readGlobals } from '../../utils/global-options.js';\n\nimport { placeTrade, type PlaceTradeOptions } from './place.js';\n\nexport const sellCommand = new Command('sell')\n .description('Sell outcome tokens back to the market (Kash-orchestrated / hosted-API flow).')\n .argument('<marketId>', 'market UUID')\n .requiredOption('-o, --outcome <index>', 'outcome index (0-based)')\n .requiredOption(\n '-a, --amount <usdc>',\n 'target USDC to receive (decimal, max 6 fractional digits) — NOT tokens-in. ' +\n 'Use `kash quote sell --tokens <n>` if you have a tokens-in figure and want a USDC quote first.'\n )\n .option('--wait', 'block until the trade reaches a terminal state')\n .option(\n '--wait-timeout-ms, --timeout <ms>',\n 'wait timeout in milliseconds (default 60000) — distinct from the global --timeout-ms (per-HTTP-request)'\n )\n .option(\n '--poll-interval-ms, --poll-interval <ms>',\n 'wait poll interval in milliseconds (default 2000)'\n )\n .option('--idempotency-key <key>', 'sets the Idempotency-Key HTTP header')\n .option(\n '--auto-idempotency-key',\n 'auto-generate an Idempotency-Key (UUID v4) and surface it in the response'\n )\n .option('--client-request-id <id>', 'sets the body-level clientRequestId for replay safety')\n .option(\n '--dry-run',\n 'preview the request without sending — emits the would-be body and resolved headers'\n )\n .addHelpText(\n 'after',\n `\nExamples:\n $ kash trade sell 9f0b... --outcome 0 --amount 10 # target $10 USDC out\n $ kash trade sell 9f0b... --outcome 1 --amount 25 --wait\n $ kash trade sell 9f0b... --outcome 0 --amount 5 --auto-idempotency-key --json --quiet\n $ kash trade sell 9f0b... --outcome 0 --amount 10 --dry-run --json\n\nNotes:\n --amount is in USDC for both buy AND sell:\n BUY — USDC you spend (input).\n SELL — USDC you target receiving (output).\n This is the API contract, not a CLI choice — \\`kash quote sell --tokens N\\`\n takes a tokens-in figure if that's the shape you have on hand.\n`\n )\n .action(async (marketId: string, options: PlaceTradeOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n await placeTrade({ marketId, side: 'sell', options, globals });\n });\n","/**\n * `kash trade status <id>` — fetch a single trade. With `--poll`, block\n * until the trade reaches a terminal state (uses the SDK's polling\n * helper).\n */\n\nimport { Command } from 'commander';\nimport ora from 'ora';\n\nimport { toCliError } from '../../errors.js';\nimport { buildClient } from '../../utils/client.js';\nimport { colorStatus, formatDate, formatUsdcDecimal, shortId } from '../../utils/formatting.js';\nimport { parsePositiveInt, readGlobals } from '../../utils/global-options.js';\nimport { isQuiet, log, print, printJson, style } from '../../utils/output.js';\n\nimport type { TradeResource } from '@kashdao/sdk';\n\ntype StatusOptions = {\n poll?: boolean;\n timeout?: string;\n pollInterval?: string;\n};\n\nexport const statusCommand = new Command('status')\n .description('Show the status of a trade. Use --poll to block until terminal.')\n .argument('<id>', 'trade UUID')\n .addHelpText(\n 'after',\n `\nExamples:\n $ kash trade status 9f0b...\n $ kash trade status 9f0b... --poll\n $ kash trade status 9f0b... --poll --json --quiet | jq -r '.txHash'\n`\n )\n .option('--poll', 'poll until the trade reaches a terminal state')\n .option(\n '--wait-timeout-ms, --timeout <ms>',\n 'poll timeout in milliseconds (default 60000) — distinct from the global --timeout-ms (per-HTTP-request)'\n )\n .option(\n '--poll-interval-ms, --poll-interval <ms>',\n 'poll interval in milliseconds (default 2000)'\n )\n .action(async (id: string, options: StatusOptions, cmd: Command) => {\n const globals = readGlobals(cmd);\n let trade: TradeResource;\n try {\n const { client } = await buildClient({ requireAuth: true, globals });\n if (options.poll) {\n const timeoutMs = options.timeout ? parsePositiveInt(options.timeout, 'timeout') : 60_000;\n const pollIntervalMs = options.pollInterval\n ? parsePositiveInt(options.pollInterval, 'poll-interval')\n : 2_000;\n\n // Wire SIGINT/SIGTERM to abort the in-flight poll cleanly.\n // Without this, Ctrl-C during a 60s wait leaves the SDK\n // mid-fetch — the polling loop's own signal-handler tears\n // down the process, but any in-flight HTTP request stays\n // unaborted. Pattern mirrors `kash protocol watch`.\n const ac = new AbortController();\n const onSig = (): void => ac.abort();\n process.on('SIGINT', onSig);\n process.on('SIGTERM', onSig);\n try {\n if (globals.json || isQuiet()) {\n trade = await client.trades.waitForCompletion(id, {\n timeoutMs,\n pollIntervalMs,\n signal: ac.signal,\n });\n } else {\n const spinner = ora({\n text: `Polling trade ${shortId(id)}…`,\n stream: process.stderr,\n }).start();\n try {\n trade = await client.trades.waitForCompletion(id, {\n timeoutMs,\n pollIntervalMs,\n signal: ac.signal,\n onStatus: (current) => {\n spinner.text = `Trade ${shortId(current.id)} — status: ${current.status}`;\n },\n });\n if (trade.status === 'completed') {\n spinner.succeed(`Trade ${shortId(trade.id)} completed.`);\n } else {\n spinner.fail(`Trade ${shortId(trade.id)} ${trade.status}.`);\n }\n } catch (cause) {\n spinner.fail('Polling stopped.');\n throw cause;\n }\n }\n } finally {\n process.off('SIGINT', onSig);\n process.off('SIGTERM', onSig);\n }\n } else {\n trade = await client.trades.get(id);\n }\n } catch (cause) {\n throw toCliError(cause);\n }\n\n if (globals.json) {\n printJson(trade);\n return;\n }\n\n print('');\n print(` ${style.dim('Trade id ')} ${trade.id}`);\n print(` ${style.dim('Market id ')} ${trade.marketId}`);\n print(` ${style.dim('Side ')} ${trade.side}`);\n print(` ${style.dim('Outcome idx ')} ${String(trade.outcomeIndex)}`);\n print(` ${style.dim('Amount ')} ${formatUsdcDecimal(trade.amount)}`);\n print(` ${style.dim('Status ')} ${colorStatus(trade.status)}`);\n // Use explicit null checks rather than truthy checks — empty\n // strings are valid SDK values that we'd otherwise silently hide.\n if (trade.txHash !== null) {\n print(` ${style.dim('Tx hash ')} ${trade.txHash}`);\n }\n if (trade.tokensOut !== null) {\n print(` ${style.dim('Tokens out ')} ${trade.tokensOut}`);\n }\n if (trade.errorCode !== null || trade.errorMessage !== null) {\n print(\n ` ${style.dim('Error ')} [${trade.errorCode ?? 'UNKNOWN'}] ${trade.errorMessage ?? ''}`\n );\n // Cross-link to the correlation timeline so an operator\n // diagnosing a failure can see every event the API and the\n // execution engine emitted for this trade.\n log.info(`Inspect the full timeline: kash trace ${trade.correlationId}`);\n }\n print(` ${style.dim('Created ')} ${formatDate(trade.createdAt)}`);\n print(` ${style.dim('Updated ')} ${formatDate(trade.updatedAt)}`);\n if (trade.webhookDelivery !== null) {\n // Surface webhook delivery state when present — agents and\n // humans both need this to debug \"did the integration receive\n // the event?\" without dropping into JSON mode.\n const wh = trade.webhookDelivery;\n const failure = wh.lastFailureCode === null ? '' : ` (${wh.lastFailureCode})`;\n const httpStatus = wh.lastStatusCode === null ? '' : ` HTTP ${String(wh.lastStatusCode)}`;\n print(\n ` ${style.dim('Webhook ')} ${colorStatus(wh.status)} attempts=${String(wh.attempts)}${httpStatus}${failure}`\n );\n if (wh.lastAttemptedAt !== null) {\n print(` ${style.dim(' Last try ')} ${formatDate(wh.lastAttemptedAt)}`);\n }\n }\n if (trade.status === 'pending_confirmation') {\n log.warn('Trade is awaiting high-value confirmation. Run `kash trade confirm <id> <token>`.');\n }\n });\n"],"mappings":"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","names":["Command","Command","Command","Command","Command","Command","Command","Command","ora","Command","ora","Command"]}
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CLI_VERSION
4
- } from "./chunk-KAM6KOFD.js";
4
+ } from "./chunk-6QSTFU4R.js";
5
5
  import {
6
6
  readGlobals
7
- } from "./chunk-A3IH5HUV.js";
7
+ } from "./chunk-AROIP4EQ.js";
8
8
  import {
9
9
  print,
10
10
  printJson,
11
11
  style
12
- } from "./chunk-MQUJG224.js";
13
- import "./chunk-KADB3OKE.js";
14
- import "./chunk-X2VM6VKM.js";
12
+ } from "./chunk-2HFKULGG.js";
13
+ import "./chunk-VFBQVUL4.js";
14
+ import "./chunk-WL7XUYPH.js";
15
15
 
16
16
  // src/commands/version.ts
17
17
  import { createRequire } from "module";
@@ -74,7 +74,7 @@ Examples:
74
74
  const manifest = buildVersionManifest();
75
75
  let updateInfo = null;
76
76
  if (options.check) {
77
- const { checkLatestVersion } = await import("./version-check-PRAVPFC6.js");
77
+ const { checkLatestVersion } = await import("./version-check-7JGBY6FZ.js");
78
78
  updateInfo = await checkLatestVersion(manifest.cli);
79
79
  }
80
80
  if (globals.json) {
@@ -114,4 +114,4 @@ export {
114
114
  buildVersionManifest,
115
115
  versionCommand
116
116
  };
117
- //# sourceMappingURL=version-WB2ACHMU.js.map
117
+ //# sourceMappingURL=version-JTLF3464.js.map
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  resolveConfigPathsForOverride
4
- } from "./chunk-N26VGVGB.js";
5
- import "./chunk-BVFDUI73.js";
6
- import "./chunk-X2VM6VKM.js";
4
+ } from "./chunk-ZSMI63N3.js";
5
+ import "./chunk-2SR77BYA.js";
6
+ import "./chunk-WL7XUYPH.js";
7
7
 
8
8
  // src/utils/version-check.ts
9
9
  import { existsSync } from "fs";
@@ -135,4 +135,4 @@ export {
135
135
  compareVersions,
136
136
  isOptedOut
137
137
  };
138
- //# sourceMappingURL=version-check-PRAVPFC6.js.map
138
+ //# sourceMappingURL=version-check-7JGBY6FZ.js.map
@@ -2,30 +2,30 @@
2
2
  import {
3
3
  formatDate,
4
4
  shortId
5
- } from "./chunk-R4NGUZKN.js";
5
+ } from "./chunk-6UU43MF5.js";
6
6
  import {
7
7
  buildClient
8
- } from "./chunk-QALDZHTX.js";
9
- import "./chunk-N26VGVGB.js";
10
- import "./chunk-BVFDUI73.js";
11
- import "./chunk-KAM6KOFD.js";
8
+ } from "./chunk-H2QGFDZP.js";
9
+ import "./chunk-ZSMI63N3.js";
10
+ import "./chunk-2SR77BYA.js";
11
+ import "./chunk-6QSTFU4R.js";
12
12
  import {
13
13
  parsePositiveInt,
14
14
  readGlobals
15
- } from "./chunk-A3IH5HUV.js";
15
+ } from "./chunk-AROIP4EQ.js";
16
16
  import {
17
17
  log,
18
18
  print,
19
19
  printJson,
20
20
  style,
21
21
  writeNdjson
22
- } from "./chunk-MQUJG224.js";
23
- import "./chunk-KADB3OKE.js";
22
+ } from "./chunk-2HFKULGG.js";
23
+ import "./chunk-VFBQVUL4.js";
24
24
  import {
25
25
  CliError,
26
26
  CliValidationError,
27
27
  toCliError
28
- } from "./chunk-X2VM6VKM.js";
28
+ } from "./chunk-WL7XUYPH.js";
29
29
 
30
30
  // src/commands/webhooks/index.ts
31
31
  import { Command as Command6 } from "commander";
@@ -677,4 +677,4 @@ var webhooksCommand = new Command6("webhooks").description("Manage webhook deliv
677
677
  export {
678
678
  webhooksCommand
679
679
  };
680
- //# sourceMappingURL=webhooks-DVS55O4T.js.map
680
+ //# sourceMappingURL=webhooks-JEWNX5HZ.js.map