@ghx-dev/core 0.2.1 → 0.2.2

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 (29) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +68 -231
  3. package/dist/{chunk-HEHONZTO.js → chunk-C2KRRSSX.js} +1 -1
  4. package/dist/chunk-C2KRRSSX.js.map +1 -0
  5. package/dist/{chunk-M5PJLKL5.js → chunk-T3L2VDOS.js} +11 -11
  6. package/dist/chunk-T3L2VDOS.js.map +1 -0
  7. package/dist/cli/index.js +3 -3
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/index.d.ts +160 -0
  10. package/dist/index.js +2 -2
  11. package/dist/index.js.map +1 -1
  12. package/dist/{issue-mutations-OW464JP3.js → issue-mutations-DIWPF3JH.js} +2 -2
  13. package/dist/{issue-queries-ORG3VPK4.js → issue-queries-YQL65J7X.js} +2 -2
  14. package/dist/{pr-mutations-WOTG6FAB.js → pr-mutations-BVHDCAPR.js} +2 -2
  15. package/dist/{pr-queries-6CJJW7BT.js → pr-queries-NUL2UZJB.js} +2 -2
  16. package/dist/{project-QFSCYDDW.js → project-3ZSPVIOC.js} +2 -2
  17. package/dist/{release-33236BBA.js → release-IQCWD655.js} +2 -2
  18. package/dist/{repo-M6DKCWBG.js → repo-JF47JAZG.js} +2 -2
  19. package/package.json +5 -5
  20. package/skills/using-ghx/SKILL.md +2 -0
  21. package/dist/chunk-HEHONZTO.js.map +0 -1
  22. package/dist/chunk-M5PJLKL5.js.map +0 -1
  23. /package/dist/{issue-mutations-OW464JP3.js.map → issue-mutations-DIWPF3JH.js.map} +0 -0
  24. /package/dist/{issue-queries-ORG3VPK4.js.map → issue-queries-YQL65J7X.js.map} +0 -0
  25. /package/dist/{pr-mutations-WOTG6FAB.js.map → pr-mutations-BVHDCAPR.js.map} +0 -0
  26. /package/dist/{pr-queries-6CJJW7BT.js.map → pr-queries-NUL2UZJB.js.map} +0 -0
  27. /package/dist/{project-QFSCYDDW.js.map → project-3ZSPVIOC.js.map} +0 -0
  28. /package/dist/{release-33236BBA.js.map → release-IQCWD655.js.map} +0 -0
  29. /package/dist/{repo-M6DKCWBG.js.map → repo-JF47JAZG.js.map} +0 -0
package/dist/cli/index.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  explainCapability,
9
9
  extractArrayItemHints,
10
10
  listCapabilities
11
- } from "../chunk-M5PJLKL5.js";
11
+ } from "../chunk-T3L2VDOS.js";
12
12
  import "../chunk-H7CLZHRO.js";
13
13
  import "../chunk-NQ53ETYV.js";
14
14
  import "../chunk-TGL33GEA.js";
@@ -22,7 +22,7 @@ import "../chunk-GQO6BHJV.js";
22
22
  import "../chunk-R3CBGJZX.js";
23
23
  import {
24
24
  resolveGraphqlUrl
25
- } from "../chunk-HEHONZTO.js";
25
+ } from "../chunk-C2KRRSSX.js";
26
26
 
27
27
  // src/cli/index.ts
28
28
  import { realpathSync } from "fs";
@@ -141,7 +141,7 @@ function compactChainResult(envelope) {
141
141
  status: envelope.status,
142
142
  results: envelope.results.map((step) => {
143
143
  if (step.ok) {
144
- return { task: step.task, ok: true };
144
+ return step.data !== void 0 ? { task: step.task, ok: true, data: step.data } : { task: step.task, ok: true };
145
145
  }
146
146
  return {
147
147
  task: step.task,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/capabilities-explain.ts","../../src/cli/commands/capabilities-list.ts","../../src/cli/formatters/compact.ts","../../src/cli/commands/run.ts","../../src/cli/commands/chain.ts","../../src/cli/commands/setup.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { realpathSync } from \"node:fs\"\nimport { pathToFileURL } from \"node:url\"\n\nimport { capabilitiesExplainCommand } from \"./commands/capabilities-explain.js\"\nimport { capabilitiesListCommand } from \"./commands/capabilities-list.js\"\nimport { chainCommand } from \"./commands/chain.js\"\nimport { runCommand } from \"./commands/run.js\"\nimport { setupCommand } from \"./commands/setup.js\"\n\nfunction usage(): string {\n return [\n \"Usage:\",\n \" ghx run <task> --input '<json>' | --input - [--check-gh-preflight]\",\n \" ghx chain --steps '<json-array>' | --steps - [--check-gh-preflight]\",\n \" ghx setup --scope <user|project> [--yes] [--dry-run] [--verify] [--track]\",\n \" ghx capabilities list\",\n \" ghx capabilities explain <capability_id>\",\n ].join(\"\\n\")\n}\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<number> {\n const [command, ...rest] = argv\n\n if (!command || command === \"--help\" || command === \"-h\") {\n process.stdout.write(`${usage()}\\n`)\n return 0\n }\n\n if (command === \"run\") {\n return runCommand(rest)\n }\n\n if (command === \"chain\") {\n return chainCommand(rest)\n }\n\n if (command === \"setup\") {\n return setupCommand(rest)\n }\n\n if (command === \"capabilities\") {\n const [subcommand, ...subcommandArgs] = rest\n\n if (!subcommand) {\n process.stderr.write(`Missing capabilities subcommand.\\n${usage()}\\n`)\n return 1\n }\n\n if (subcommand === \"list\") {\n return capabilitiesListCommand(subcommandArgs)\n }\n\n if (subcommand === \"explain\") {\n return capabilitiesExplainCommand(subcommandArgs)\n }\n\n process.stderr.write(`Unknown capabilities subcommand: ${subcommand}\\n${usage()}\\n`)\n return 1\n }\n\n process.stderr.write(`Unknown command: ${command}\\n${usage()}\\n`)\n return 1\n}\n\nconst isDirectRun = (() => {\n if (!process.argv[1]) {\n return false\n }\n\n try {\n const currentEntry = realpathSync(new URL(import.meta.url))\n const invokedEntry = realpathSync(process.argv[1])\n return currentEntry === invokedEntry || import.meta.url === pathToFileURL(process.argv[1]).href\n } catch {\n return import.meta.url === pathToFileURL(process.argv[1]).href\n }\n})()\n\nif (isDirectRun) {\n main().then(\n (exitCode) => {\n process.exitCode = exitCode\n },\n (error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`${message}\\n`)\n process.exit(1)\n },\n )\n}\n","import { explainCapability } from \"@core/core/registry/explain-capability.js\"\n\nfunction usage(): string {\n return \"Usage: ghx capabilities explain <capability_id> [--json]\"\n}\n\nfunction parseArgs(argv: string[]): { capabilityId: string | undefined; asJson: boolean } {\n const asJson = argv.includes(\"--json\")\n const capabilityId = argv.find((arg) => !arg.startsWith(\"-\"))\n return { capabilityId, asJson }\n}\n\nexport async function capabilitiesExplainCommand(argv: string[] = []): Promise<number> {\n const { capabilityId, asJson } = parseArgs(argv)\n\n if (!capabilityId) {\n process.stderr.write(`${usage()}\\n`)\n return 1\n }\n\n try {\n const explained = explainCapability(capabilityId)\n\n if (asJson) {\n process.stdout.write(`${JSON.stringify(explained)}\\n`)\n return 0\n }\n\n process.stdout.write(`${JSON.stringify(explained, null, 2)}\\n`)\n return 0\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`${message}\\n`)\n return 1\n }\n}\n","import type { CapabilityListItem } from \"@core/core/registry/list-capabilities.js\"\nimport { listCapabilities } from \"@core/core/registry/list-capabilities.js\"\nimport { extractArrayItemHints } from \"@core/core/registry/schema-utils.js\"\n\nfunction parseArgs(argv: string[]): {\n asJson: boolean\n asCompact: boolean\n domain: string | undefined\n} {\n const domainIndex = argv.indexOf(\"--domain\")\n return {\n asJson: argv.includes(\"--json\"),\n asCompact: argv.includes(\"--compact\"),\n domain: domainIndex !== -1 ? argv[domainIndex + 1] : undefined,\n }\n}\n\nfunction formatCompact(capabilities: CapabilityListItem[]): string {\n const ids = new Set(capabilities.map((c) => c.capability_id))\n\n const lines = capabilities.map((item) => {\n const req = item.required_inputs.join(\",\")\n const opt = item.optional_inputs.map((o) => `${o}?`).join(\",\")\n const inputs = [req, opt].filter(Boolean).join(\",\")\n const sig = `${item.capability_id}(${inputs})`\n\n const addSibling = item.capability_id.replace(/\\.set$/, \".add\")\n const needsWarning = item.capability_id.endsWith(\".set\") && ids.has(addSibling)\n return needsWarning ? `${sig} [replaces all]` : sig\n })\n\n return lines.join(\"\\n\") + \"\\n\"\n}\n\nexport async function capabilitiesListCommand(argv: string[] = []): Promise<number> {\n const { asJson, asCompact, domain } = parseArgs(argv)\n const capabilities = listCapabilities(domain)\n\n if (capabilities.length === 0) {\n process.stderr.write(\n domain ? `No capabilities found for domain: ${domain}\\n` : \"No capabilities found\\n\",\n )\n return 1\n }\n\n if (asCompact) {\n process.stdout.write(formatCompact(capabilities))\n return 0\n }\n\n if (asJson) {\n process.stdout.write(`${JSON.stringify(capabilities)}\\n`)\n return 0\n }\n\n const maxIdLen = Math.max(...capabilities.map((c) => c.capability_id.length))\n const maxDescLen = Math.max(...capabilities.map((c) => c.description.length))\n\n const lines = capabilities.map((item) => {\n const id = item.capability_id.padEnd(maxIdLen)\n const desc = item.description.padEnd(maxDescLen)\n const required = item.required_inputs.join(\", \")\n const arrayHints = extractArrayItemHints({ properties: item.optional_inputs_detail })\n const optional = item.optional_inputs\n .map((n) => {\n const hints = arrayHints[n]\n return hints ? `${n}?[${hints.join(\", \")}]` : `${n}?`\n })\n .join(\", \")\n const inputs = optional.length > 0 ? `[${required}, ${optional}]` : `[${required}]`\n return `${id} - ${desc} ${inputs}`\n })\n process.stdout.write(`${lines.join(\"\\n\")}\\n`)\n return 0\n}\n","import type { ChainResultEnvelope, ResultEnvelope } from \"../../core/contracts/envelope.js\"\n\nexport type CompactRunResult =\n | { ok: true; data: unknown; pagination?: ResultEnvelope[\"meta\"][\"pagination\"] }\n | { ok: false; error: { code: string; message: string } }\n\nexport type CompactChainStepResult =\n | { task: string; ok: true }\n | { task: string; ok: false; error: { code: string; message: string } }\n\nexport type CompactChainResult = {\n status: ChainResultEnvelope[\"status\"]\n results: CompactChainStepResult[]\n}\n\nexport function compactRunResult(envelope: ResultEnvelope): CompactRunResult {\n if (envelope.ok) {\n return envelope.meta.pagination !== undefined\n ? { ok: true, data: envelope.data, pagination: envelope.meta.pagination }\n : { ok: true, data: envelope.data }\n }\n const err = envelope.error\n return {\n ok: false,\n error: {\n code: err?.code ?? \"UNKNOWN\",\n message: err?.message ?? \"\",\n },\n }\n}\n\nexport function compactChainResult(envelope: ChainResultEnvelope): CompactChainResult {\n return {\n status: envelope.status,\n results: envelope.results.map((step) => {\n if (step.ok) {\n return { task: step.task, ok: true as const }\n }\n return {\n task: step.task,\n ok: false as const,\n error: {\n code: step.error?.code ?? \"UNKNOWN\",\n message: step.error?.message ?? \"\",\n },\n }\n }),\n }\n}\n","import { compactRunResult } from \"@core/cli/formatters/compact.js\"\nimport type { TaskRequest } from \"../../core/contracts/task.js\"\nimport { executeTask } from \"../../core/routing/engine/index.js\"\nimport { createGithubClient } from \"../../gql/github-client.js\"\n\nconst GITHUB_GRAPHQL_ENDPOINT = \"https://api.github.com/graphql\"\n\ninterface ParsedRunFlags {\n task: string\n inputSource: \"stdin\" | { raw: string }\n skipGhPreflight: boolean\n verbose: boolean\n}\n\nexport function parseRunFlags(argv: string[]): ParsedRunFlags {\n const [task, ...rest] = argv\n if (!task || task.trim().length === 0) {\n throw new Error(\n \"Usage: ghx run <task> --input '<json>' | --input - [--check-gh-preflight] [--verbose]\",\n )\n }\n\n const inputIndex = rest.findIndex((arg) => arg === \"--input\")\n const inlineInput = rest.find((arg) => arg.startsWith(\"--input=\"))\n const inputCandidate = inputIndex >= 0 ? rest[inputIndex + 1] : undefined\n\n const verbose = rest.includes(\"--verbose\")\n\n if (inputCandidate === \"-\") {\n const skipGhPreflight = !rest.includes(\"--check-gh-preflight\")\n return { task, inputSource: \"stdin\", skipGhPreflight, verbose }\n }\n\n const inputRaw =\n inputCandidate && !inputCandidate.startsWith(\"--\")\n ? inputCandidate\n : inlineInput\n ? inlineInput.slice(\"--input=\".length)\n : undefined\n\n if (!inputRaw) {\n throw new Error(\"Missing --input JSON\")\n }\n\n const skipGhPreflight = !rest.includes(\"--check-gh-preflight\")\n return { task, inputSource: { raw: inputRaw }, skipGhPreflight, verbose }\n}\n\nfunction parseJsonInput(raw: string): Record<string, unknown> {\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new Error(\"Invalid JSON for --input\")\n }\n\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"--input must be a JSON object\")\n }\n\n return parsed as Record<string, unknown>\n}\n\nexport function readStdin(timeoutMs = 10_000): Promise<string> {\n return new Promise((resolve, reject) => {\n const parts: string[] = []\n const stream = process.stdin\n const timer = setTimeout(() => {\n stream.destroy()\n reject(new Error(\"Timed out reading from stdin\"))\n }, timeoutMs)\n stream.setEncoding(\"utf8\")\n stream.on(\"data\", (chunk: string) => parts.push(chunk))\n stream.on(\"end\", () => {\n clearTimeout(timer)\n resolve(parts.join(\"\"))\n })\n stream.on(\"error\", (err: Error) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n}\n\nfunction resolveGithubToken(): string {\n const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN\n if (!token || token.trim().length === 0) {\n throw new Error(\"Missing GITHUB_TOKEN or GH_TOKEN for GraphQL transport\")\n }\n\n return token\n}\n\nasync function executeGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<TData> {\n const response = await fetch(GITHUB_GRAPHQL_ENDPOINT, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n authorization: `Bearer ${token}`,\n \"user-agent\": \"ghx\",\n },\n body: JSON.stringify({ query, variables: variables ?? {} }),\n })\n\n const payload = (await response.json()) as {\n data?: TData\n errors?: Array<{ message?: string }>\n message?: string\n }\n\n if (!response.ok) {\n const message =\n payload.message ?? `GitHub GraphQL request failed with status ${response.status}`\n throw new Error(message)\n }\n\n if (Array.isArray(payload.errors) && payload.errors.length > 0) {\n const message = payload.errors[0]?.message ?? \"GitHub GraphQL returned errors\"\n throw new Error(message)\n }\n\n if (payload.data === undefined) {\n throw new Error(\"GitHub GraphQL response missing data\")\n }\n\n return payload.data\n}\n\nexport async function runCommand(argv: string[] = []): Promise<number> {\n if (argv.length === 0) {\n process.stdout.write(\n \"Usage: ghx run <task> --input '<json>' | --input - [--check-gh-preflight]\\n\",\n )\n return 1\n }\n\n const { task, inputSource, skipGhPreflight, verbose } = parseRunFlags(argv)\n const input =\n inputSource === \"stdin\" ? parseJsonInput(await readStdin()) : parseJsonInput(inputSource.raw)\n const githubToken = resolveGithubToken()\n\n const githubClient = createGithubClient({\n async execute<TData>(query: string, variables?: Record<string, unknown>): Promise<TData> {\n return executeGraphqlRequest<TData>(githubToken, query, variables)\n },\n })\n\n const request: TaskRequest = {\n task,\n input,\n }\n\n const result = await executeTask(request, {\n githubClient,\n githubToken,\n skipGhPreflight,\n })\n\n const output = verbose ? result : compactRunResult(result)\n process.stdout.write(`${JSON.stringify(output, null, verbose ? 2 : undefined)}\\n`)\n return 0\n}\n","import { compactChainResult } from \"@core/cli/formatters/compact.js\"\nimport { executeTasks } from \"@core/core/routing/engine/index.js\"\nimport { createResolutionCache } from \"@core/core/routing/resolution-cache.js\"\nimport { createGithubClient } from \"@core/gql/github-client.js\"\nimport type { GraphqlError, GraphqlRawResult } from \"@core/gql/transport.js\"\nimport { resolveGraphqlUrl } from \"@core/gql/transport.js\"\nimport { readStdin } from \"./run.js\"\n\nconst GITHUB_GRAPHQL_ENDPOINT = resolveGraphqlUrl()\n\ninterface ParsedChainFlags {\n stepsSource: \"stdin\" | { raw: string }\n skipGhPreflight: boolean\n verbose: boolean\n}\n\nexport function parseChainFlags(argv: string[]): ParsedChainFlags {\n const stepsIndex = argv.findIndex((arg) => arg === \"--steps\")\n const inlineSteps = argv.find((arg) => arg.startsWith(\"--steps=\"))\n const stepsCandidate = stepsIndex >= 0 ? argv[stepsIndex + 1] : undefined\n const verbose = argv.includes(\"--verbose\")\n\n if (stepsCandidate === \"-\") {\n const skipGhPreflight = !argv.includes(\"--check-gh-preflight\")\n return { stepsSource: \"stdin\", skipGhPreflight, verbose }\n }\n\n const stepsRaw =\n stepsCandidate && !stepsCandidate.startsWith(\"--\")\n ? stepsCandidate\n : inlineSteps\n ? inlineSteps.slice(\"--steps=\".length)\n : undefined\n\n if (!stepsRaw) {\n throw new Error(\"Missing --steps JSON\")\n }\n\n const skipGhPreflight = !argv.includes(\"--check-gh-preflight\")\n return { stepsSource: { raw: stepsRaw }, skipGhPreflight, verbose }\n}\n\nfunction parseJsonSteps(raw: string): Array<{ task: string; input: Record<string, unknown> }> {\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new Error(\"Invalid JSON for --steps\")\n }\n\n if (!Array.isArray(parsed)) {\n throw new Error(\"--steps must be a JSON array\")\n }\n\n for (const item of parsed) {\n if (\n typeof item !== \"object\" ||\n item === null ||\n typeof (item as Record<string, unknown>).task !== \"string\" ||\n typeof (item as Record<string, unknown>).input !== \"object\" ||\n (item as Record<string, unknown>).input === null\n ) {\n throw new Error('Each step must have \"task\" (string) and \"input\" (object) fields')\n }\n }\n\n return parsed as Array<{ task: string; input: Record<string, unknown> }>\n}\n\nfunction resolveGithubToken(): string {\n const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN\n if (!token || token.trim().length === 0) {\n throw new Error(\"Missing GITHUB_TOKEN or GH_TOKEN for GraphQL transport\")\n }\n\n return token\n}\n\ntype GqlPayload<TData> = {\n data?: TData\n errors?: GraphqlError[]\n message?: string\n}\n\nasync function fetchGqlPayload<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<GqlPayload<TData>> {\n const response = await fetch(GITHUB_GRAPHQL_ENDPOINT, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n authorization: `Bearer ${token}`,\n \"user-agent\": \"ghx\",\n },\n body: JSON.stringify({ query, variables: variables ?? {} }),\n signal: AbortSignal.timeout(30_000),\n })\n\n let payload: GqlPayload<TData>\n try {\n payload = (await response.json()) as GqlPayload<TData>\n } catch {\n throw new Error(`GitHub GraphQL returned non-JSON response (status ${response.status})`)\n }\n\n if (!response.ok) {\n const message =\n payload.message ?? `GitHub GraphQL request failed with status ${response.status}`\n throw new Error(message)\n }\n\n return payload\n}\n\nasync function executeGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<TData> {\n const payload = await fetchGqlPayload<TData>(token, query, variables)\n\n if (Array.isArray(payload.errors) && payload.errors.length > 0) {\n const message = payload.errors[0]?.message ?? \"GitHub GraphQL returned errors\"\n throw new Error(message)\n }\n\n if (payload.data === undefined) {\n throw new Error(\"GitHub GraphQL response missing data\")\n }\n\n return payload.data\n}\n\nasync function executeRawGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<GraphqlRawResult<TData>> {\n const payload = await fetchGqlPayload<TData>(token, query, variables)\n return {\n data: payload.data,\n errors: payload.errors?.length ? payload.errors : undefined,\n }\n}\n\nexport async function chainCommand(argv: string[] = []): Promise<number> {\n if (argv.length === 0) {\n process.stdout.write(\n \"Usage: ghx chain --steps '<json-array>' | --steps - [--check-gh-preflight] [--verbose]\\n\",\n )\n return 1\n }\n\n try {\n const { stepsSource, skipGhPreflight, verbose } = parseChainFlags(argv)\n const steps =\n stepsSource === \"stdin\" ? parseJsonSteps(await readStdin()) : parseJsonSteps(stepsSource.raw)\n const githubToken = resolveGithubToken()\n\n const githubClient = createGithubClient({\n async execute<TData>(query: string, variables?: Record<string, unknown>): Promise<TData> {\n return executeGraphqlRequest<TData>(githubToken, query, variables)\n },\n async executeRaw<TData>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<GraphqlRawResult<TData>> {\n return executeRawGraphqlRequest<TData>(githubToken, query, variables)\n },\n })\n\n const resolutionCache = createResolutionCache()\n const result = await executeTasks(steps, {\n githubClient,\n githubToken,\n skipGhPreflight,\n resolutionCache,\n })\n\n const output = verbose ? result : compactChainResult(result)\n process.stdout.write(`${JSON.stringify(output, null, verbose ? 2 : undefined)}\\n`)\n return result.status === \"success\" || result.status === \"partial\" ? 0 : 1\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n process.stderr.write(`${message}\\n`)\n return 1\n }\n}\n","import { access, appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, join } from \"node:path\"\nimport readline from \"node:readline/promises\"\nimport { fileURLToPath } from \"node:url\"\nimport type { ErrorCode } from \"@core/core/errors/codes.js\"\nimport { errorCodes } from \"@core/core/errors/codes.js\"\nimport { Ajv } from \"ajv\"\n\ntype SetupScope = \"user\" | \"project\"\n\ntype SetupOptions = {\n scope: SetupScope\n assumeYes: boolean\n dryRun: boolean\n verifyOnly: boolean\n track: boolean\n}\n\ntype SetupError = Error & { code?: ErrorCode }\n\nconst ajv = new Ajv({ allErrors: true, strict: false })\n\nconst setupOptionsSchema = {\n type: \"object\",\n additionalProperties: false,\n required: [\"scope\", \"assumeYes\", \"dryRun\", \"verifyOnly\", \"track\"],\n properties: {\n scope: {\n type: \"string\",\n enum: [\"user\", \"project\"],\n },\n assumeYes: { type: \"boolean\" },\n dryRun: { type: \"boolean\" },\n verifyOnly: { type: \"boolean\" },\n track: { type: \"boolean\" },\n },\n} as const\n\nconst validateSetupOptions = ajv.compile(setupOptionsSchema)\n\nconst setupCommandDirectory = dirname(fileURLToPath(import.meta.url))\nconst setupSkillAssetPathCandidates = [\n join(setupCommandDirectory, \"..\", \"..\", \"..\", \"skills\", \"using-ghx\", \"SKILL.md\"),\n join(setupCommandDirectory, \"..\", \"..\", \"skills\", \"using-ghx\", \"SKILL.md\"),\n]\n\nfunction isENOENT(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n )\n}\n\nfunction createSetupError(message: string, code: ErrorCode): SetupError {\n const error = new Error(message) as SetupError\n error.code = code\n return error\n}\n\nasync function loadSetupSkillContent(): Promise<string> {\n for (const candidatePath of setupSkillAssetPathCandidates) {\n try {\n return await readFile(candidatePath, \"utf8\")\n } catch (error) {\n if (isENOENT(error)) {\n continue\n }\n\n throw error\n }\n }\n\n throw createSetupError(\n `Setup skill asset not found. Checked: ${setupSkillAssetPathCandidates.join(\", \")}`,\n errorCodes.NotFound,\n )\n}\n\nfunction usage(): string {\n return \"Usage: ghx setup --scope <user|project> [--yes] [--dry-run] [--verify] [--track]\"\n}\n\nfunction parseScope(argv: string[]): SetupScope | undefined {\n const inline = argv.find((arg) => arg.startsWith(\"--scope=\"))\n if (inline) {\n const raw = inline.slice(\"--scope=\".length)\n if (raw === \"user\" || raw === \"project\") {\n return raw\n }\n return undefined\n }\n\n const scopeIndex = argv.findIndex((arg) => arg === \"--scope\")\n if (scopeIndex < 0) {\n return undefined\n }\n\n const value = argv[scopeIndex + 1]\n if (value === \"user\" || value === \"project\") {\n return value\n }\n\n return undefined\n}\n\nfunction parseArgs(argv: string[]): SetupOptions | null {\n const scope = parseScope(argv)\n if (!scope) {\n return null\n }\n\n const options: SetupOptions = {\n scope,\n assumeYes: argv.includes(\"--yes\"),\n dryRun: argv.includes(\"--dry-run\"),\n verifyOnly: argv.includes(\"--verify\"),\n track: argv.includes(\"--track\"),\n }\n\n if (!validateSetupOptions(options)) {\n return null\n }\n\n return options\n}\n\nfunction resolveSkillPath(scope: SetupScope): string {\n const base = scope === \"user\" ? homedir() : process.cwd()\n return join(base, \".agents\", \"skills\", \"ghx\", \"SKILL.md\")\n}\n\nfunction resolveTrackingPath(): string {\n return join(homedir(), \".agents\", \"ghx\", \"setup-events.jsonl\")\n}\n\nasync function writeTrackingEvent(options: {\n track: boolean\n scope: SetupScope\n mode: \"apply\"\n success: boolean\n}): Promise<void> {\n if (!options.track) {\n return\n }\n\n const trackingPath = resolveTrackingPath()\n await mkdir(join(homedir(), \".agents\", \"ghx\"), { recursive: true })\n await appendFile(\n trackingPath,\n `${JSON.stringify({\n command: \"setup\",\n scope: options.scope,\n mode: options.mode,\n success: options.success,\n timestamp: new Date().toISOString(),\n })}\\n`,\n \"utf8\",\n )\n}\n\nasync function confirmOverwrite(skillPath: string): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n return false\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n\n try {\n const answer = await rl.question(`Skill already exists at ${skillPath}. Overwrite? [y/N] `)\n const normalized = answer.trim().toLowerCase()\n return normalized === \"y\" || normalized === \"yes\"\n } finally {\n rl.close()\n }\n}\n\nasync function verifySkill(skillPath: string): Promise<boolean> {\n try {\n const content = await readFile(skillPath, \"utf8\")\n return content.includes(\"ghx capabilities\")\n } catch (error) {\n if (isENOENT(error)) {\n return false\n }\n\n throw error\n }\n}\n\nasync function skillFileExists(skillPath: string): Promise<boolean> {\n try {\n await access(skillPath)\n return true\n } catch (error) {\n if (isENOENT(error)) {\n return false\n }\n\n throw error\n }\n}\n\nexport async function setupCommand(argv: string[] = []): Promise<number> {\n const parsed = parseArgs(argv)\n if (!parsed) {\n process.stderr.write(`${usage()}\\n`)\n return 1\n }\n\n const skillPath = resolveSkillPath(parsed.scope)\n\n try {\n if (parsed.verifyOnly) {\n const ok = await verifySkill(skillPath)\n if (!ok) {\n process.stderr.write(`Verify failed: skill not installed at ${skillPath}\\n`)\n return 1\n }\n\n process.stdout.write(`Verify passed: skill installed at ${skillPath}\\n`)\n return 0\n }\n\n if (parsed.dryRun) {\n process.stdout.write(`Dry run: would write ${skillPath}\\n`)\n return 0\n }\n\n const alreadyExists = await skillFileExists(skillPath)\n if (alreadyExists && !parsed.assumeYes) {\n const approved = await confirmOverwrite(skillPath)\n if (!approved) {\n process.stderr.write(\n `Skill already exists at ${skillPath}. Re-run with --yes or confirm overwrite interactively.\\n`,\n )\n await writeTrackingEvent({\n track: parsed.track,\n scope: parsed.scope,\n mode: \"apply\",\n success: false,\n })\n return 1\n }\n }\n\n const skillContent = await loadSetupSkillContent()\n await mkdir(dirname(skillPath), { recursive: true })\n await writeFile(skillPath, skillContent, \"utf8\")\n\n process.stdout.write(`Setup complete: wrote ${skillPath}\\n`)\n process.stdout.write(\"Try: ghx capabilities list\\n\")\n await writeTrackingEvent({\n track: parsed.track,\n scope: parsed.scope,\n mode: \"apply\",\n success: true,\n })\n return 0\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`Setup failed: ${message}\\n`)\n return 1\n }\n}\n"],"mappings":"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","names":["parseArgs","skipGhPreflight","GITHUB_GRAPHQL_ENDPOINT","skipGhPreflight","resolveGithubToken","executeGraphqlRequest","usage","parseArgs","usage"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/capabilities-explain.ts","../../src/cli/commands/capabilities-list.ts","../../src/cli/formatters/compact.ts","../../src/cli/commands/run.ts","../../src/cli/commands/chain.ts","../../src/cli/commands/setup.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { realpathSync } from \"node:fs\"\nimport { pathToFileURL } from \"node:url\"\n\nimport { capabilitiesExplainCommand } from \"./commands/capabilities-explain.js\"\nimport { capabilitiesListCommand } from \"./commands/capabilities-list.js\"\nimport { chainCommand } from \"./commands/chain.js\"\nimport { runCommand } from \"./commands/run.js\"\nimport { setupCommand } from \"./commands/setup.js\"\n\nfunction usage(): string {\n return [\n \"Usage:\",\n \" ghx run <task> --input '<json>' | --input - [--check-gh-preflight]\",\n \" ghx chain --steps '<json-array>' | --steps - [--check-gh-preflight]\",\n \" ghx setup --scope <user|project> [--yes] [--dry-run] [--verify] [--track]\",\n \" ghx capabilities list\",\n \" ghx capabilities explain <capability_id>\",\n ].join(\"\\n\")\n}\n\nexport async function main(argv: string[] = process.argv.slice(2)): Promise<number> {\n const [command, ...rest] = argv\n\n if (!command || command === \"--help\" || command === \"-h\") {\n process.stdout.write(`${usage()}\\n`)\n return 0\n }\n\n if (command === \"run\") {\n return runCommand(rest)\n }\n\n if (command === \"chain\") {\n return chainCommand(rest)\n }\n\n if (command === \"setup\") {\n return setupCommand(rest)\n }\n\n if (command === \"capabilities\") {\n const [subcommand, ...subcommandArgs] = rest\n\n if (!subcommand) {\n process.stderr.write(`Missing capabilities subcommand.\\n${usage()}\\n`)\n return 1\n }\n\n if (subcommand === \"list\") {\n return capabilitiesListCommand(subcommandArgs)\n }\n\n if (subcommand === \"explain\") {\n return capabilitiesExplainCommand(subcommandArgs)\n }\n\n process.stderr.write(`Unknown capabilities subcommand: ${subcommand}\\n${usage()}\\n`)\n return 1\n }\n\n process.stderr.write(`Unknown command: ${command}\\n${usage()}\\n`)\n return 1\n}\n\nconst isDirectRun = (() => {\n if (!process.argv[1]) {\n return false\n }\n\n try {\n const currentEntry = realpathSync(new URL(import.meta.url))\n const invokedEntry = realpathSync(process.argv[1])\n return currentEntry === invokedEntry || import.meta.url === pathToFileURL(process.argv[1]).href\n } catch {\n return import.meta.url === pathToFileURL(process.argv[1]).href\n }\n})()\n\nif (isDirectRun) {\n main().then(\n (exitCode) => {\n process.exitCode = exitCode\n },\n (error: unknown) => {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`${message}\\n`)\n process.exit(1)\n },\n )\n}\n","import { explainCapability } from \"@core/core/registry/explain-capability.js\"\n\nfunction usage(): string {\n return \"Usage: ghx capabilities explain <capability_id> [--json]\"\n}\n\nfunction parseArgs(argv: string[]): { capabilityId: string | undefined; asJson: boolean } {\n const asJson = argv.includes(\"--json\")\n const capabilityId = argv.find((arg) => !arg.startsWith(\"-\"))\n return { capabilityId, asJson }\n}\n\nexport async function capabilitiesExplainCommand(argv: string[] = []): Promise<number> {\n const { capabilityId, asJson } = parseArgs(argv)\n\n if (!capabilityId) {\n process.stderr.write(`${usage()}\\n`)\n return 1\n }\n\n try {\n const explained = explainCapability(capabilityId)\n\n if (asJson) {\n process.stdout.write(`${JSON.stringify(explained)}\\n`)\n return 0\n }\n\n process.stdout.write(`${JSON.stringify(explained, null, 2)}\\n`)\n return 0\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`${message}\\n`)\n return 1\n }\n}\n","import type { CapabilityListItem } from \"@core/core/registry/list-capabilities.js\"\nimport { listCapabilities } from \"@core/core/registry/list-capabilities.js\"\nimport { extractArrayItemHints } from \"@core/core/registry/schema-utils.js\"\n\nfunction parseArgs(argv: string[]): {\n asJson: boolean\n asCompact: boolean\n domain: string | undefined\n} {\n const domainIndex = argv.indexOf(\"--domain\")\n return {\n asJson: argv.includes(\"--json\"),\n asCompact: argv.includes(\"--compact\"),\n domain: domainIndex !== -1 ? argv[domainIndex + 1] : undefined,\n }\n}\n\nfunction formatCompact(capabilities: CapabilityListItem[]): string {\n const ids = new Set(capabilities.map((c) => c.capability_id))\n\n const lines = capabilities.map((item) => {\n const req = item.required_inputs.join(\",\")\n const opt = item.optional_inputs.map((o) => `${o}?`).join(\",\")\n const inputs = [req, opt].filter(Boolean).join(\",\")\n const sig = `${item.capability_id}(${inputs})`\n\n const addSibling = item.capability_id.replace(/\\.set$/, \".add\")\n const needsWarning = item.capability_id.endsWith(\".set\") && ids.has(addSibling)\n return needsWarning ? `${sig} [replaces all]` : sig\n })\n\n return lines.join(\"\\n\") + \"\\n\"\n}\n\nexport async function capabilitiesListCommand(argv: string[] = []): Promise<number> {\n const { asJson, asCompact, domain } = parseArgs(argv)\n const capabilities = listCapabilities(domain)\n\n if (capabilities.length === 0) {\n process.stderr.write(\n domain ? `No capabilities found for domain: ${domain}\\n` : \"No capabilities found\\n\",\n )\n return 1\n }\n\n if (asCompact) {\n process.stdout.write(formatCompact(capabilities))\n return 0\n }\n\n if (asJson) {\n process.stdout.write(`${JSON.stringify(capabilities)}\\n`)\n return 0\n }\n\n const maxIdLen = Math.max(...capabilities.map((c) => c.capability_id.length))\n const maxDescLen = Math.max(...capabilities.map((c) => c.description.length))\n\n const lines = capabilities.map((item) => {\n const id = item.capability_id.padEnd(maxIdLen)\n const desc = item.description.padEnd(maxDescLen)\n const required = item.required_inputs.join(\", \")\n const arrayHints = extractArrayItemHints({ properties: item.optional_inputs_detail })\n const optional = item.optional_inputs\n .map((n) => {\n const hints = arrayHints[n]\n return hints ? `${n}?[${hints.join(\", \")}]` : `${n}?`\n })\n .join(\", \")\n const inputs = optional.length > 0 ? `[${required}, ${optional}]` : `[${required}]`\n return `${id} - ${desc} ${inputs}`\n })\n process.stdout.write(`${lines.join(\"\\n\")}\\n`)\n return 0\n}\n","import type { ChainResultEnvelope, ResultEnvelope } from \"../../core/contracts/envelope.js\"\n\nexport type CompactRunResult =\n | { ok: true; data: unknown; pagination?: ResultEnvelope[\"meta\"][\"pagination\"] }\n | { ok: false; error: { code: string; message: string } }\n\nexport type CompactChainStepResult =\n | { task: string; ok: true; data?: unknown }\n | { task: string; ok: false; error: { code: string; message: string } }\n\nexport type CompactChainResult = {\n status: ChainResultEnvelope[\"status\"]\n results: CompactChainStepResult[]\n}\n\nexport function compactRunResult(envelope: ResultEnvelope): CompactRunResult {\n if (envelope.ok) {\n return envelope.meta.pagination !== undefined\n ? { ok: true, data: envelope.data, pagination: envelope.meta.pagination }\n : { ok: true, data: envelope.data }\n }\n const err = envelope.error\n return {\n ok: false,\n error: {\n code: err?.code ?? \"UNKNOWN\",\n message: err?.message ?? \"\",\n },\n }\n}\n\nexport function compactChainResult(envelope: ChainResultEnvelope): CompactChainResult {\n return {\n status: envelope.status,\n results: envelope.results.map((step) => {\n if (step.ok) {\n return step.data !== undefined\n ? { task: step.task, ok: true as const, data: step.data }\n : { task: step.task, ok: true as const }\n }\n return {\n task: step.task,\n ok: false as const,\n error: {\n code: step.error?.code ?? \"UNKNOWN\",\n message: step.error?.message ?? \"\",\n },\n }\n }),\n }\n}\n","import { compactRunResult } from \"@core/cli/formatters/compact.js\"\nimport type { TaskRequest } from \"../../core/contracts/task.js\"\nimport { executeTask } from \"../../core/routing/engine/index.js\"\nimport { createGithubClient } from \"../../gql/github-client.js\"\n\nconst GITHUB_GRAPHQL_ENDPOINT = \"https://api.github.com/graphql\"\n\ninterface ParsedRunFlags {\n task: string\n inputSource: \"stdin\" | { raw: string }\n skipGhPreflight: boolean\n verbose: boolean\n}\n\nexport function parseRunFlags(argv: string[]): ParsedRunFlags {\n const [task, ...rest] = argv\n if (!task || task.trim().length === 0) {\n throw new Error(\n \"Usage: ghx run <task> --input '<json>' | --input - [--check-gh-preflight] [--verbose]\",\n )\n }\n\n const inputIndex = rest.findIndex((arg) => arg === \"--input\")\n const inlineInput = rest.find((arg) => arg.startsWith(\"--input=\"))\n const inputCandidate = inputIndex >= 0 ? rest[inputIndex + 1] : undefined\n\n const verbose = rest.includes(\"--verbose\")\n\n if (inputCandidate === \"-\") {\n const skipGhPreflight = !rest.includes(\"--check-gh-preflight\")\n return { task, inputSource: \"stdin\", skipGhPreflight, verbose }\n }\n\n const inputRaw =\n inputCandidate && !inputCandidate.startsWith(\"--\")\n ? inputCandidate\n : inlineInput\n ? inlineInput.slice(\"--input=\".length)\n : undefined\n\n if (!inputRaw) {\n throw new Error(\"Missing --input JSON\")\n }\n\n const skipGhPreflight = !rest.includes(\"--check-gh-preflight\")\n return { task, inputSource: { raw: inputRaw }, skipGhPreflight, verbose }\n}\n\nfunction parseJsonInput(raw: string): Record<string, unknown> {\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new Error(\"Invalid JSON for --input\")\n }\n\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(\"--input must be a JSON object\")\n }\n\n return parsed as Record<string, unknown>\n}\n\nexport function readStdin(timeoutMs = 10_000): Promise<string> {\n return new Promise((resolve, reject) => {\n const parts: string[] = []\n const stream = process.stdin\n const timer = setTimeout(() => {\n stream.destroy()\n reject(new Error(\"Timed out reading from stdin\"))\n }, timeoutMs)\n stream.setEncoding(\"utf8\")\n stream.on(\"data\", (chunk: string) => parts.push(chunk))\n stream.on(\"end\", () => {\n clearTimeout(timer)\n resolve(parts.join(\"\"))\n })\n stream.on(\"error\", (err: Error) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n}\n\nfunction resolveGithubToken(): string {\n const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN\n if (!token || token.trim().length === 0) {\n throw new Error(\"Missing GITHUB_TOKEN or GH_TOKEN for GraphQL transport\")\n }\n\n return token\n}\n\nasync function executeGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<TData> {\n const response = await fetch(GITHUB_GRAPHQL_ENDPOINT, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n authorization: `Bearer ${token}`,\n \"user-agent\": \"ghx\",\n },\n body: JSON.stringify({ query, variables: variables ?? {} }),\n })\n\n const payload = (await response.json()) as {\n data?: TData\n errors?: Array<{ message?: string }>\n message?: string\n }\n\n if (!response.ok) {\n const message =\n payload.message ?? `GitHub GraphQL request failed with status ${response.status}`\n throw new Error(message)\n }\n\n if (Array.isArray(payload.errors) && payload.errors.length > 0) {\n const message = payload.errors[0]?.message ?? \"GitHub GraphQL returned errors\"\n throw new Error(message)\n }\n\n if (payload.data === undefined) {\n throw new Error(\"GitHub GraphQL response missing data\")\n }\n\n return payload.data\n}\n\nexport async function runCommand(argv: string[] = []): Promise<number> {\n if (argv.length === 0) {\n process.stdout.write(\n \"Usage: ghx run <task> --input '<json>' | --input - [--check-gh-preflight]\\n\",\n )\n return 1\n }\n\n const { task, inputSource, skipGhPreflight, verbose } = parseRunFlags(argv)\n const input =\n inputSource === \"stdin\" ? parseJsonInput(await readStdin()) : parseJsonInput(inputSource.raw)\n const githubToken = resolveGithubToken()\n\n const githubClient = createGithubClient({\n async execute<TData>(query: string, variables?: Record<string, unknown>): Promise<TData> {\n return executeGraphqlRequest<TData>(githubToken, query, variables)\n },\n })\n\n const request: TaskRequest = {\n task,\n input,\n }\n\n const result = await executeTask(request, {\n githubClient,\n githubToken,\n skipGhPreflight,\n })\n\n const output = verbose ? result : compactRunResult(result)\n process.stdout.write(`${JSON.stringify(output, null, verbose ? 2 : undefined)}\\n`)\n return 0\n}\n","import { compactChainResult } from \"@core/cli/formatters/compact.js\"\nimport { executeTasks } from \"@core/core/routing/engine/index.js\"\nimport { createResolutionCache } from \"@core/core/routing/resolution-cache.js\"\nimport { createGithubClient } from \"@core/gql/github-client.js\"\nimport type { GraphqlError, GraphqlRawResult } from \"@core/gql/transport.js\"\nimport { resolveGraphqlUrl } from \"@core/gql/transport.js\"\nimport { readStdin } from \"./run.js\"\n\nconst GITHUB_GRAPHQL_ENDPOINT = resolveGraphqlUrl()\n\ninterface ParsedChainFlags {\n stepsSource: \"stdin\" | { raw: string }\n skipGhPreflight: boolean\n verbose: boolean\n}\n\nexport function parseChainFlags(argv: string[]): ParsedChainFlags {\n const stepsIndex = argv.findIndex((arg) => arg === \"--steps\")\n const inlineSteps = argv.find((arg) => arg.startsWith(\"--steps=\"))\n const stepsCandidate = stepsIndex >= 0 ? argv[stepsIndex + 1] : undefined\n const verbose = argv.includes(\"--verbose\")\n\n if (stepsCandidate === \"-\") {\n const skipGhPreflight = !argv.includes(\"--check-gh-preflight\")\n return { stepsSource: \"stdin\", skipGhPreflight, verbose }\n }\n\n const stepsRaw =\n stepsCandidate && !stepsCandidate.startsWith(\"--\")\n ? stepsCandidate\n : inlineSteps\n ? inlineSteps.slice(\"--steps=\".length)\n : undefined\n\n if (!stepsRaw) {\n throw new Error(\"Missing --steps JSON\")\n }\n\n const skipGhPreflight = !argv.includes(\"--check-gh-preflight\")\n return { stepsSource: { raw: stepsRaw }, skipGhPreflight, verbose }\n}\n\nfunction parseJsonSteps(raw: string): Array<{ task: string; input: Record<string, unknown> }> {\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new Error(\"Invalid JSON for --steps\")\n }\n\n if (!Array.isArray(parsed)) {\n throw new Error(\"--steps must be a JSON array\")\n }\n\n for (const item of parsed) {\n if (\n typeof item !== \"object\" ||\n item === null ||\n typeof (item as Record<string, unknown>).task !== \"string\" ||\n typeof (item as Record<string, unknown>).input !== \"object\" ||\n (item as Record<string, unknown>).input === null\n ) {\n throw new Error('Each step must have \"task\" (string) and \"input\" (object) fields')\n }\n }\n\n return parsed as Array<{ task: string; input: Record<string, unknown> }>\n}\n\nfunction resolveGithubToken(): string {\n const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN\n if (!token || token.trim().length === 0) {\n throw new Error(\"Missing GITHUB_TOKEN or GH_TOKEN for GraphQL transport\")\n }\n\n return token\n}\n\ntype GqlPayload<TData> = {\n data?: TData\n errors?: GraphqlError[]\n message?: string\n}\n\nasync function fetchGqlPayload<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<GqlPayload<TData>> {\n const response = await fetch(GITHUB_GRAPHQL_ENDPOINT, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n authorization: `Bearer ${token}`,\n \"user-agent\": \"ghx\",\n },\n body: JSON.stringify({ query, variables: variables ?? {} }),\n signal: AbortSignal.timeout(30_000),\n })\n\n let payload: GqlPayload<TData>\n try {\n payload = (await response.json()) as GqlPayload<TData>\n } catch {\n throw new Error(`GitHub GraphQL returned non-JSON response (status ${response.status})`)\n }\n\n if (!response.ok) {\n const message =\n payload.message ?? `GitHub GraphQL request failed with status ${response.status}`\n throw new Error(message)\n }\n\n return payload\n}\n\nasync function executeGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<TData> {\n const payload = await fetchGqlPayload<TData>(token, query, variables)\n\n if (Array.isArray(payload.errors) && payload.errors.length > 0) {\n const message = payload.errors[0]?.message ?? \"GitHub GraphQL returned errors\"\n throw new Error(message)\n }\n\n if (payload.data === undefined) {\n throw new Error(\"GitHub GraphQL response missing data\")\n }\n\n return payload.data\n}\n\nasync function executeRawGraphqlRequest<TData>(\n token: string,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<GraphqlRawResult<TData>> {\n const payload = await fetchGqlPayload<TData>(token, query, variables)\n return {\n data: payload.data,\n errors: payload.errors?.length ? payload.errors : undefined,\n }\n}\n\nexport async function chainCommand(argv: string[] = []): Promise<number> {\n if (argv.length === 0) {\n process.stdout.write(\n \"Usage: ghx chain --steps '<json-array>' | --steps - [--check-gh-preflight] [--verbose]\\n\",\n )\n return 1\n }\n\n try {\n const { stepsSource, skipGhPreflight, verbose } = parseChainFlags(argv)\n const steps =\n stepsSource === \"stdin\" ? parseJsonSteps(await readStdin()) : parseJsonSteps(stepsSource.raw)\n const githubToken = resolveGithubToken()\n\n const githubClient = createGithubClient({\n async execute<TData>(query: string, variables?: Record<string, unknown>): Promise<TData> {\n return executeGraphqlRequest<TData>(githubToken, query, variables)\n },\n async executeRaw<TData>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<GraphqlRawResult<TData>> {\n return executeRawGraphqlRequest<TData>(githubToken, query, variables)\n },\n })\n\n const resolutionCache = createResolutionCache()\n const result = await executeTasks(steps, {\n githubClient,\n githubToken,\n skipGhPreflight,\n resolutionCache,\n })\n\n const output = verbose ? result : compactChainResult(result)\n process.stdout.write(`${JSON.stringify(output, null, verbose ? 2 : undefined)}\\n`)\n return result.status === \"success\" || result.status === \"partial\" ? 0 : 1\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n process.stderr.write(`${message}\\n`)\n return 1\n }\n}\n","import { access, appendFile, mkdir, readFile, writeFile } from \"node:fs/promises\"\nimport { homedir } from \"node:os\"\nimport { dirname, join } from \"node:path\"\nimport readline from \"node:readline/promises\"\nimport { fileURLToPath } from \"node:url\"\nimport type { ErrorCode } from \"@core/core/errors/codes.js\"\nimport { errorCodes } from \"@core/core/errors/codes.js\"\nimport { Ajv } from \"ajv\"\n\ntype SetupScope = \"user\" | \"project\"\n\ntype SetupOptions = {\n scope: SetupScope\n assumeYes: boolean\n dryRun: boolean\n verifyOnly: boolean\n track: boolean\n}\n\ntype SetupError = Error & { code?: ErrorCode }\n\nconst ajv = new Ajv({ allErrors: true, strict: false })\n\nconst setupOptionsSchema = {\n type: \"object\",\n additionalProperties: false,\n required: [\"scope\", \"assumeYes\", \"dryRun\", \"verifyOnly\", \"track\"],\n properties: {\n scope: {\n type: \"string\",\n enum: [\"user\", \"project\"],\n },\n assumeYes: { type: \"boolean\" },\n dryRun: { type: \"boolean\" },\n verifyOnly: { type: \"boolean\" },\n track: { type: \"boolean\" },\n },\n} as const\n\nconst validateSetupOptions = ajv.compile(setupOptionsSchema)\n\nconst setupCommandDirectory = dirname(fileURLToPath(import.meta.url))\nconst setupSkillAssetPathCandidates = [\n join(setupCommandDirectory, \"..\", \"..\", \"..\", \"skills\", \"using-ghx\", \"SKILL.md\"),\n join(setupCommandDirectory, \"..\", \"..\", \"skills\", \"using-ghx\", \"SKILL.md\"),\n]\n\nfunction isENOENT(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: string }).code === \"ENOENT\"\n )\n}\n\nfunction createSetupError(message: string, code: ErrorCode): SetupError {\n const error = new Error(message) as SetupError\n error.code = code\n return error\n}\n\nasync function loadSetupSkillContent(): Promise<string> {\n for (const candidatePath of setupSkillAssetPathCandidates) {\n try {\n return await readFile(candidatePath, \"utf8\")\n } catch (error) {\n if (isENOENT(error)) {\n continue\n }\n\n throw error\n }\n }\n\n throw createSetupError(\n `Setup skill asset not found. Checked: ${setupSkillAssetPathCandidates.join(\", \")}`,\n errorCodes.NotFound,\n )\n}\n\nfunction usage(): string {\n return \"Usage: ghx setup --scope <user|project> [--yes] [--dry-run] [--verify] [--track]\"\n}\n\nfunction parseScope(argv: string[]): SetupScope | undefined {\n const inline = argv.find((arg) => arg.startsWith(\"--scope=\"))\n if (inline) {\n const raw = inline.slice(\"--scope=\".length)\n if (raw === \"user\" || raw === \"project\") {\n return raw\n }\n return undefined\n }\n\n const scopeIndex = argv.findIndex((arg) => arg === \"--scope\")\n if (scopeIndex < 0) {\n return undefined\n }\n\n const value = argv[scopeIndex + 1]\n if (value === \"user\" || value === \"project\") {\n return value\n }\n\n return undefined\n}\n\nfunction parseArgs(argv: string[]): SetupOptions | null {\n const scope = parseScope(argv)\n if (!scope) {\n return null\n }\n\n const options: SetupOptions = {\n scope,\n assumeYes: argv.includes(\"--yes\"),\n dryRun: argv.includes(\"--dry-run\"),\n verifyOnly: argv.includes(\"--verify\"),\n track: argv.includes(\"--track\"),\n }\n\n if (!validateSetupOptions(options)) {\n return null\n }\n\n return options\n}\n\nfunction resolveSkillPath(scope: SetupScope): string {\n const base = scope === \"user\" ? homedir() : process.cwd()\n return join(base, \".agents\", \"skills\", \"ghx\", \"SKILL.md\")\n}\n\nfunction resolveTrackingPath(): string {\n return join(homedir(), \".agents\", \"ghx\", \"setup-events.jsonl\")\n}\n\nasync function writeTrackingEvent(options: {\n track: boolean\n scope: SetupScope\n mode: \"apply\"\n success: boolean\n}): Promise<void> {\n if (!options.track) {\n return\n }\n\n const trackingPath = resolveTrackingPath()\n await mkdir(join(homedir(), \".agents\", \"ghx\"), { recursive: true })\n await appendFile(\n trackingPath,\n `${JSON.stringify({\n command: \"setup\",\n scope: options.scope,\n mode: options.mode,\n success: options.success,\n timestamp: new Date().toISOString(),\n })}\\n`,\n \"utf8\",\n )\n}\n\nasync function confirmOverwrite(skillPath: string): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n return false\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n\n try {\n const answer = await rl.question(`Skill already exists at ${skillPath}. Overwrite? [y/N] `)\n const normalized = answer.trim().toLowerCase()\n return normalized === \"y\" || normalized === \"yes\"\n } finally {\n rl.close()\n }\n}\n\nasync function verifySkill(skillPath: string): Promise<boolean> {\n try {\n const content = await readFile(skillPath, \"utf8\")\n return content.includes(\"ghx capabilities\")\n } catch (error) {\n if (isENOENT(error)) {\n return false\n }\n\n throw error\n }\n}\n\nasync function skillFileExists(skillPath: string): Promise<boolean> {\n try {\n await access(skillPath)\n return true\n } catch (error) {\n if (isENOENT(error)) {\n return false\n }\n\n throw error\n }\n}\n\nexport async function setupCommand(argv: string[] = []): Promise<number> {\n const parsed = parseArgs(argv)\n if (!parsed) {\n process.stderr.write(`${usage()}\\n`)\n return 1\n }\n\n const skillPath = resolveSkillPath(parsed.scope)\n\n try {\n if (parsed.verifyOnly) {\n const ok = await verifySkill(skillPath)\n if (!ok) {\n process.stderr.write(`Verify failed: skill not installed at ${skillPath}\\n`)\n return 1\n }\n\n process.stdout.write(`Verify passed: skill installed at ${skillPath}\\n`)\n return 0\n }\n\n if (parsed.dryRun) {\n process.stdout.write(`Dry run: would write ${skillPath}\\n`)\n return 0\n }\n\n const alreadyExists = await skillFileExists(skillPath)\n if (alreadyExists && !parsed.assumeYes) {\n const approved = await confirmOverwrite(skillPath)\n if (!approved) {\n process.stderr.write(\n `Skill already exists at ${skillPath}. Re-run with --yes or confirm overwrite interactively.\\n`,\n )\n await writeTrackingEvent({\n track: parsed.track,\n scope: parsed.scope,\n mode: \"apply\",\n success: false,\n })\n return 1\n }\n }\n\n const skillContent = await loadSetupSkillContent()\n await mkdir(dirname(skillPath), { recursive: true })\n await writeFile(skillPath, skillContent, \"utf8\")\n\n process.stdout.write(`Setup complete: wrote ${skillPath}\\n`)\n process.stdout.write(\"Try: ghx capabilities list\\n\")\n await writeTrackingEvent({\n track: parsed.track,\n scope: parsed.scope,\n mode: \"apply\",\n success: true,\n })\n return 0\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n process.stderr.write(`Setup failed: ${message}\\n`)\n return 1\n }\n}\n"],"mappings":"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","names":["parseArgs","skipGhPreflight","GITHUB_GRAPHQL_ENDPOINT","skipGhPreflight","resolveGithubToken","executeGraphqlRequest","usage","parseArgs","usage"]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  import { DocumentNode } from 'graphql';
2
2
 
3
+ /**
4
+ * All possible error codes returned in {@link ResultError.code}.
5
+ *
6
+ * Retryable codes: `RATE_LIMIT`, `NETWORK`, `SERVER`.
7
+ */
3
8
  declare const errorCodes: {
4
9
  readonly Auth: "AUTH";
5
10
  readonly NotFound: "NOT_FOUND";
@@ -10,24 +15,49 @@ declare const errorCodes: {
10
15
  readonly AdapterUnsupported: "ADAPTER_UNSUPPORTED";
11
16
  readonly Unknown: "UNKNOWN";
12
17
  };
18
+ /** Union of all error code string literals. */
13
19
  type ErrorCode = (typeof errorCodes)[keyof typeof errorCodes];
14
20
 
21
+ /**
22
+ * All possible reason codes explaining why a particular route was selected.
23
+ *
24
+ * Included in {@link ResultMeta.reason}.
25
+ */
15
26
  declare const routeReasonCodes: readonly ["INPUT_VALIDATION", "OUTPUT_VALIDATION", "CARD_PREFERRED", "CARD_FALLBACK", "PREFLIGHT_FAILED", "ENV_CONSTRAINT", "CAPABILITY_LIMIT", "DEFAULT_POLICY"];
27
+ /** Reason code explaining why a particular route was selected. */
16
28
  type RouteReasonCode = (typeof routeReasonCodes)[number];
17
29
 
30
+ /** The transport route used to execute a capability. */
18
31
  type RouteSource = "cli" | "rest" | "graphql";
32
+ /**
33
+ * Structured error returned inside a {@link ResultEnvelope} when `ok` is `false`.
34
+ *
35
+ * @see {@link ErrorCode} for the full list of error codes.
36
+ */
19
37
  interface ResultError {
20
38
  code: ErrorCode;
21
39
  message: string;
22
40
  retryable: boolean;
23
41
  details?: Record<string, unknown>;
24
42
  }
43
+ /**
44
+ * Records a single route attempt during execution.
45
+ *
46
+ * The routing engine may try multiple routes (preferred → fallback).
47
+ * Each attempt is logged here regardless of outcome.
48
+ */
25
49
  interface AttemptMeta {
26
50
  route: RouteSource;
27
51
  status: "success" | "error" | "skipped";
28
52
  error_code?: ErrorCode;
29
53
  duration_ms?: number;
30
54
  }
55
+ /**
56
+ * Metadata attached to every {@link ResultEnvelope}.
57
+ *
58
+ * Provides observability into which route was used, why, how long it took,
59
+ * and the full list of route attempts.
60
+ */
31
61
  interface ResultMeta {
32
62
  capability_id: string;
33
63
  route_used?: RouteSource;
@@ -47,19 +77,35 @@ interface ResultMeta {
47
77
  tokens_out?: number;
48
78
  };
49
79
  }
80
+ /**
81
+ * The universal response contract for all ghx operations.
82
+ *
83
+ * Every call to {@link executeTask} returns a `ResultEnvelope` — it never throws.
84
+ * Check `ok` to distinguish success from failure; `data` and `error` are exclusive.
85
+ *
86
+ * @typeParam TData - The shape of the success payload, varies per capability.
87
+ */
50
88
  interface ResultEnvelope<TData = unknown> {
51
89
  ok: boolean;
52
90
  data?: TData;
53
91
  error?: ResultError;
54
92
  meta: ResultMeta;
55
93
  }
94
+ /** Aggregate outcome of a batch execution via {@link executeTasks}. */
56
95
  type ChainStatus = "success" | "partial" | "failed";
96
+ /** Result of a single step within a chain execution. */
57
97
  interface ChainStepResult {
58
98
  task: string;
59
99
  ok: boolean;
60
100
  data?: unknown;
61
101
  error?: ResultError;
62
102
  }
103
+ /**
104
+ * Response envelope for batch operations via {@link executeTasks}.
105
+ *
106
+ * Contains per-step results and aggregate metadata
107
+ * (total, succeeded, failed counts).
108
+ */
63
109
  interface ChainResultEnvelope {
64
110
  status: ChainStatus;
65
111
  results: ChainStepResult[];
@@ -71,7 +117,13 @@ interface ChainResultEnvelope {
71
117
  };
72
118
  }
73
119
 
120
+ /** A dotted capability identifier (e.g. `"pr.view"`, `"issue.labels.add"`). */
74
121
  type TaskId = string;
122
+ /**
123
+ * A request to execute a single ghx capability.
124
+ *
125
+ * @typeParam TInput - The shape of the input payload, varies per capability.
126
+ */
75
127
  interface TaskRequest<TInput = Record<string, unknown>> {
76
128
  task: TaskId;
77
129
  input: TInput;
@@ -82,13 +134,28 @@ type ExecuteTaskFn = (request: {
82
134
  input: Record<string, unknown>;
83
135
  options?: Record<string, unknown>;
84
136
  }) => Promise<ResultEnvelope>;
137
+ /**
138
+ * Creates an execute tool suitable for wiring into an AI agent's tool loop.
139
+ *
140
+ * Wraps the execution engine into a simple `{ execute(capabilityId, params) }` shape.
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * const tool = createExecuteTool({
145
+ * executeTask: (req) => executeTask(req, deps),
146
+ * })
147
+ * const result = await tool.execute("repo.view", { owner: "aryeko", name: "ghx" })
148
+ * ```
149
+ */
85
150
  declare function createExecuteTool(deps: {
86
151
  executeTask: ExecuteTaskFn;
87
152
  }): {
88
153
  execute(capabilityId: string, params: Record<string, unknown>, options?: Record<string, unknown>): Promise<ResultEnvelope>;
89
154
  };
90
155
 
156
+ /** Represents a JSON Schema definition for card inputs/outputs. */
91
157
  type JsonSchema = Record<string, unknown>;
158
+ /** Defines when a fallback route should override the preferred route. */
92
159
  interface SuitabilityRule {
93
160
  when: "always" | "env" | "params";
94
161
  predicate: string;
@@ -173,16 +240,25 @@ interface NullLiteralInject {
173
240
  target: string;
174
241
  source: "null_literal";
175
242
  }
243
+ /** A specification for how to inject a resolved Phase 1 value into Phase 2. */
176
244
  type InjectSpec = ScalarInject | MapArrayInject | InputPassthroughInject | NullLiteralInject;
245
+ /** Defines the GraphQL query to run during the Phase 1 lookup. */
177
246
  interface LookupSpec {
178
247
  operationName: string;
179
248
  documentPath: string;
180
249
  vars: Record<string, string>;
181
250
  }
251
+ /** Configuration for a Phase 1 node ID lookup prior to mutation execution. */
182
252
  interface ResolutionConfig {
183
253
  lookup: LookupSpec;
184
254
  inject: InjectSpec[];
185
255
  }
256
+ /**
257
+ * Declarative configuration for a single ghx capability.
258
+ *
259
+ * Defines the capability's identity, input/output schemas, routing preferences,
260
+ * and adapter-specific execution details (GraphQL, CLI, REST).
261
+ */
186
262
  interface OperationCard<Input = Record<string, unknown>> {
187
263
  capability_id: string;
188
264
  version: string;
@@ -239,6 +315,7 @@ type SafeRunnerOptions = {
239
315
  };
240
316
  declare function createSafeCliCommandRunner(options?: SafeRunnerOptions): CliCommandRunner;
241
317
 
318
+ /** Structured explanation of a capability, returned by {@link explainCapability}. */
242
319
  type CapabilityExplanation = {
243
320
  capability_id: string;
244
321
  purpose: string;
@@ -248,11 +325,19 @@ type CapabilityExplanation = {
248
325
  fallback_routes: Array<"cli" | "graphql" | "rest">;
249
326
  output_fields: string[];
250
327
  };
328
+ /**
329
+ * Return a structured explanation of a capability by its ID.
330
+ *
331
+ * @throws If the capability ID is unknown.
332
+ */
251
333
  declare function explainCapability(capabilityId: string): CapabilityExplanation;
252
334
 
335
+ /** Return a copy of all registered operation cards, in canonical order. */
253
336
  declare function listOperationCards(): OperationCard[];
337
+ /** Look up a single operation card by its dotted capability ID (e.g. `"pr.view"`). */
254
338
  declare function getOperationCard(capabilityId: string): OperationCard | undefined;
255
339
 
340
+ /** Summary of a capability, returned by {@link listCapabilities}. */
256
341
  type CapabilityListItem = {
257
342
  capability_id: string;
258
343
  description: string;
@@ -260,31 +345,56 @@ type CapabilityListItem = {
260
345
  optional_inputs: string[];
261
346
  optional_inputs_detail: Record<string, unknown>;
262
347
  };
348
+ /**
349
+ * List all available capabilities, optionally filtered by domain.
350
+ *
351
+ * @param domain - Filter by top-level domain (e.g. `"pr"`, `"issue"`, `"workflow"`).
352
+ */
263
353
  declare function listCapabilities(domain?: string): CapabilityListItem[];
264
354
 
265
355
  type GraphqlVariables = Record<string, unknown>;
356
+ /** A single error from a GraphQL response. */
266
357
  type GraphqlError = {
267
358
  message: string;
268
359
  path?: ReadonlyArray<string | number>;
269
360
  extensions?: Record<string, unknown>;
270
361
  };
362
+ /** Raw GraphQL response containing both `data` and `errors` fields. */
271
363
  type GraphqlRawResult<TData> = {
272
364
  data: TData | undefined;
273
365
  errors: GraphqlError[] | undefined;
274
366
  };
275
367
  type GraphqlDocument = string | DocumentNode;
368
+ /**
369
+ * Low-level transport interface for sending GraphQL queries.
370
+ *
371
+ * Implement this to use a custom HTTP client, proxy, or mock.
372
+ * Pass to {@link createGithubClient} or {@link createGraphqlClient}.
373
+ */
276
374
  interface GraphqlTransport {
277
375
  execute<TData>(query: string, variables?: GraphqlVariables): Promise<TData>;
278
376
  executeRaw?<TData>(query: string, variables?: GraphqlVariables): Promise<GraphqlRawResult<TData>>;
279
377
  }
378
+ /**
379
+ * Higher-level GraphQL client with `query` and `queryRaw` methods.
380
+ *
381
+ * Created by {@link createGraphqlClient} from a {@link GraphqlTransport}.
382
+ */
280
383
  interface GraphqlClient {
281
384
  query<TData, TVariables extends GraphqlVariables = GraphqlVariables>(query: GraphqlDocument, variables?: TVariables): Promise<TData>;
282
385
  queryRaw<TData, TVariables extends GraphqlVariables = GraphqlVariables>(query: GraphqlDocument, variables?: TVariables): Promise<GraphqlRawResult<TData>>;
283
386
  }
387
+ /** Options for creating a token-based GraphQL transport. */
284
388
  type TokenClientOptions = {
285
389
  token: string;
286
390
  graphqlUrl?: string;
287
391
  };
392
+ /**
393
+ * Create a {@link GraphqlClient} from a {@link GraphqlTransport}.
394
+ *
395
+ * Wraps the raw transport `execute` method with query string normalization
396
+ * and a `queryRaw` method that returns settled results.
397
+ */
288
398
  declare function createGraphqlClient(transport: GraphqlTransport): GraphqlClient;
289
399
 
290
400
  type Maybe<T> = T | null;
@@ -1013,6 +1123,14 @@ type ProjectV2ItemFieldUpdateData = {
1013
1123
  itemId: string;
1014
1124
  };
1015
1125
 
1126
+ /**
1127
+ * High-level GitHub API client with 50+ typed methods.
1128
+ *
1129
+ * Extends {@link GraphqlClient} with domain-specific helpers for issues, PRs,
1130
+ * releases, projects, and repos. Domain modules are lazy-loaded on first use.
1131
+ *
1132
+ * Create via {@link createGithubClientFromToken} or {@link createGithubClient}.
1133
+ */
1016
1134
  interface GithubClient extends GraphqlClient {
1017
1135
  fetchRepoView(input: RepoViewInput): Promise<RepoViewData>;
1018
1136
  fetchIssueCommentsList(input: IssueCommentsListInput): Promise<IssueCommentsListData>;
@@ -1067,9 +1185,28 @@ interface GithubClient extends GraphqlClient {
1067
1185
  removeProjectV2Item(input: ProjectV2ItemRemoveInput): Promise<ProjectV2ItemRemoveData>;
1068
1186
  updateProjectV2ItemField(input: ProjectV2ItemFieldUpdateInput): Promise<ProjectV2ItemFieldUpdateData>;
1069
1187
  }
1188
+ /**
1189
+ * Create a {@link GithubClient} from a token (string or options object).
1190
+ *
1191
+ * Uses the default `fetch`-based transport. For custom transports, use
1192
+ * {@link createGithubClient} instead.
1193
+ *
1194
+ * @throws If the token is empty.
1195
+ */
1070
1196
  declare function createGithubClientFromToken(tokenOrOptions: string | TokenClientOptions): GithubClient;
1197
+ /**
1198
+ * Create a {@link GithubClient} from a custom {@link GraphqlTransport}.
1199
+ *
1200
+ * Use this for enterprise endpoints, proxies, or test mocking.
1201
+ */
1071
1202
  declare function createGithubClient(transport: GraphqlTransport): GithubClient;
1072
1203
 
1204
+ /**
1205
+ * Cache for Phase 1 resolution lookups in batch execution.
1206
+ *
1207
+ * Avoids redundant GraphQL lookups when the same entity is referenced
1208
+ * by multiple steps in a chain.
1209
+ */
1073
1210
  interface ResolutionCache {
1074
1211
  get(key: string): unknown | undefined;
1075
1212
  set(key: string, value: unknown): void;
@@ -1083,9 +1220,20 @@ interface ResolutionCacheOptions {
1083
1220
  /** Maximum number of cached entries. Default: 200. */
1084
1221
  maxEntries?: number;
1085
1222
  }
1223
+ /**
1224
+ * Create an in-memory resolution cache with TTL and FIFO eviction.
1225
+ *
1226
+ * Pass to `ExecutionDeps.resolutionCache` for batch operations.
1227
+ */
1086
1228
  declare function createResolutionCache(opts?: ResolutionCacheOptions): ResolutionCache;
1229
+ /** Build a deterministic cache key from an operation name and variables. */
1087
1230
  declare function buildCacheKey(operationName: string, variables: Record<string, unknown>): string;
1088
1231
 
1232
+ /**
1233
+ * Dependencies required by the execution engine.
1234
+ *
1235
+ * Pass to {@link executeTask} or {@link executeTasks}.
1236
+ */
1089
1237
  type ExecutionDeps = {
1090
1238
  githubClient: GithubClient;
1091
1239
  githubToken?: string | null;
@@ -1097,7 +1245,19 @@ type ExecutionDeps = {
1097
1245
  resolutionCache?: ResolutionCache;
1098
1246
  };
1099
1247
 
1248
+ /**
1249
+ * Execute a single GitHub operation.
1250
+ *
1251
+ * Looks up the operation card, validates input, selects a route, and returns
1252
+ * a {@link ResultEnvelope}. Never throws.
1253
+ */
1100
1254
  declare function executeTask(request: TaskRequest, deps: ExecutionDeps): Promise<ResultEnvelope>;
1255
+ /**
1256
+ * Execute multiple operations as a batch.
1257
+ *
1258
+ * Classifies steps, resolves node IDs via Phase 1 lookups, batches GraphQL
1259
+ * operations, and returns a {@link ChainResultEnvelope}.
1260
+ */
1101
1261
  declare function executeTasks(requests: Array<{
1102
1262
  task: string;
1103
1263
  input: Record<string, unknown>;
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  getOperationCard,
11
11
  listCapabilities,
12
12
  listOperationCards
13
- } from "./chunk-M5PJLKL5.js";
13
+ } from "./chunk-T3L2VDOS.js";
14
14
  import "./chunk-H7CLZHRO.js";
15
15
  import "./chunk-NQ53ETYV.js";
16
16
  import "./chunk-TGL33GEA.js";
@@ -24,7 +24,7 @@ import "./chunk-GQO6BHJV.js";
24
24
  import "./chunk-R3CBGJZX.js";
25
25
  import {
26
26
  createGraphqlClient
27
- } from "./chunk-HEHONZTO.js";
27
+ } from "./chunk-C2KRRSSX.js";
28
28
 
29
29
  // src/core/execute/execute-tool.ts
30
30
  function createExecuteTool(deps) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/execute/execute-tool.ts"],"sourcesContent":["import type { ResultEnvelope } from \"../contracts/envelope.js\"\n\ntype ExecuteTaskFn = (request: {\n task: string\n input: Record<string, unknown>\n options?: Record<string, unknown>\n}) => Promise<ResultEnvelope>\n\nexport function createExecuteTool(deps: { executeTask: ExecuteTaskFn }) {\n return {\n execute(\n capabilityId: string,\n params: Record<string, unknown>,\n options?: Record<string, unknown>,\n ): Promise<ResultEnvelope> {\n const request = {\n task: capabilityId,\n input: params,\n ...(options ? { options } : {}),\n }\n\n return deps.executeTask(request)\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQO,SAAS,kBAAkB,MAAsC;AACtE,SAAO;AAAA,IACL,QACE,cACA,QACA,SACyB;AACzB,YAAM,UAAU;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC/B;AAEA,aAAO,KAAK,YAAY,OAAO;AAAA,IACjC;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/core/execute/execute-tool.ts"],"sourcesContent":["import type { ResultEnvelope } from \"../contracts/envelope.js\"\n\ntype ExecuteTaskFn = (request: {\n task: string\n input: Record<string, unknown>\n options?: Record<string, unknown>\n}) => Promise<ResultEnvelope>\n\n/**\n * Creates an execute tool suitable for wiring into an AI agent's tool loop.\n *\n * Wraps the execution engine into a simple `{ execute(capabilityId, params) }` shape.\n *\n * @example\n * ```ts\n * const tool = createExecuteTool({\n * executeTask: (req) => executeTask(req, deps),\n * })\n * const result = await tool.execute(\"repo.view\", { owner: \"aryeko\", name: \"ghx\" })\n * ```\n */\nexport function createExecuteTool(deps: { executeTask: ExecuteTaskFn }) {\n return {\n execute(\n capabilityId: string,\n params: Record<string, unknown>,\n options?: Record<string, unknown>,\n ): Promise<ResultEnvelope> {\n const request = {\n task: capabilityId,\n input: params,\n ...(options ? { options } : {}),\n }\n\n return deps.executeTask(request)\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBO,SAAS,kBAAkB,MAAsC;AACtE,SAAO;AAAA,IACL,QACE,cACA,QACA,SACyB;AACzB,YAAM,UAAU;AAAA,QACd,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC/B;AAEA,aAAO,KAAK,YAAY,OAAO;AAAA,IACjC;AAAA,EACF;AACF;","names":[]}
@@ -51,7 +51,7 @@ import {
51
51
  } from "./chunk-OQWLEFAH.js";
52
52
  import {
53
53
  createGraphqlRequestClient
54
- } from "./chunk-HEHONZTO.js";
54
+ } from "./chunk-C2KRRSSX.js";
55
55
 
56
56
  // src/gql/domains/issue-mutations.ts
57
57
  function parseIssueNode(issue) {
@@ -642,4 +642,4 @@ export {
642
642
  runIssueReopen,
643
643
  runIssueUpdate
644
644
  };
645
- //# sourceMappingURL=issue-mutations-OW464JP3.js.map
645
+ //# sourceMappingURL=issue-mutations-DIWPF3JH.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-OQWLEFAH.js";
13
13
  import {
14
14
  createGraphqlRequestClient
15
- } from "./chunk-HEHONZTO.js";
15
+ } from "./chunk-C2KRRSSX.js";
16
16
 
17
17
  // src/gql/domains/issue-queries.ts
18
18
  async function runIssueView(transport, input) {
@@ -90,4 +90,4 @@ export {
90
90
  runIssueList,
91
91
  runIssueView
92
92
  };
93
- //# sourceMappingURL=issue-queries-ORG3VPK4.js.map
93
+ //# sourceMappingURL=issue-queries-YQL65J7X.js.map
@@ -33,7 +33,7 @@ import {
33
33
  } from "./chunk-OQWLEFAH.js";
34
34
  import {
35
35
  createGraphqlRequestClient
36
- } from "./chunk-HEHONZTO.js";
36
+ } from "./chunk-C2KRRSSX.js";
37
37
 
38
38
  // src/gql/operations/review-thread-state.generated.ts
39
39
  var ReviewThreadStateDocument = `
@@ -481,4 +481,4 @@ export {
481
481
  runSubmitPrReview,
482
482
  runUnresolveReviewThread
483
483
  };
484
- //# sourceMappingURL=pr-mutations-WOTG6FAB.js.map
484
+ //# sourceMappingURL=pr-mutations-BVHDCAPR.js.map