maxsimcli 5.0.6 → 5.1.0

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 (91) hide show
  1. package/README.md +316 -288
  2. package/dist/assets/CHANGELOG.md +14 -0
  3. package/dist/assets/hooks/maxsim-capture-learnings.cjs +128 -0
  4. package/dist/assets/hooks/maxsim-capture-learnings.cjs.map +1 -0
  5. package/dist/assets/hooks/maxsim-check-update.cjs +126 -88
  6. package/dist/assets/hooks/maxsim-check-update.cjs.map +1 -1
  7. package/dist/assets/hooks/maxsim-notification-sound.cjs +87 -43
  8. package/dist/assets/hooks/maxsim-notification-sound.cjs.map +1 -1
  9. package/dist/assets/hooks/maxsim-statusline.cjs +45 -171
  10. package/dist/assets/hooks/maxsim-statusline.cjs.map +1 -1
  11. package/dist/assets/hooks/maxsim-stop-sound.cjs +86 -43
  12. package/dist/assets/hooks/maxsim-stop-sound.cjs.map +1 -1
  13. package/dist/assets/hooks/maxsim-sync-reminder.cjs +72 -21
  14. package/dist/assets/hooks/maxsim-sync-reminder.cjs.map +1 -1
  15. package/dist/assets/templates/agents/AGENTS.md +62 -51
  16. package/dist/assets/templates/agents/executor.md +44 -59
  17. package/dist/assets/templates/agents/planner.md +36 -31
  18. package/dist/assets/templates/agents/researcher.md +35 -43
  19. package/dist/assets/templates/agents/verifier.md +29 -31
  20. package/dist/assets/templates/commands/maxsim/debug.md +20 -154
  21. package/dist/assets/templates/commands/maxsim/execute.md +19 -33
  22. package/dist/assets/templates/commands/maxsim/go.md +21 -20
  23. package/dist/assets/templates/commands/maxsim/help.md +5 -14
  24. package/dist/assets/templates/commands/maxsim/init.md +18 -40
  25. package/dist/assets/templates/commands/maxsim/plan.md +22 -37
  26. package/dist/assets/templates/commands/maxsim/progress.md +15 -16
  27. package/dist/assets/templates/commands/maxsim/quick.md +18 -29
  28. package/dist/assets/templates/commands/maxsim/settings.md +18 -26
  29. package/dist/assets/templates/references/continuation-format.md +2 -4
  30. package/dist/assets/templates/references/model-profiles.md +2 -2
  31. package/dist/assets/templates/references/planning-config.md +10 -11
  32. package/dist/assets/templates/references/self-improvement.md +120 -0
  33. package/dist/assets/templates/rules/conventions.md +1 -1
  34. package/dist/assets/templates/rules/verification-protocol.md +1 -1
  35. package/dist/assets/templates/skills/brainstorming/SKILL.md +35 -26
  36. package/dist/assets/templates/skills/code-review/SKILL.md +78 -55
  37. package/dist/assets/templates/skills/commit-conventions/SKILL.md +70 -36
  38. package/dist/assets/templates/skills/github-operations/SKILL.md +142 -0
  39. package/dist/assets/templates/skills/handoff-contract/SKILL.md +62 -28
  40. package/dist/assets/templates/skills/maxsim-batch/SKILL.md +68 -42
  41. package/dist/assets/templates/skills/maxsim-simplify/SKILL.md +65 -40
  42. package/dist/assets/templates/skills/project-memory/SKILL.md +121 -0
  43. package/dist/assets/templates/skills/research/SKILL.md +126 -0
  44. package/dist/assets/templates/skills/roadmap-writing/SKILL.md +71 -68
  45. package/dist/assets/templates/skills/systematic-debugging/SKILL.md +37 -25
  46. package/dist/assets/templates/skills/tdd/SKILL.md +36 -39
  47. package/dist/assets/templates/skills/using-maxsim/SKILL.md +69 -55
  48. package/dist/assets/templates/skills/verification/SKILL.md +167 -0
  49. package/dist/assets/templates/workflows/batch.md +249 -268
  50. package/dist/assets/templates/workflows/diagnose-issues.md +225 -151
  51. package/dist/assets/templates/workflows/execute-plan.md +191 -981
  52. package/dist/assets/templates/workflows/execute.md +350 -309
  53. package/dist/assets/templates/workflows/go.md +119 -138
  54. package/dist/assets/templates/workflows/health.md +71 -114
  55. package/dist/assets/templates/workflows/help.md +85 -147
  56. package/dist/assets/templates/workflows/init-existing.md +180 -1373
  57. package/dist/assets/templates/workflows/init.md +53 -165
  58. package/dist/assets/templates/workflows/new-milestone.md +91 -334
  59. package/dist/assets/templates/workflows/new-project.md +165 -1384
  60. package/dist/assets/templates/workflows/plan-create.md +182 -73
  61. package/dist/assets/templates/workflows/plan-discuss.md +89 -82
  62. package/dist/assets/templates/workflows/plan-research.md +191 -85
  63. package/dist/assets/templates/workflows/plan.md +122 -58
  64. package/dist/assets/templates/workflows/progress.md +76 -310
  65. package/dist/assets/templates/workflows/quick.md +70 -495
  66. package/dist/assets/templates/workflows/sdd.md +231 -221
  67. package/dist/assets/templates/workflows/settings.md +90 -120
  68. package/dist/assets/templates/workflows/verify-phase.md +296 -258
  69. package/dist/cli.cjs +17 -23465
  70. package/dist/cli.cjs.map +1 -1
  71. package/dist/install.cjs +356 -8358
  72. package/dist/install.cjs.map +1 -1
  73. package/package.json +16 -22
  74. package/dist/assets/templates/skills/agent-system-map/SKILL.md +0 -92
  75. package/dist/assets/templates/skills/evidence-collection/SKILL.md +0 -87
  76. package/dist/assets/templates/skills/github-artifact-protocol/SKILL.md +0 -67
  77. package/dist/assets/templates/skills/github-tools-guide/SKILL.md +0 -89
  78. package/dist/assets/templates/skills/input-validation/SKILL.md +0 -51
  79. package/dist/assets/templates/skills/memory-management/SKILL.md +0 -75
  80. package/dist/assets/templates/skills/research-methodology/SKILL.md +0 -137
  81. package/dist/assets/templates/skills/sdd/SKILL.md +0 -91
  82. package/dist/assets/templates/skills/tool-priority-guide/SKILL.md +0 -80
  83. package/dist/assets/templates/skills/verification-before-completion/SKILL.md +0 -71
  84. package/dist/assets/templates/skills/verification-gates/SKILL.md +0 -169
  85. package/dist/assets/templates/workflows/discuss-phase.md +0 -683
  86. package/dist/assets/templates/workflows/research-phase.md +0 -73
  87. package/dist/assets/templates/workflows/verify-work.md +0 -572
  88. package/dist/core-D5zUr9cb.cjs +0 -4305
  89. package/dist/core-D5zUr9cb.cjs.map +0 -1
  90. package/dist/skills-CjFWZIGM.cjs +0 -6824
  91. package/dist/skills-CjFWZIGM.cjs.map +0 -1
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","names":["isPlainObject","withDefaults","VERSION","noop","withDefaults","VERSION","VERSION","noop","createLogger","VERSION","Octokit","Hook","VERSION","VERSION","VERSION","VERSION","ENDPOINTS","VERSION","VERSION","Core","VERSION","VERSION","wrapRequest","BottleneckLight","Bottleneck","execFile","path","os","tty","tty","FOLDER","Buffer2","EventEmitter","path","os","fsp","fs","path","path","fs","node_process","node_buffer","node_process","node_process","path","fs","path","fs","os","path","fsp","statePathUtil","roadmapPathUtil","statePath","fsp","fs","roadmapPath","roadmapPathUtil","statePath","statePathUtil","archivePathHelper","fsp","path","styles","hasFlag","process","os","tty","path","fs","path","fs","roadmapPathUtil","statePathUtil","configPathUtil","path","fs","fsp","path","path","os","fs","path","fs","path","fs","fs","path","os","path","fs","fs","path"],"sources":["../../../node_modules/universal-user-agent/index.js","../../../node_modules/before-after-hook/lib/register.js","../../../node_modules/before-after-hook/lib/add.js","../../../node_modules/before-after-hook/lib/remove.js","../../../node_modules/before-after-hook/index.js","../../../node_modules/@octokit/endpoint/dist-bundle/index.js","../../../node_modules/fast-content-type-parse/index.js","../../../node_modules/json-with-bigint/json-with-bigint.js","../../../node_modules/@octokit/request-error/dist-src/index.js","../../../node_modules/@octokit/request/dist-bundle/index.js","../../../node_modules/@octokit/graphql/dist-bundle/index.js","../../../node_modules/@octokit/auth-token/dist-bundle/index.js","../../../node_modules/@octokit/core/dist-src/version.js","../../../node_modules/@octokit/core/dist-src/index.js","../../../node_modules/@octokit/plugin-request-log/dist-src/version.js","../../../node_modules/@octokit/plugin-request-log/dist-src/index.js","../../../node_modules/@octokit/rest/node_modules/@octokit/plugin-paginate-rest/dist-bundle/index.js","../../../node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/version.js","../../../node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/generated/endpoints.js","../../../node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/endpoints-to-methods.js","../../../node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/index.js","../../../node_modules/@octokit/rest/dist-src/version.js","../../../node_modules/@octokit/rest/dist-src/index.js","../../../node_modules/bottleneck/light.js","../../../node_modules/@octokit/plugin-throttling/dist-bundle/index.js","../../../node_modules/@octokit/plugin-retry/dist-bundle/index.js","../src/github/types.ts","../src/github/client.ts","../src/github/issues.ts","../src/github/projects.ts","../src/github/labels.ts","../src/github/milestones.ts","../src/github/templates.ts","../../../node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/has-flag/index.js","../../../node_modules/supports-color/index.js","../../../node_modules/debug/src/node.js","../../../node_modules/debug/src/index.js","../../../node_modules/@kwsites/file-exists/dist/src/index.js","../../../node_modules/@kwsites/file-exists/dist/index.js","../../../node_modules/@kwsites/promise-deferred/dist/index.js","../../../node_modules/simple-git/dist/esm/index.js","../../../node_modules/slugify/slugify.js","../src/core/core.ts","../src/github/mapping.ts","../src/github/sync.ts","../src/github/commands.ts","../src/core/types.ts","../../../node_modules/yaml/dist/nodes/identity.js","../../../node_modules/yaml/dist/visit.js","../../../node_modules/yaml/dist/doc/directives.js","../../../node_modules/yaml/dist/doc/anchors.js","../../../node_modules/yaml/dist/doc/applyReviver.js","../../../node_modules/yaml/dist/nodes/toJS.js","../../../node_modules/yaml/dist/nodes/Node.js","../../../node_modules/yaml/dist/nodes/Alias.js","../../../node_modules/yaml/dist/nodes/Scalar.js","../../../node_modules/yaml/dist/doc/createNode.js","../../../node_modules/yaml/dist/nodes/Collection.js","../../../node_modules/yaml/dist/stringify/stringifyComment.js","../../../node_modules/yaml/dist/stringify/foldFlowLines.js","../../../node_modules/yaml/dist/stringify/stringifyString.js","../../../node_modules/yaml/dist/stringify/stringify.js","../../../node_modules/yaml/dist/stringify/stringifyPair.js","../../../node_modules/yaml/dist/log.js","../../../node_modules/yaml/dist/schema/yaml-1.1/merge.js","../../../node_modules/yaml/dist/nodes/addPairToJSMap.js","../../../node_modules/yaml/dist/nodes/Pair.js","../../../node_modules/yaml/dist/stringify/stringifyCollection.js","../../../node_modules/yaml/dist/nodes/YAMLMap.js","../../../node_modules/yaml/dist/schema/common/map.js","../../../node_modules/yaml/dist/nodes/YAMLSeq.js","../../../node_modules/yaml/dist/schema/common/seq.js","../../../node_modules/yaml/dist/schema/common/string.js","../../../node_modules/yaml/dist/schema/common/null.js","../../../node_modules/yaml/dist/schema/core/bool.js","../../../node_modules/yaml/dist/stringify/stringifyNumber.js","../../../node_modules/yaml/dist/schema/core/float.js","../../../node_modules/yaml/dist/schema/core/int.js","../../../node_modules/yaml/dist/schema/core/schema.js","../../../node_modules/yaml/dist/schema/json/schema.js","../../../node_modules/yaml/dist/schema/yaml-1.1/binary.js","../../../node_modules/yaml/dist/schema/yaml-1.1/pairs.js","../../../node_modules/yaml/dist/schema/yaml-1.1/omap.js","../../../node_modules/yaml/dist/schema/yaml-1.1/bool.js","../../../node_modules/yaml/dist/schema/yaml-1.1/float.js","../../../node_modules/yaml/dist/schema/yaml-1.1/int.js","../../../node_modules/yaml/dist/schema/yaml-1.1/set.js","../../../node_modules/yaml/dist/schema/yaml-1.1/timestamp.js","../../../node_modules/yaml/dist/schema/yaml-1.1/schema.js","../../../node_modules/yaml/dist/schema/tags.js","../../../node_modules/yaml/dist/schema/Schema.js","../../../node_modules/yaml/dist/stringify/stringifyDocument.js","../../../node_modules/yaml/dist/doc/Document.js","../../../node_modules/yaml/dist/errors.js","../../../node_modules/yaml/dist/compose/resolve-props.js","../../../node_modules/yaml/dist/compose/util-contains-newline.js","../../../node_modules/yaml/dist/compose/util-flow-indent-check.js","../../../node_modules/yaml/dist/compose/util-map-includes.js","../../../node_modules/yaml/dist/compose/resolve-block-map.js","../../../node_modules/yaml/dist/compose/resolve-block-seq.js","../../../node_modules/yaml/dist/compose/resolve-end.js","../../../node_modules/yaml/dist/compose/resolve-flow-collection.js","../../../node_modules/yaml/dist/compose/compose-collection.js","../../../node_modules/yaml/dist/compose/resolve-block-scalar.js","../../../node_modules/yaml/dist/compose/resolve-flow-scalar.js","../../../node_modules/yaml/dist/compose/compose-scalar.js","../../../node_modules/yaml/dist/compose/util-empty-scalar-position.js","../../../node_modules/yaml/dist/compose/compose-node.js","../../../node_modules/yaml/dist/compose/compose-doc.js","../../../node_modules/yaml/dist/compose/composer.js","../../../node_modules/yaml/dist/parse/cst-scalar.js","../../../node_modules/yaml/dist/parse/cst-stringify.js","../../../node_modules/yaml/dist/parse/cst-visit.js","../../../node_modules/yaml/dist/parse/cst.js","../../../node_modules/yaml/dist/parse/lexer.js","../../../node_modules/yaml/dist/parse/line-counter.js","../../../node_modules/yaml/dist/parse/parser.js","../../../node_modules/yaml/dist/public-api.js","../../../node_modules/yaml/dist/index.js","../src/core/frontmatter.ts","../src/core/config.ts","../../../node_modules/escape-string-regexp/index.js","../src/core/state.ts","../src/core/roadmap.ts","../src/core/milestone.ts","../../../node_modules/chalk/source/vendor/ansi-styles/index.js","../../../node_modules/chalk/source/vendor/supports-color/index.js","../../../node_modules/chalk/source/utilities.js","../../../node_modules/chalk/source/index.js","../src/core/commands.ts","../src/core/verify.ts","../src/core/drift.ts","../src/core/phase.ts","../src/core/template.ts","../src/core/artefakte.ts","../src/core/context-loader.ts","../src/core/skills.ts","../src/core/init.ts","../src/core/worktree.ts","../src/cli.ts"],"sourcesContent":["export function getUserAgent() {\n if (typeof navigator === \"object\" && \"userAgent\" in navigator) {\n return navigator.userAgent;\n }\n\n if (typeof process === \"object\" && process.version !== undefined) {\n return `Node.js/${process.version.substr(1)} (${process.platform}; ${\n process.arch\n })`;\n }\n\n return \"<environment undetectable>\";\n}\n","// @ts-check\n\nexport function register(state, name, method, options) {\n if (typeof method !== \"function\") {\n throw new Error(\"method for before hook must be a function\");\n }\n\n if (!options) {\n options = {};\n }\n\n if (Array.isArray(name)) {\n return name.reverse().reduce((callback, name) => {\n return register.bind(null, state, name, callback, options);\n }, method)();\n }\n\n return Promise.resolve().then(() => {\n if (!state.registry[name]) {\n return method(options);\n }\n\n return state.registry[name].reduce((method, registered) => {\n return registered.hook.bind(null, method, options);\n }, method)();\n });\n}\n","// @ts-check\n\nexport function addHook(state, kind, name, hook) {\n const orig = hook;\n if (!state.registry[name]) {\n state.registry[name] = [];\n }\n\n if (kind === \"before\") {\n hook = (method, options) => {\n return Promise.resolve()\n .then(orig.bind(null, options))\n .then(method.bind(null, options));\n };\n }\n\n if (kind === \"after\") {\n hook = (method, options) => {\n let result;\n return Promise.resolve()\n .then(method.bind(null, options))\n .then((result_) => {\n result = result_;\n return orig(result, options);\n })\n .then(() => {\n return result;\n });\n };\n }\n\n if (kind === \"error\") {\n hook = (method, options) => {\n return Promise.resolve()\n .then(method.bind(null, options))\n .catch((error) => {\n return orig(error, options);\n });\n };\n }\n\n state.registry[name].push({\n hook: hook,\n orig: orig,\n });\n}\n","// @ts-check\n\nexport function removeHook(state, name, method) {\n if (!state.registry[name]) {\n return;\n }\n\n const index = state.registry[name]\n .map((registered) => {\n return registered.orig;\n })\n .indexOf(method);\n\n if (index === -1) {\n return;\n }\n\n state.registry[name].splice(index, 1);\n}\n","// @ts-check\n\nimport { register } from \"./lib/register.js\";\nimport { addHook } from \"./lib/add.js\";\nimport { removeHook } from \"./lib/remove.js\";\n\n// bind with array of arguments: https://stackoverflow.com/a/21792913\nconst bind = Function.bind;\nconst bindable = bind.bind(bind);\n\nfunction bindApi(hook, state, name) {\n const removeHookRef = bindable(removeHook, null).apply(\n null,\n name ? [state, name] : [state]\n );\n hook.api = { remove: removeHookRef };\n hook.remove = removeHookRef;\n [\"before\", \"error\", \"after\", \"wrap\"].forEach((kind) => {\n const args = name ? [state, kind, name] : [state, kind];\n hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args);\n });\n}\n\nfunction Singular() {\n const singularHookName = Symbol(\"Singular\");\n const singularHookState = {\n registry: {},\n };\n const singularHook = register.bind(null, singularHookState, singularHookName);\n bindApi(singularHook, singularHookState, singularHookName);\n return singularHook;\n}\n\nfunction Collection() {\n const state = {\n registry: {},\n };\n\n const hook = register.bind(null, state);\n bindApi(hook, state);\n\n return hook;\n}\n\nexport default { Singular, Collection };\n","// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/defaults.js\nvar userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;\nvar DEFAULTS = {\n method: \"GET\",\n baseUrl: \"https://api.github.com\",\n headers: {\n accept: \"application/vnd.github.v3+json\",\n \"user-agent\": userAgent\n },\n mediaType: {\n format: \"\"\n }\n};\n\n// pkg/dist-src/util/lowercase-keys.js\nfunction lowercaseKeys(object) {\n if (!object) {\n return {};\n }\n return Object.keys(object).reduce((newObj, key) => {\n newObj[key.toLowerCase()] = object[key];\n return newObj;\n }, {});\n}\n\n// pkg/dist-src/util/is-plain-object.js\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) return false;\n if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return true;\n const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/util/merge-deep.js\nfunction mergeDeep(defaults, options) {\n const result = Object.assign({}, defaults);\n Object.keys(options).forEach((key) => {\n if (isPlainObject(options[key])) {\n if (!(key in defaults)) Object.assign(result, { [key]: options[key] });\n else result[key] = mergeDeep(defaults[key], options[key]);\n } else {\n Object.assign(result, { [key]: options[key] });\n }\n });\n return result;\n}\n\n// pkg/dist-src/util/remove-undefined-properties.js\nfunction removeUndefinedProperties(obj) {\n for (const key in obj) {\n if (obj[key] === void 0) {\n delete obj[key];\n }\n }\n return obj;\n}\n\n// pkg/dist-src/merge.js\nfunction merge(defaults, route, options) {\n if (typeof route === \"string\") {\n let [method, url] = route.split(\" \");\n options = Object.assign(url ? { method, url } : { url: method }, options);\n } else {\n options = Object.assign({}, route);\n }\n options.headers = lowercaseKeys(options.headers);\n removeUndefinedProperties(options);\n removeUndefinedProperties(options.headers);\n const mergedOptions = mergeDeep(defaults || {}, options);\n if (options.url === \"/graphql\") {\n if (defaults && defaults.mediaType.previews?.length) {\n mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(\n (preview) => !mergedOptions.mediaType.previews.includes(preview)\n ).concat(mergedOptions.mediaType.previews);\n }\n mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, \"\"));\n }\n return mergedOptions;\n}\n\n// pkg/dist-src/util/add-query-parameters.js\nfunction addQueryParameters(url, parameters) {\n const separator = /\\?/.test(url) ? \"&\" : \"?\";\n const names = Object.keys(parameters);\n if (names.length === 0) {\n return url;\n }\n return url + separator + names.map((name) => {\n if (name === \"q\") {\n return \"q=\" + parameters.q.split(\"+\").map(encodeURIComponent).join(\"+\");\n }\n return `${name}=${encodeURIComponent(parameters[name])}`;\n }).join(\"&\");\n}\n\n// pkg/dist-src/util/extract-url-variable-names.js\nvar urlVariableRegex = /\\{[^{}}]+\\}/g;\nfunction removeNonChars(variableName) {\n return variableName.replace(/(?:^\\W+)|(?:(?<!\\W)\\W+$)/g, \"\").split(/,/);\n}\nfunction extractUrlVariableNames(url) {\n const matches = url.match(urlVariableRegex);\n if (!matches) {\n return [];\n }\n return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);\n}\n\n// pkg/dist-src/util/omit.js\nfunction omit(object, keysToOmit) {\n const result = { __proto__: null };\n for (const key of Object.keys(object)) {\n if (keysToOmit.indexOf(key) === -1) {\n result[key] = object[key];\n }\n }\n return result;\n}\n\n// pkg/dist-src/util/url-template.js\nfunction encodeReserved(str) {\n return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {\n if (!/%[0-9A-Fa-f]/.test(part)) {\n part = encodeURI(part).replace(/%5B/g, \"[\").replace(/%5D/g, \"]\");\n }\n return part;\n }).join(\"\");\n}\nfunction encodeUnreserved(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\nfunction encodeValue(operator, value, key) {\n value = operator === \"+\" || operator === \"#\" ? encodeReserved(value) : encodeUnreserved(value);\n if (key) {\n return encodeUnreserved(key) + \"=\" + value;\n } else {\n return value;\n }\n}\nfunction isDefined(value) {\n return value !== void 0 && value !== null;\n}\nfunction isKeyOperator(operator) {\n return operator === \";\" || operator === \"&\" || operator === \"?\";\n}\nfunction getValues(context, operator, key, modifier) {\n var value = context[key], result = [];\n if (isDefined(value) && value !== \"\") {\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") {\n value = value.toString();\n if (modifier && modifier !== \"*\") {\n value = value.substring(0, parseInt(modifier, 10));\n }\n result.push(\n encodeValue(operator, value, isKeyOperator(operator) ? key : \"\")\n );\n } else {\n if (modifier === \"*\") {\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function(value2) {\n result.push(\n encodeValue(operator, value2, isKeyOperator(operator) ? key : \"\")\n );\n });\n } else {\n Object.keys(value).forEach(function(k) {\n if (isDefined(value[k])) {\n result.push(encodeValue(operator, value[k], k));\n }\n });\n }\n } else {\n const tmp = [];\n if (Array.isArray(value)) {\n value.filter(isDefined).forEach(function(value2) {\n tmp.push(encodeValue(operator, value2));\n });\n } else {\n Object.keys(value).forEach(function(k) {\n if (isDefined(value[k])) {\n tmp.push(encodeUnreserved(k));\n tmp.push(encodeValue(operator, value[k].toString()));\n }\n });\n }\n if (isKeyOperator(operator)) {\n result.push(encodeUnreserved(key) + \"=\" + tmp.join(\",\"));\n } else if (tmp.length !== 0) {\n result.push(tmp.join(\",\"));\n }\n }\n }\n } else {\n if (operator === \";\") {\n if (isDefined(value)) {\n result.push(encodeUnreserved(key));\n }\n } else if (value === \"\" && (operator === \"&\" || operator === \"?\")) {\n result.push(encodeUnreserved(key) + \"=\");\n } else if (value === \"\") {\n result.push(\"\");\n }\n }\n return result;\n}\nfunction parseUrl(template) {\n return {\n expand: expand.bind(null, template)\n };\n}\nfunction expand(template, context) {\n var operators = [\"+\", \"#\", \".\", \"/\", \";\", \"?\", \"&\"];\n template = template.replace(\n /\\{([^\\{\\}]+)\\}|([^\\{\\}]+)/g,\n function(_, expression, literal) {\n if (expression) {\n let operator = \"\";\n const values = [];\n if (operators.indexOf(expression.charAt(0)) !== -1) {\n operator = expression.charAt(0);\n expression = expression.substr(1);\n }\n expression.split(/,/g).forEach(function(variable) {\n var tmp = /([^:\\*]*)(?::(\\d+)|(\\*))?/.exec(variable);\n values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));\n });\n if (operator && operator !== \"+\") {\n var separator = \",\";\n if (operator === \"?\") {\n separator = \"&\";\n } else if (operator !== \"#\") {\n separator = operator;\n }\n return (values.length !== 0 ? operator : \"\") + values.join(separator);\n } else {\n return values.join(\",\");\n }\n } else {\n return encodeReserved(literal);\n }\n }\n );\n if (template === \"/\") {\n return template;\n } else {\n return template.replace(/\\/$/, \"\");\n }\n}\n\n// pkg/dist-src/parse.js\nfunction parse(options) {\n let method = options.method.toUpperCase();\n let url = (options.url || \"/\").replace(/:([a-z]\\w+)/g, \"{$1}\");\n let headers = Object.assign({}, options.headers);\n let body;\n let parameters = omit(options, [\n \"method\",\n \"baseUrl\",\n \"url\",\n \"headers\",\n \"request\",\n \"mediaType\"\n ]);\n const urlVariableNames = extractUrlVariableNames(url);\n url = parseUrl(url).expand(parameters);\n if (!/^http/.test(url)) {\n url = options.baseUrl + url;\n }\n const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat(\"baseUrl\");\n const remainingParameters = omit(parameters, omittedParameters);\n const isBinaryRequest = /application\\/octet-stream/i.test(headers.accept);\n if (!isBinaryRequest) {\n if (options.mediaType.format) {\n headers.accept = headers.accept.split(/,/).map(\n (format) => format.replace(\n /application\\/vnd(\\.\\w+)(\\.v3)?(\\.\\w+)?(\\+json)?$/,\n `application/vnd$1$2.${options.mediaType.format}`\n )\n ).join(\",\");\n }\n if (url.endsWith(\"/graphql\")) {\n if (options.mediaType.previews?.length) {\n const previewsFromAcceptHeader = headers.accept.match(/(?<![\\w-])[\\w-]+(?=-preview)/g) || [];\n headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {\n const format = options.mediaType.format ? `.${options.mediaType.format}` : \"+json\";\n return `application/vnd.github.${preview}-preview${format}`;\n }).join(\",\");\n }\n }\n }\n if ([\"GET\", \"HEAD\"].includes(method)) {\n url = addQueryParameters(url, remainingParameters);\n } else {\n if (\"data\" in remainingParameters) {\n body = remainingParameters.data;\n } else {\n if (Object.keys(remainingParameters).length) {\n body = remainingParameters;\n }\n }\n }\n if (!headers[\"content-type\"] && typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json; charset=utf-8\";\n }\n if ([\"PATCH\", \"PUT\"].includes(method) && typeof body === \"undefined\") {\n body = \"\";\n }\n return Object.assign(\n { method, url, headers },\n typeof body !== \"undefined\" ? { body } : null,\n options.request ? { request: options.request } : null\n );\n}\n\n// pkg/dist-src/endpoint-with-defaults.js\nfunction endpointWithDefaults(defaults, route, options) {\n return parse(merge(defaults, route, options));\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldDefaults, newDefaults) {\n const DEFAULTS2 = merge(oldDefaults, newDefaults);\n const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);\n return Object.assign(endpoint2, {\n DEFAULTS: DEFAULTS2,\n defaults: withDefaults.bind(null, DEFAULTS2),\n merge: merge.bind(null, DEFAULTS2),\n parse\n });\n}\n\n// pkg/dist-src/index.js\nvar endpoint = withDefaults(null, DEFAULTS);\nexport {\n endpoint\n};\n","'use strict'\n\nconst NullObject = function NullObject () { }\nNullObject.prototype = Object.create(null)\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter = token \"=\" ( token / quoted-string )\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n * / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n * / DIGIT / ALPHA\n * ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text = %x80-FF\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nconst paramRE = /; *([!#$%&'*+.^\\w`|~-]+)=(\"(?:[\\v\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\v\\u0020-\\u00ff])*\"|[!#$%&'*+.^\\w`|~-]+) */gu\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text = %x80-FF\n */\nconst quotedPairRE = /\\\\([\\v\\u0020-\\u00ff])/gu\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type = token\n * subtype = token\n */\nconst mediaTypeRE = /^[!#$%&'*+.^\\w|~-]+\\/[!#$%&'*+.^\\w|~-]+$/u\n\n// default ContentType to prevent repeated object creation\nconst defaultContentType = { type: '', parameters: new NullObject() }\nObject.freeze(defaultContentType.parameters)\nObject.freeze(defaultContentType)\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} header\n * @return {Object}\n * @public\n */\n\nfunction parse (header) {\n if (typeof header !== 'string') {\n throw new TypeError('argument header is required and must be a string')\n }\n\n let index = header.indexOf(';')\n const type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (mediaTypeRE.test(type) === false) {\n throw new TypeError('invalid media type')\n }\n\n const result = {\n type: type.toLowerCase(),\n parameters: new NullObject()\n }\n\n // parse parameters\n if (index === -1) {\n return result\n }\n\n let key\n let match\n let value\n\n paramRE.lastIndex = index\n\n while ((match = paramRE.exec(header))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .slice(1, value.length - 1)\n\n quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n }\n\n result.parameters[key] = value\n }\n\n if (index !== header.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return result\n}\n\nfunction safeParse (header) {\n if (typeof header !== 'string') {\n return defaultContentType\n }\n\n let index = header.indexOf(';')\n const type = index !== -1\n ? header.slice(0, index).trim()\n : header.trim()\n\n if (mediaTypeRE.test(type) === false) {\n return defaultContentType\n }\n\n const result = {\n type: type.toLowerCase(),\n parameters: new NullObject()\n }\n\n // parse parameters\n if (index === -1) {\n return result\n }\n\n let key\n let match\n let value\n\n paramRE.lastIndex = index\n\n while ((match = paramRE.exec(header))) {\n if (match.index !== index) {\n return defaultContentType\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .slice(1, value.length - 1)\n\n quotedPairRE.test(value) && (value = value.replace(quotedPairRE, '$1'))\n }\n\n result.parameters[key] = value\n }\n\n if (index !== header.length) {\n return defaultContentType\n }\n\n return result\n}\n\nmodule.exports.default = { parse, safeParse }\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.defaultContentType = defaultContentType\n","const noiseValue = /^-?\\d+n+$/; // Noise - strings that match the custom format before being converted to it\nconst originalStringify = JSON.stringify;\nconst originalParse = JSON.parse;\n\n/*\n Function to serialize value to a JSON string.\n Converts BigInt values to a custom format (strings with digits and \"n\" at the end) and then converts them to proper big integers in a JSON string.\n*/\nexport const JSONStringify = (value, replacer, space) => {\n if (\"rawJSON\" in JSON) {\n return originalStringify(\n value,\n (key, value) => {\n if (typeof value === \"bigint\") return JSON.rawJSON(value.toString());\n\n if (typeof replacer === \"function\") return replacer(key, value);\n\n if (Array.isArray(replacer) && replacer.includes(key)) return value;\n\n return value;\n },\n space\n );\n }\n\n if (!value) return originalStringify(value, replacer, space);\n\n const bigInts = /([\\[:])?\"(-?\\d+)n\"($|([\\\\n]|\\s)*(\\s|[\\\\n])*[,\\}\\]])/g;\n const noise = /([\\[:])?(\"-?\\d+n+)n(\"$|\"([\\\\n]|\\s)*(\\s|[\\\\n])*[,\\}\\]])/g;\n const convertedToCustomJSON = originalStringify(\n value,\n (key, value) => {\n const isNoise =\n typeof value === \"string\" && Boolean(value.match(noiseValue));\n\n if (isNoise) return value.toString() + \"n\"; // Mark noise values with additional \"n\" to offset the deletion of one \"n\" during the processing\n\n if (typeof value === \"bigint\") return value.toString() + \"n\";\n\n if (typeof replacer === \"function\") return replacer(key, value);\n\n if (Array.isArray(replacer) && replacer.includes(key)) return value;\n\n return value;\n },\n space\n );\n const processedJSON = convertedToCustomJSON.replace(bigInts, \"$1$2$3\"); // Delete one \"n\" off the end of every BigInt value\n const denoisedJSON = processedJSON.replace(noise, \"$1$2$3\"); // Remove one \"n\" off the end of every noisy string\n\n return denoisedJSON;\n};\n\n/*\n Function to check if the JSON.parse's context.source feature is supported.\n*/\nconst isContextSourceSupported = () =>\n JSON.parse(\"1\", (_, __, context) => !!context && context.source === \"1\");\n\n/*\n Faster (2x) and simpler function to parse JSON.\n Based on JSON.parse's context.source feature, which is not universally available now.\n Does not support the legacy custom format, used in the first version of this library.\n*/\nconst JSONParseV2 = (text, reviver) => {\n const intRegex = /^-?\\d+$/;\n\n return JSON.parse(text, (key, value, context) => {\n const isBigNumber =\n typeof value === \"number\" &&\n (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER);\n const isInt = intRegex.test(context.source);\n const isBigInt = isBigNumber && isInt;\n\n if (isBigInt) return BigInt(context.source);\n\n if (typeof reviver !== \"function\") return value;\n\n return reviver(key, value, context);\n });\n};\n\n/*\n Function to parse JSON.\n If JSON has number values greater than Number.MAX_SAFE_INTEGER, we convert those values to a custom format, then parse them to BigInt values.\n Other types of values are not affected and parsed as native JSON.parse() would parse them.\n*/\nexport const JSONParse = (text, reviver) => {\n if (!text) return originalParse(text, reviver);\n\n if (isContextSourceSupported()) return JSONParseV2(text, reviver); // Shortcut to a faster (2x) and simpler version\n\n const MAX_INT = Number.MAX_SAFE_INTEGER.toString();\n const MAX_DIGITS = MAX_INT.length;\n const stringsOrLargeNumbers =\n /\"(?:\\\\.|[^\"])*\"|-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?/g;\n const noiseValueWithQuotes = /^\"-?\\d+n+\"$/; // Noise - strings that match the custom format before being converted to it\n const customFormat = /^-?\\d+n$/;\n\n // Find and mark big numbers with \"n\"\n const serializedData = text.replace(\n stringsOrLargeNumbers,\n (text, digits, fractional, exponential) => {\n const isString = text[0] === '\"';\n const isNoise = isString && Boolean(text.match(noiseValueWithQuotes));\n\n if (isNoise) return text.substring(0, text.length - 1) + 'n\"'; // Mark noise values with additional \"n\" to offset the deletion of one \"n\" during the processing\n\n const isFractionalOrExponential = fractional || exponential;\n const isLessThanMaxSafeInt =\n digits &&\n (digits.length < MAX_DIGITS ||\n (digits.length === MAX_DIGITS && digits <= MAX_INT)); // With a fixed number of digits, we can correctly use lexicographical comparison to do a numeric comparison\n\n if (isString || isFractionalOrExponential || isLessThanMaxSafeInt)\n return text;\n\n return '\"' + text + 'n\"';\n }\n );\n\n // Convert marked big numbers to BigInt\n return originalParse(serializedData, (key, value, context) => {\n const isCustomFormatBigInt =\n typeof value === \"string\" && Boolean(value.match(customFormat));\n\n if (isCustomFormatBigInt)\n return BigInt(value.substring(0, value.length - 1));\n\n const isNoiseValue =\n typeof value === \"string\" && Boolean(value.match(noiseValue));\n\n if (isNoiseValue) return value.substring(0, value.length - 1); // Remove one \"n\" off the end of the noisy string\n\n if (typeof reviver !== \"function\") return value;\n\n return reviver(key, value, context);\n });\n};\n","class RequestError extends Error {\n name;\n /**\n * http status code\n */\n status;\n /**\n * Request options that lead to the error.\n */\n request;\n /**\n * Response object if a response was received\n */\n response;\n constructor(message, statusCode, options) {\n super(message, { cause: options.cause });\n this.name = \"HttpError\";\n this.status = Number.parseInt(statusCode);\n if (Number.isNaN(this.status)) {\n this.status = 0;\n }\n /* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist */\n if (\"response\" in options) {\n this.response = options.response;\n }\n const requestCopy = Object.assign({}, options.request);\n if (options.request.headers.authorization) {\n requestCopy.headers = Object.assign({}, options.request.headers, {\n authorization: options.request.headers.authorization.replace(\n /(?<! ) .*$/,\n \" [REDACTED]\"\n )\n });\n }\n requestCopy.url = requestCopy.url.replace(/\\bclient_secret=\\w+/g, \"client_secret=[REDACTED]\").replace(/\\baccess_token=\\w+/g, \"access_token=[REDACTED]\");\n this.request = requestCopy;\n }\n}\nexport {\n RequestError\n};\n","// pkg/dist-src/index.js\nimport { endpoint } from \"@octokit/endpoint\";\n\n// pkg/dist-src/defaults.js\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"10.0.8\";\n\n// pkg/dist-src/defaults.js\nvar defaults_default = {\n headers: {\n \"user-agent\": `octokit-request.js/${VERSION} ${getUserAgent()}`\n }\n};\n\n// pkg/dist-src/fetch-wrapper.js\nimport { safeParse } from \"fast-content-type-parse\";\nimport { JSONParse, JSONStringify } from \"json-with-bigint\";\n\n// pkg/dist-src/is-plain-object.js\nfunction isPlainObject(value) {\n if (typeof value !== \"object\" || value === null) return false;\n if (Object.prototype.toString.call(value) !== \"[object Object]\") return false;\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return true;\n const Ctor = Object.prototype.hasOwnProperty.call(proto, \"constructor\") && proto.constructor;\n return typeof Ctor === \"function\" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);\n}\n\n// pkg/dist-src/fetch-wrapper.js\nimport { RequestError } from \"@octokit/request-error\";\nvar noop = () => \"\";\nasync function fetchWrapper(requestOptions) {\n const fetch = requestOptions.request?.fetch || globalThis.fetch;\n if (!fetch) {\n throw new Error(\n \"fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing\"\n );\n }\n const log = requestOptions.request?.log || console;\n const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;\n const body = isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body) ? JSONStringify(requestOptions.body) : requestOptions.body;\n const requestHeaders = Object.fromEntries(\n Object.entries(requestOptions.headers).map(([name, value]) => [\n name,\n String(value)\n ])\n );\n let fetchResponse;\n try {\n fetchResponse = await fetch(requestOptions.url, {\n method: requestOptions.method,\n body,\n redirect: requestOptions.request?.redirect,\n headers: requestHeaders,\n signal: requestOptions.request?.signal,\n // duplex must be set if request.body is ReadableStream or Async Iterables.\n // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.\n ...requestOptions.body && { duplex: \"half\" }\n });\n } catch (error) {\n let message = \"Unknown Error\";\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n error.status = 500;\n throw error;\n }\n message = error.message;\n if (error.name === \"TypeError\" && \"cause\" in error) {\n if (error.cause instanceof Error) {\n message = error.cause.message;\n } else if (typeof error.cause === \"string\") {\n message = error.cause;\n }\n }\n }\n const requestError = new RequestError(message, 500, {\n request: requestOptions\n });\n requestError.cause = error;\n throw requestError;\n }\n const status = fetchResponse.status;\n const url = fetchResponse.url;\n const responseHeaders = {};\n for (const [key, value] of fetchResponse.headers) {\n responseHeaders[key] = value;\n }\n const octokitResponse = {\n url,\n status,\n headers: responseHeaders,\n data: \"\"\n };\n if (\"deprecation\" in responseHeaders) {\n const matches = responseHeaders.link && responseHeaders.link.match(/<([^<>]+)>; rel=\"deprecation\"/);\n const deprecationLink = matches && matches.pop();\n log.warn(\n `[@octokit/request] \"${requestOptions.method} ${requestOptions.url}\" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : \"\"}`\n );\n }\n if (status === 204 || status === 205) {\n return octokitResponse;\n }\n if (requestOptions.method === \"HEAD\") {\n if (status < 400) {\n return octokitResponse;\n }\n throw new RequestError(fetchResponse.statusText, status, {\n response: octokitResponse,\n request: requestOptions\n });\n }\n if (status === 304) {\n octokitResponse.data = await getResponseData(fetchResponse);\n throw new RequestError(\"Not modified\", status, {\n response: octokitResponse,\n request: requestOptions\n });\n }\n if (status >= 400) {\n octokitResponse.data = await getResponseData(fetchResponse);\n throw new RequestError(toErrorMessage(octokitResponse.data), status, {\n response: octokitResponse,\n request: requestOptions\n });\n }\n octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;\n return octokitResponse;\n}\nasync function getResponseData(response) {\n const contentType = response.headers.get(\"content-type\");\n if (!contentType) {\n return response.text().catch(noop);\n }\n const mimetype = safeParse(contentType);\n if (isJSONResponse(mimetype)) {\n let text = \"\";\n try {\n text = await response.text();\n return JSONParse(text);\n } catch (err) {\n return text;\n }\n } else if (mimetype.type.startsWith(\"text/\") || mimetype.parameters.charset?.toLowerCase() === \"utf-8\") {\n return response.text().catch(noop);\n } else {\n return response.arrayBuffer().catch(\n /* v8 ignore next -- @preserve */\n () => new ArrayBuffer(0)\n );\n }\n}\nfunction isJSONResponse(mimetype) {\n return mimetype.type === \"application/json\" || mimetype.type === \"application/scim+json\";\n}\nfunction toErrorMessage(data) {\n if (typeof data === \"string\") {\n return data;\n }\n if (data instanceof ArrayBuffer) {\n return \"Unknown error\";\n }\n if (\"message\" in data) {\n const suffix = \"documentation_url\" in data ? ` - ${data.documentation_url}` : \"\";\n return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(\", \")}${suffix}` : `${data.message}${suffix}`;\n }\n return `Unknown error: ${JSON.stringify(data)}`;\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(oldEndpoint, newDefaults) {\n const endpoint2 = oldEndpoint.defaults(newDefaults);\n const newApi = function(route, parameters) {\n const endpointOptions = endpoint2.merge(route, parameters);\n if (!endpointOptions.request || !endpointOptions.request.hook) {\n return fetchWrapper(endpoint2.parse(endpointOptions));\n }\n const request2 = (route2, parameters2) => {\n return fetchWrapper(\n endpoint2.parse(endpoint2.merge(route2, parameters2))\n );\n };\n Object.assign(request2, {\n endpoint: endpoint2,\n defaults: withDefaults.bind(null, endpoint2)\n });\n return endpointOptions.request.hook(request2, endpointOptions);\n };\n return Object.assign(newApi, {\n endpoint: endpoint2,\n defaults: withDefaults.bind(null, endpoint2)\n });\n}\n\n// pkg/dist-src/index.js\nvar request = withDefaults(endpoint, defaults_default);\nexport {\n request\n};\n/* v8 ignore next -- @preserve */\n/* v8 ignore else -- @preserve */\n","// pkg/dist-src/index.js\nimport { request } from \"@octokit/request\";\nimport { getUserAgent } from \"universal-user-agent\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/with-defaults.js\nimport { request as Request2 } from \"@octokit/request\";\n\n// pkg/dist-src/graphql.js\nimport { request as Request } from \"@octokit/request\";\n\n// pkg/dist-src/error.js\nfunction _buildMessageForResponseErrors(data) {\n return `Request failed due to following response errors:\n` + data.errors.map((e) => ` - ${e.message}`).join(\"\\n\");\n}\nvar GraphqlResponseError = class extends Error {\n constructor(request2, headers, response) {\n super(_buildMessageForResponseErrors(response));\n this.request = request2;\n this.headers = headers;\n this.response = response;\n this.errors = response.errors;\n this.data = response.data;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n name = \"GraphqlResponseError\";\n errors;\n data;\n};\n\n// pkg/dist-src/graphql.js\nvar NON_VARIABLE_OPTIONS = [\n \"method\",\n \"baseUrl\",\n \"url\",\n \"headers\",\n \"request\",\n \"query\",\n \"mediaType\",\n \"operationName\"\n];\nvar FORBIDDEN_VARIABLE_OPTIONS = [\"query\", \"method\", \"url\"];\nvar GHES_V3_SUFFIX_REGEX = /\\/api\\/v3\\/?$/;\nfunction graphql(request2, query, options) {\n if (options) {\n if (typeof query === \"string\" && \"query\" in options) {\n return Promise.reject(\n new Error(`[@octokit/graphql] \"query\" cannot be used as variable name`)\n );\n }\n for (const key in options) {\n if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;\n return Promise.reject(\n new Error(\n `[@octokit/graphql] \"${key}\" cannot be used as variable name`\n )\n );\n }\n }\n const parsedOptions = typeof query === \"string\" ? Object.assign({ query }, options) : query;\n const requestOptions = Object.keys(\n parsedOptions\n ).reduce((result, key) => {\n if (NON_VARIABLE_OPTIONS.includes(key)) {\n result[key] = parsedOptions[key];\n return result;\n }\n if (!result.variables) {\n result.variables = {};\n }\n result.variables[key] = parsedOptions[key];\n return result;\n }, {});\n const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;\n if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {\n requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, \"/api/graphql\");\n }\n return request2(requestOptions).then((response) => {\n if (response.data.errors) {\n const headers = {};\n for (const key of Object.keys(response.headers)) {\n headers[key] = response.headers[key];\n }\n throw new GraphqlResponseError(\n requestOptions,\n headers,\n response.data\n );\n }\n return response.data.data;\n });\n}\n\n// pkg/dist-src/with-defaults.js\nfunction withDefaults(request2, newDefaults) {\n const newRequest = request2.defaults(newDefaults);\n const newApi = (query, options) => {\n return graphql(newRequest, query, options);\n };\n return Object.assign(newApi, {\n defaults: withDefaults.bind(null, newRequest),\n endpoint: newRequest.endpoint\n });\n}\n\n// pkg/dist-src/index.js\nvar graphql2 = withDefaults(request, {\n headers: {\n \"user-agent\": `octokit-graphql.js/${VERSION} ${getUserAgent()}`\n },\n method: \"POST\",\n url: \"/graphql\"\n});\nfunction withCustomRequest(customRequest) {\n return withDefaults(customRequest, {\n method: \"POST\",\n url: \"/graphql\"\n });\n}\nexport {\n GraphqlResponseError,\n graphql2 as graphql,\n withCustomRequest\n};\n","// pkg/dist-src/is-jwt.js\nvar b64url = \"(?:[a-zA-Z0-9_-]+)\";\nvar sep = \"\\\\.\";\nvar jwtRE = new RegExp(`^${b64url}${sep}${b64url}${sep}${b64url}$`);\nvar isJWT = jwtRE.test.bind(jwtRE);\n\n// pkg/dist-src/auth.js\nasync function auth(token) {\n const isApp = isJWT(token);\n const isInstallation = token.startsWith(\"v1.\") || token.startsWith(\"ghs_\");\n const isUserToServer = token.startsWith(\"ghu_\");\n const tokenType = isApp ? \"app\" : isInstallation ? \"installation\" : isUserToServer ? \"user-to-server\" : \"oauth\";\n return {\n type: \"token\",\n token,\n tokenType\n };\n}\n\n// pkg/dist-src/with-authorization-prefix.js\nfunction withAuthorizationPrefix(token) {\n if (token.split(/\\./).length === 3) {\n return `bearer ${token}`;\n }\n return `token ${token}`;\n}\n\n// pkg/dist-src/hook.js\nasync function hook(token, request, route, parameters) {\n const endpoint = request.endpoint.merge(\n route,\n parameters\n );\n endpoint.headers.authorization = withAuthorizationPrefix(token);\n return request(endpoint);\n}\n\n// pkg/dist-src/index.js\nvar createTokenAuth = function createTokenAuth2(token) {\n if (!token) {\n throw new Error(\"[@octokit/auth-token] No token passed to createTokenAuth\");\n }\n if (typeof token !== \"string\") {\n throw new Error(\n \"[@octokit/auth-token] Token passed to createTokenAuth is not a string\"\n );\n }\n token = token.replace(/^(token|bearer) +/i, \"\");\n return Object.assign(auth.bind(null, token), {\n hook: hook.bind(null, token)\n });\n};\nexport {\n createTokenAuth\n};\n","const VERSION = \"7.0.6\";\nexport {\n VERSION\n};\n","import { getUserAgent } from \"universal-user-agent\";\nimport Hook from \"before-after-hook\";\nimport { request } from \"@octokit/request\";\nimport { withCustomRequest } from \"@octokit/graphql\";\nimport { createTokenAuth } from \"@octokit/auth-token\";\nimport { VERSION } from \"./version.js\";\nconst noop = () => {\n};\nconst consoleWarn = console.warn.bind(console);\nconst consoleError = console.error.bind(console);\nfunction createLogger(logger = {}) {\n if (typeof logger.debug !== \"function\") {\n logger.debug = noop;\n }\n if (typeof logger.info !== \"function\") {\n logger.info = noop;\n }\n if (typeof logger.warn !== \"function\") {\n logger.warn = consoleWarn;\n }\n if (typeof logger.error !== \"function\") {\n logger.error = consoleError;\n }\n return logger;\n}\nconst userAgentTrail = `octokit-core.js/${VERSION} ${getUserAgent()}`;\nclass Octokit {\n static VERSION = VERSION;\n static defaults(defaults) {\n const OctokitWithDefaults = class extends this {\n constructor(...args) {\n const options = args[0] || {};\n if (typeof defaults === \"function\") {\n super(defaults(options));\n return;\n }\n super(\n Object.assign(\n {},\n defaults,\n options,\n options.userAgent && defaults.userAgent ? {\n userAgent: `${options.userAgent} ${defaults.userAgent}`\n } : null\n )\n );\n }\n };\n return OctokitWithDefaults;\n }\n static plugins = [];\n /**\n * Attach a plugin (or many) to your Octokit instance.\n *\n * @example\n * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)\n */\n static plugin(...newPlugins) {\n const currentPlugins = this.plugins;\n const NewOctokit = class extends this {\n static plugins = currentPlugins.concat(\n newPlugins.filter((plugin) => !currentPlugins.includes(plugin))\n );\n };\n return NewOctokit;\n }\n constructor(options = {}) {\n const hook = new Hook.Collection();\n const requestDefaults = {\n baseUrl: request.endpoint.DEFAULTS.baseUrl,\n headers: {},\n request: Object.assign({}, options.request, {\n // @ts-ignore internal usage only, no need to type\n hook: hook.bind(null, \"request\")\n }),\n mediaType: {\n previews: [],\n format: \"\"\n }\n };\n requestDefaults.headers[\"user-agent\"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;\n if (options.baseUrl) {\n requestDefaults.baseUrl = options.baseUrl;\n }\n if (options.previews) {\n requestDefaults.mediaType.previews = options.previews;\n }\n if (options.timeZone) {\n requestDefaults.headers[\"time-zone\"] = options.timeZone;\n }\n this.request = request.defaults(requestDefaults);\n this.graphql = withCustomRequest(this.request).defaults(requestDefaults);\n this.log = createLogger(options.log);\n this.hook = hook;\n if (!options.authStrategy) {\n if (!options.auth) {\n this.auth = async () => ({\n type: \"unauthenticated\"\n });\n } else {\n const auth = createTokenAuth(options.auth);\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n }\n } else {\n const { authStrategy, ...otherOptions } = options;\n const auth = authStrategy(\n Object.assign(\n {\n request: this.request,\n log: this.log,\n // we pass the current octokit instance as well as its constructor options\n // to allow for authentication strategies that return a new octokit instance\n // that shares the same internal state as the current one. The original\n // requirement for this was the \"event-octokit\" authentication strategy\n // of https://github.com/probot/octokit-auth-probot.\n octokit: this,\n octokitOptions: otherOptions\n },\n options.auth\n )\n );\n hook.wrap(\"request\", auth.hook);\n this.auth = auth;\n }\n const classConstructor = this.constructor;\n for (let i = 0; i < classConstructor.plugins.length; ++i) {\n Object.assign(this, classConstructor.plugins[i](this, options));\n }\n }\n // assigned during constructor\n request;\n graphql;\n log;\n hook;\n // TODO: type `octokit.auth` based on passed options.authStrategy\n auth;\n}\nexport {\n Octokit\n};\n","const VERSION = \"6.0.0\";\nexport {\n VERSION\n};\n","import { VERSION } from \"./version.js\";\nfunction requestLog(octokit) {\n octokit.hook.wrap(\"request\", (request, options) => {\n octokit.log.debug(\"request\", options);\n const start = Date.now();\n const requestOptions = octokit.request.endpoint.parse(options);\n const path = requestOptions.url.replace(options.baseUrl, \"\");\n return request(options).then((response) => {\n const requestId = response.headers[\"x-github-request-id\"];\n octokit.log.info(\n `${requestOptions.method} ${path} - ${response.status} with id ${requestId} in ${Date.now() - start}ms`\n );\n return response;\n }).catch((error) => {\n const requestId = error.response?.headers[\"x-github-request-id\"] || \"UNKNOWN\";\n octokit.log.error(\n `${requestOptions.method} ${path} - ${error.status} with id ${requestId} in ${Date.now() - start}ms`\n );\n throw error;\n });\n });\n}\nrequestLog.VERSION = VERSION;\nexport {\n requestLog\n};\n","// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/normalize-paginated-list-response.js\nfunction normalizePaginatedListResponse(response) {\n if (!response.data) {\n return {\n ...response,\n data: []\n };\n }\n const responseNeedsNormalization = (\"total_count\" in response.data || \"total_commits\" in response.data) && !(\"url\" in response.data);\n if (!responseNeedsNormalization) return response;\n const incompleteResults = response.data.incomplete_results;\n const repositorySelection = response.data.repository_selection;\n const totalCount = response.data.total_count;\n const totalCommits = response.data.total_commits;\n delete response.data.incomplete_results;\n delete response.data.repository_selection;\n delete response.data.total_count;\n delete response.data.total_commits;\n const namespaceKey = Object.keys(response.data)[0];\n const data = response.data[namespaceKey];\n response.data = data;\n if (typeof incompleteResults !== \"undefined\") {\n response.data.incomplete_results = incompleteResults;\n }\n if (typeof repositorySelection !== \"undefined\") {\n response.data.repository_selection = repositorySelection;\n }\n response.data.total_count = totalCount;\n response.data.total_commits = totalCommits;\n return response;\n}\n\n// pkg/dist-src/iterator.js\nfunction iterator(octokit, route, parameters) {\n const options = typeof route === \"function\" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);\n const requestMethod = typeof route === \"function\" ? route : octokit.request;\n const method = options.method;\n const headers = options.headers;\n let url = options.url;\n return {\n [Symbol.asyncIterator]: () => ({\n async next() {\n if (!url) return { done: true };\n try {\n const response = await requestMethod({ method, url, headers });\n const normalizedResponse = normalizePaginatedListResponse(response);\n url = ((normalizedResponse.headers.link || \"\").match(\n /<([^<>]+)>;\\s*rel=\"next\"/\n ) || [])[1];\n if (!url && \"total_commits\" in normalizedResponse.data) {\n const parsedUrl = new URL(normalizedResponse.url);\n const params = parsedUrl.searchParams;\n const page = parseInt(params.get(\"page\") || \"1\", 10);\n const per_page = parseInt(params.get(\"per_page\") || \"250\", 10);\n if (page * per_page < normalizedResponse.data.total_commits) {\n params.set(\"page\", String(page + 1));\n url = parsedUrl.toString();\n }\n }\n return { value: normalizedResponse };\n } catch (error) {\n if (error.status !== 409) throw error;\n url = \"\";\n return {\n value: {\n status: 200,\n headers: {},\n data: []\n }\n };\n }\n }\n })\n };\n}\n\n// pkg/dist-src/paginate.js\nfunction paginate(octokit, route, parameters, mapFn) {\n if (typeof parameters === \"function\") {\n mapFn = parameters;\n parameters = void 0;\n }\n return gather(\n octokit,\n [],\n iterator(octokit, route, parameters)[Symbol.asyncIterator](),\n mapFn\n );\n}\nfunction gather(octokit, results, iterator2, mapFn) {\n return iterator2.next().then((result) => {\n if (result.done) {\n return results;\n }\n let earlyExit = false;\n function done() {\n earlyExit = true;\n }\n results = results.concat(\n mapFn ? mapFn(result.value, done) : result.value.data\n );\n if (earlyExit) {\n return results;\n }\n return gather(octokit, results, iterator2, mapFn);\n });\n}\n\n// pkg/dist-src/compose-paginate.js\nvar composePaginateRest = Object.assign(paginate, {\n iterator\n});\n\n// pkg/dist-src/generated/paginating-endpoints.js\nvar paginatingEndpoints = [\n \"GET /advisories\",\n \"GET /app/hook/deliveries\",\n \"GET /app/installation-requests\",\n \"GET /app/installations\",\n \"GET /assignments/{assignment_id}/accepted_assignments\",\n \"GET /classrooms\",\n \"GET /classrooms/{classroom_id}/assignments\",\n \"GET /enterprises/{enterprise}/code-security/configurations\",\n \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\",\n \"GET /enterprises/{enterprise}/dependabot/alerts\",\n \"GET /enterprises/{enterprise}/teams\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\",\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\",\n \"GET /events\",\n \"GET /gists\",\n \"GET /gists/public\",\n \"GET /gists/starred\",\n \"GET /gists/{gist_id}/comments\",\n \"GET /gists/{gist_id}/commits\",\n \"GET /gists/{gist_id}/forks\",\n \"GET /installation/repositories\",\n \"GET /issues\",\n \"GET /licenses\",\n \"GET /marketplace_listing/plans\",\n \"GET /marketplace_listing/plans/{plan_id}/accounts\",\n \"GET /marketplace_listing/stubbed/plans\",\n \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\",\n \"GET /networks/{owner}/{repo}/events\",\n \"GET /notifications\",\n \"GET /organizations\",\n \"GET /organizations/{org}/dependabot/repository-access\",\n \"GET /orgs/{org}/actions/cache/usage-by-repository\",\n \"GET /orgs/{org}/actions/hosted-runners\",\n \"GET /orgs/{org}/actions/permissions/repositories\",\n \"GET /orgs/{org}/actions/permissions/self-hosted-runners/repositories\",\n \"GET /orgs/{org}/actions/runner-groups\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories\",\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners\",\n \"GET /orgs/{org}/actions/runners\",\n \"GET /orgs/{org}/actions/secrets\",\n \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\",\n \"GET /orgs/{org}/actions/variables\",\n \"GET /orgs/{org}/actions/variables/{name}/repositories\",\n \"GET /orgs/{org}/attestations/repositories\",\n \"GET /orgs/{org}/attestations/{subject_digest}\",\n \"GET /orgs/{org}/blocks\",\n \"GET /orgs/{org}/campaigns\",\n \"GET /orgs/{org}/code-scanning/alerts\",\n \"GET /orgs/{org}/code-security/configurations\",\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\",\n \"GET /orgs/{org}/codespaces\",\n \"GET /orgs/{org}/codespaces/secrets\",\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\",\n \"GET /orgs/{org}/copilot/billing/seats\",\n \"GET /orgs/{org}/copilot/metrics\",\n \"GET /orgs/{org}/dependabot/alerts\",\n \"GET /orgs/{org}/dependabot/secrets\",\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\",\n \"GET /orgs/{org}/events\",\n \"GET /orgs/{org}/failed_invitations\",\n \"GET /orgs/{org}/hooks\",\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries\",\n \"GET /orgs/{org}/insights/api/route-stats/{actor_type}/{actor_id}\",\n \"GET /orgs/{org}/insights/api/subject-stats\",\n \"GET /orgs/{org}/insights/api/user-stats/{user_id}\",\n \"GET /orgs/{org}/installations\",\n \"GET /orgs/{org}/invitations\",\n \"GET /orgs/{org}/invitations/{invitation_id}/teams\",\n \"GET /orgs/{org}/issues\",\n \"GET /orgs/{org}/members\",\n \"GET /orgs/{org}/members/{username}/codespaces\",\n \"GET /orgs/{org}/migrations\",\n \"GET /orgs/{org}/migrations/{migration_id}/repositories\",\n \"GET /orgs/{org}/organization-roles/{role_id}/teams\",\n \"GET /orgs/{org}/organization-roles/{role_id}/users\",\n \"GET /orgs/{org}/outside_collaborators\",\n \"GET /orgs/{org}/packages\",\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n \"GET /orgs/{org}/personal-access-token-requests\",\n \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\",\n \"GET /orgs/{org}/personal-access-tokens\",\n \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\",\n \"GET /orgs/{org}/private-registries\",\n \"GET /orgs/{org}/projects\",\n \"GET /orgs/{org}/projectsV2\",\n \"GET /orgs/{org}/projectsV2/{project_number}/fields\",\n \"GET /orgs/{org}/projectsV2/{project_number}/items\",\n \"GET /orgs/{org}/properties/values\",\n \"GET /orgs/{org}/public_members\",\n \"GET /orgs/{org}/repos\",\n \"GET /orgs/{org}/rulesets\",\n \"GET /orgs/{org}/rulesets/rule-suites\",\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history\",\n \"GET /orgs/{org}/secret-scanning/alerts\",\n \"GET /orgs/{org}/security-advisories\",\n \"GET /orgs/{org}/settings/immutable-releases/repositories\",\n \"GET /orgs/{org}/settings/network-configurations\",\n \"GET /orgs/{org}/team/{team_slug}/copilot/metrics\",\n \"GET /orgs/{org}/teams\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\",\n \"GET /orgs/{org}/teams/{team_slug}/invitations\",\n \"GET /orgs/{org}/teams/{team_slug}/members\",\n \"GET /orgs/{org}/teams/{team_slug}/projects\",\n \"GET /orgs/{org}/teams/{team_slug}/repos\",\n \"GET /orgs/{org}/teams/{team_slug}/teams\",\n \"GET /projects/{project_id}/collaborators\",\n \"GET /repos/{owner}/{repo}/actions/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/caches\",\n \"GET /repos/{owner}/{repo}/actions/organization-secrets\",\n \"GET /repos/{owner}/{repo}/actions/organization-variables\",\n \"GET /repos/{owner}/{repo}/actions/runners\",\n \"GET /repos/{owner}/{repo}/actions/runs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\",\n \"GET /repos/{owner}/{repo}/actions/secrets\",\n \"GET /repos/{owner}/{repo}/actions/variables\",\n \"GET /repos/{owner}/{repo}/actions/workflows\",\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\",\n \"GET /repos/{owner}/{repo}/activity\",\n \"GET /repos/{owner}/{repo}/assignees\",\n \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\",\n \"GET /repos/{owner}/{repo}/branches\",\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\",\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n \"GET /repos/{owner}/{repo}/code-scanning/analyses\",\n \"GET /repos/{owner}/{repo}/codespaces\",\n \"GET /repos/{owner}/{repo}/codespaces/devcontainers\",\n \"GET /repos/{owner}/{repo}/codespaces/secrets\",\n \"GET /repos/{owner}/{repo}/collaborators\",\n \"GET /repos/{owner}/{repo}/comments\",\n \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/commits\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/status\",\n \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\",\n \"GET /repos/{owner}/{repo}/compare/{basehead}\",\n \"GET /repos/{owner}/{repo}/compare/{base}...{head}\",\n \"GET /repos/{owner}/{repo}/contributors\",\n \"GET /repos/{owner}/{repo}/dependabot/alerts\",\n \"GET /repos/{owner}/{repo}/dependabot/secrets\",\n \"GET /repos/{owner}/{repo}/deployments\",\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\",\n \"GET /repos/{owner}/{repo}/environments\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\",\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\",\n \"GET /repos/{owner}/{repo}/events\",\n \"GET /repos/{owner}/{repo}/forks\",\n \"GET /repos/{owner}/{repo}/hooks\",\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\",\n \"GET /repos/{owner}/{repo}/invitations\",\n \"GET /repos/{owner}/{repo}/issues\",\n \"GET /repos/{owner}/{repo}/issues/comments\",\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/events\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\",\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\",\n \"GET /repos/{owner}/{repo}/keys\",\n \"GET /repos/{owner}/{repo}/labels\",\n \"GET /repos/{owner}/{repo}/milestones\",\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\",\n \"GET /repos/{owner}/{repo}/notifications\",\n \"GET /repos/{owner}/{repo}/pages/builds\",\n \"GET /repos/{owner}/{repo}/projects\",\n \"GET /repos/{owner}/{repo}/pulls\",\n \"GET /repos/{owner}/{repo}/pulls/comments\",\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\",\n \"GET /repos/{owner}/{repo}/releases\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\",\n \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\",\n \"GET /repos/{owner}/{repo}/rules/branches/{branch}\",\n \"GET /repos/{owner}/{repo}/rulesets\",\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites\",\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts\",\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\",\n \"GET /repos/{owner}/{repo}/security-advisories\",\n \"GET /repos/{owner}/{repo}/stargazers\",\n \"GET /repos/{owner}/{repo}/subscribers\",\n \"GET /repos/{owner}/{repo}/tags\",\n \"GET /repos/{owner}/{repo}/teams\",\n \"GET /repos/{owner}/{repo}/topics\",\n \"GET /repositories\",\n \"GET /search/code\",\n \"GET /search/commits\",\n \"GET /search/issues\",\n \"GET /search/labels\",\n \"GET /search/repositories\",\n \"GET /search/topics\",\n \"GET /search/users\",\n \"GET /teams/{team_id}/discussions\",\n \"GET /teams/{team_id}/discussions/{discussion_number}/comments\",\n \"GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions\",\n \"GET /teams/{team_id}/discussions/{discussion_number}/reactions\",\n \"GET /teams/{team_id}/invitations\",\n \"GET /teams/{team_id}/members\",\n \"GET /teams/{team_id}/projects\",\n \"GET /teams/{team_id}/repos\",\n \"GET /teams/{team_id}/teams\",\n \"GET /user/blocks\",\n \"GET /user/codespaces\",\n \"GET /user/codespaces/secrets\",\n \"GET /user/emails\",\n \"GET /user/followers\",\n \"GET /user/following\",\n \"GET /user/gpg_keys\",\n \"GET /user/installations\",\n \"GET /user/installations/{installation_id}/repositories\",\n \"GET /user/issues\",\n \"GET /user/keys\",\n \"GET /user/marketplace_purchases\",\n \"GET /user/marketplace_purchases/stubbed\",\n \"GET /user/memberships/orgs\",\n \"GET /user/migrations\",\n \"GET /user/migrations/{migration_id}/repositories\",\n \"GET /user/orgs\",\n \"GET /user/packages\",\n \"GET /user/packages/{package_type}/{package_name}/versions\",\n \"GET /user/public_emails\",\n \"GET /user/repos\",\n \"GET /user/repository_invitations\",\n \"GET /user/social_accounts\",\n \"GET /user/ssh_signing_keys\",\n \"GET /user/starred\",\n \"GET /user/subscriptions\",\n \"GET /user/teams\",\n \"GET /users\",\n \"GET /users/{username}/attestations/{subject_digest}\",\n \"GET /users/{username}/events\",\n \"GET /users/{username}/events/orgs/{org}\",\n \"GET /users/{username}/events/public\",\n \"GET /users/{username}/followers\",\n \"GET /users/{username}/following\",\n \"GET /users/{username}/gists\",\n \"GET /users/{username}/gpg_keys\",\n \"GET /users/{username}/keys\",\n \"GET /users/{username}/orgs\",\n \"GET /users/{username}/packages\",\n \"GET /users/{username}/projects\",\n \"GET /users/{username}/projectsV2\",\n \"GET /users/{username}/projectsV2/{project_number}/fields\",\n \"GET /users/{username}/projectsV2/{project_number}/items\",\n \"GET /users/{username}/received_events\",\n \"GET /users/{username}/received_events/public\",\n \"GET /users/{username}/repos\",\n \"GET /users/{username}/social_accounts\",\n \"GET /users/{username}/ssh_signing_keys\",\n \"GET /users/{username}/starred\",\n \"GET /users/{username}/subscriptions\"\n];\n\n// pkg/dist-src/paginating-endpoints.js\nfunction isPaginatingEndpoint(arg) {\n if (typeof arg === \"string\") {\n return paginatingEndpoints.includes(arg);\n } else {\n return false;\n }\n}\n\n// pkg/dist-src/index.js\nfunction paginateRest(octokit) {\n return {\n paginate: Object.assign(paginate.bind(null, octokit), {\n iterator: iterator.bind(null, octokit)\n })\n };\n}\npaginateRest.VERSION = VERSION;\nexport {\n composePaginateRest,\n isPaginatingEndpoint,\n paginateRest,\n paginatingEndpoints\n};\n","const VERSION = \"17.0.0\";\nexport {\n VERSION\n};\n//# sourceMappingURL=version.js.map\n","const Endpoints = {\n actions: {\n addCustomLabelsToSelfHostedRunnerForOrg: [\n \"POST /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n addCustomLabelsToSelfHostedRunnerForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n addRepoAccessToSelfHostedRunnerGroupInOrg: [\n \"PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}\"\n ],\n addSelectedRepoToOrgSecret: [\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n addSelectedRepoToOrgVariable: [\n \"PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\"\n ],\n approveWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve\"\n ],\n cancelWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel\"\n ],\n createEnvironmentVariable: [\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/variables\"\n ],\n createHostedRunnerForOrg: [\"POST /orgs/{org}/actions/hosted-runners\"],\n createOrUpdateEnvironmentSecret: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\"\n ],\n createOrUpdateOrgSecret: [\"PUT /orgs/{org}/actions/secrets/{secret_name}\"],\n createOrUpdateRepoSecret: [\n \"PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}\"\n ],\n createOrgVariable: [\"POST /orgs/{org}/actions/variables\"],\n createRegistrationTokenForOrg: [\n \"POST /orgs/{org}/actions/runners/registration-token\"\n ],\n createRegistrationTokenForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/registration-token\"\n ],\n createRemoveTokenForOrg: [\"POST /orgs/{org}/actions/runners/remove-token\"],\n createRemoveTokenForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/remove-token\"\n ],\n createRepoVariable: [\"POST /repos/{owner}/{repo}/actions/variables\"],\n createWorkflowDispatch: [\n \"POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\"\n ],\n deleteActionsCacheById: [\n \"DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}\"\n ],\n deleteActionsCacheByKey: [\n \"DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}\"\n ],\n deleteArtifact: [\n \"DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"\n ],\n deleteCustomImageFromOrg: [\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\"\n ],\n deleteCustomImageVersionFromOrg: [\n \"DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\"\n ],\n deleteEnvironmentSecret: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\"\n ],\n deleteEnvironmentVariable: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\"\n ],\n deleteHostedRunnerForOrg: [\n \"DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\"\n ],\n deleteOrgSecret: [\"DELETE /orgs/{org}/actions/secrets/{secret_name}\"],\n deleteOrgVariable: [\"DELETE /orgs/{org}/actions/variables/{name}\"],\n deleteRepoSecret: [\n \"DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}\"\n ],\n deleteRepoVariable: [\n \"DELETE /repos/{owner}/{repo}/actions/variables/{name}\"\n ],\n deleteSelfHostedRunnerFromOrg: [\n \"DELETE /orgs/{org}/actions/runners/{runner_id}\"\n ],\n deleteSelfHostedRunnerFromRepo: [\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}\"\n ],\n deleteWorkflowRun: [\"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n deleteWorkflowRunLogs: [\n \"DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"\n ],\n disableSelectedRepositoryGithubActionsOrganization: [\n \"DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}\"\n ],\n disableWorkflow: [\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable\"\n ],\n downloadArtifact: [\n \"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}\"\n ],\n downloadJobLogsForWorkflowRun: [\n \"GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs\"\n ],\n downloadWorkflowRunAttemptLogs: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs\"\n ],\n downloadWorkflowRunLogs: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs\"\n ],\n enableSelectedRepositoryGithubActionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/repositories/{repository_id}\"\n ],\n enableWorkflow: [\n \"PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable\"\n ],\n forceCancelWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel\"\n ],\n generateRunnerJitconfigForOrg: [\n \"POST /orgs/{org}/actions/runners/generate-jitconfig\"\n ],\n generateRunnerJitconfigForRepo: [\n \"POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig\"\n ],\n getActionsCacheList: [\"GET /repos/{owner}/{repo}/actions/caches\"],\n getActionsCacheUsage: [\"GET /repos/{owner}/{repo}/actions/cache/usage\"],\n getActionsCacheUsageByRepoForOrg: [\n \"GET /orgs/{org}/actions/cache/usage-by-repository\"\n ],\n getActionsCacheUsageForOrg: [\"GET /orgs/{org}/actions/cache/usage\"],\n getAllowedActionsOrganization: [\n \"GET /orgs/{org}/actions/permissions/selected-actions\"\n ],\n getAllowedActionsRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions/selected-actions\"\n ],\n getArtifact: [\"GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}\"],\n getCustomImageForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}\"\n ],\n getCustomImageVersionForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}\"\n ],\n getCustomOidcSubClaimForRepo: [\n \"GET /repos/{owner}/{repo}/actions/oidc/customization/sub\"\n ],\n getEnvironmentPublicKey: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key\"\n ],\n getEnvironmentSecret: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}\"\n ],\n getEnvironmentVariable: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\"\n ],\n getGithubActionsDefaultWorkflowPermissionsOrganization: [\n \"GET /orgs/{org}/actions/permissions/workflow\"\n ],\n getGithubActionsDefaultWorkflowPermissionsRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions/workflow\"\n ],\n getGithubActionsPermissionsOrganization: [\n \"GET /orgs/{org}/actions/permissions\"\n ],\n getGithubActionsPermissionsRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions\"\n ],\n getHostedRunnerForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\"\n ],\n getHostedRunnersGithubOwnedImagesForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/github-owned\"\n ],\n getHostedRunnersLimitsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/limits\"\n ],\n getHostedRunnersMachineSpecsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/machine-sizes\"\n ],\n getHostedRunnersPartnerImagesForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/partner\"\n ],\n getHostedRunnersPlatformsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/platforms\"\n ],\n getJobForWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/jobs/{job_id}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/actions/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/actions/secrets/{secret_name}\"],\n getOrgVariable: [\"GET /orgs/{org}/actions/variables/{name}\"],\n getPendingDeploymentsForRun: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\"\n ],\n getRepoPermissions: [\n \"GET /repos/{owner}/{repo}/actions/permissions\",\n {},\n { renamed: [\"actions\", \"getGithubActionsPermissionsRepository\"] }\n ],\n getRepoPublicKey: [\"GET /repos/{owner}/{repo}/actions/secrets/public-key\"],\n getRepoSecret: [\"GET /repos/{owner}/{repo}/actions/secrets/{secret_name}\"],\n getRepoVariable: [\"GET /repos/{owner}/{repo}/actions/variables/{name}\"],\n getReviewsForRun: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals\"\n ],\n getSelfHostedRunnerForOrg: [\"GET /orgs/{org}/actions/runners/{runner_id}\"],\n getSelfHostedRunnerForRepo: [\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}\"\n ],\n getWorkflow: [\"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}\"],\n getWorkflowAccessToRepository: [\n \"GET /repos/{owner}/{repo}/actions/permissions/access\"\n ],\n getWorkflowRun: [\"GET /repos/{owner}/{repo}/actions/runs/{run_id}\"],\n getWorkflowRunAttempt: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}\"\n ],\n getWorkflowRunUsage: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing\"\n ],\n getWorkflowUsage: [\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing\"\n ],\n listArtifactsForRepo: [\"GET /repos/{owner}/{repo}/actions/artifacts\"],\n listCustomImageVersionsForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions\"\n ],\n listCustomImagesForOrg: [\n \"GET /orgs/{org}/actions/hosted-runners/images/custom\"\n ],\n listEnvironmentSecrets: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/secrets\"\n ],\n listEnvironmentVariables: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/variables\"\n ],\n listGithubHostedRunnersInGroupForOrg: [\n \"GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners\"\n ],\n listHostedRunnersForOrg: [\"GET /orgs/{org}/actions/hosted-runners\"],\n listJobsForWorkflowRun: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs\"\n ],\n listJobsForWorkflowRunAttempt: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs\"\n ],\n listLabelsForSelfHostedRunnerForOrg: [\n \"GET /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n listLabelsForSelfHostedRunnerForRepo: [\n \"GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n listOrgSecrets: [\"GET /orgs/{org}/actions/secrets\"],\n listOrgVariables: [\"GET /orgs/{org}/actions/variables\"],\n listRepoOrganizationSecrets: [\n \"GET /repos/{owner}/{repo}/actions/organization-secrets\"\n ],\n listRepoOrganizationVariables: [\n \"GET /repos/{owner}/{repo}/actions/organization-variables\"\n ],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/actions/secrets\"],\n listRepoVariables: [\"GET /repos/{owner}/{repo}/actions/variables\"],\n listRepoWorkflows: [\"GET /repos/{owner}/{repo}/actions/workflows\"],\n listRunnerApplicationsForOrg: [\"GET /orgs/{org}/actions/runners/downloads\"],\n listRunnerApplicationsForRepo: [\n \"GET /repos/{owner}/{repo}/actions/runners/downloads\"\n ],\n listSelectedReposForOrgSecret: [\n \"GET /orgs/{org}/actions/secrets/{secret_name}/repositories\"\n ],\n listSelectedReposForOrgVariable: [\n \"GET /orgs/{org}/actions/variables/{name}/repositories\"\n ],\n listSelectedRepositoriesEnabledGithubActionsOrganization: [\n \"GET /orgs/{org}/actions/permissions/repositories\"\n ],\n listSelfHostedRunnersForOrg: [\"GET /orgs/{org}/actions/runners\"],\n listSelfHostedRunnersForRepo: [\"GET /repos/{owner}/{repo}/actions/runners\"],\n listWorkflowRunArtifacts: [\n \"GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts\"\n ],\n listWorkflowRuns: [\n \"GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs\"\n ],\n listWorkflowRunsForRepo: [\"GET /repos/{owner}/{repo}/actions/runs\"],\n reRunJobForWorkflowRun: [\n \"POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun\"\n ],\n reRunWorkflow: [\"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun\"],\n reRunWorkflowFailedJobs: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs\"\n ],\n removeAllCustomLabelsFromSelfHostedRunnerForOrg: [\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n removeAllCustomLabelsFromSelfHostedRunnerForRepo: [\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n removeCustomLabelFromSelfHostedRunnerForOrg: [\n \"DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}\"\n ],\n removeCustomLabelFromSelfHostedRunnerForRepo: [\n \"DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}\"\n ],\n removeSelectedRepoFromOrgSecret: [\n \"DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n removeSelectedRepoFromOrgVariable: [\n \"DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}\"\n ],\n reviewCustomGatesForRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule\"\n ],\n reviewPendingDeploymentsForRun: [\n \"POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments\"\n ],\n setAllowedActionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/selected-actions\"\n ],\n setAllowedActionsRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions/selected-actions\"\n ],\n setCustomLabelsForSelfHostedRunnerForOrg: [\n \"PUT /orgs/{org}/actions/runners/{runner_id}/labels\"\n ],\n setCustomLabelsForSelfHostedRunnerForRepo: [\n \"PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels\"\n ],\n setCustomOidcSubClaimForRepo: [\n \"PUT /repos/{owner}/{repo}/actions/oidc/customization/sub\"\n ],\n setGithubActionsDefaultWorkflowPermissionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/workflow\"\n ],\n setGithubActionsDefaultWorkflowPermissionsRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions/workflow\"\n ],\n setGithubActionsPermissionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions\"\n ],\n setGithubActionsPermissionsRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions\"\n ],\n setSelectedReposForOrgSecret: [\n \"PUT /orgs/{org}/actions/secrets/{secret_name}/repositories\"\n ],\n setSelectedReposForOrgVariable: [\n \"PUT /orgs/{org}/actions/variables/{name}/repositories\"\n ],\n setSelectedRepositoriesEnabledGithubActionsOrganization: [\n \"PUT /orgs/{org}/actions/permissions/repositories\"\n ],\n setWorkflowAccessToRepository: [\n \"PUT /repos/{owner}/{repo}/actions/permissions/access\"\n ],\n updateEnvironmentVariable: [\n \"PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}\"\n ],\n updateHostedRunnerForOrg: [\n \"PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}\"\n ],\n updateOrgVariable: [\"PATCH /orgs/{org}/actions/variables/{name}\"],\n updateRepoVariable: [\n \"PATCH /repos/{owner}/{repo}/actions/variables/{name}\"\n ]\n },\n activity: {\n checkRepoIsStarredByAuthenticatedUser: [\"GET /user/starred/{owner}/{repo}\"],\n deleteRepoSubscription: [\"DELETE /repos/{owner}/{repo}/subscription\"],\n deleteThreadSubscription: [\n \"DELETE /notifications/threads/{thread_id}/subscription\"\n ],\n getFeeds: [\"GET /feeds\"],\n getRepoSubscription: [\"GET /repos/{owner}/{repo}/subscription\"],\n getThread: [\"GET /notifications/threads/{thread_id}\"],\n getThreadSubscriptionForAuthenticatedUser: [\n \"GET /notifications/threads/{thread_id}/subscription\"\n ],\n listEventsForAuthenticatedUser: [\"GET /users/{username}/events\"],\n listNotificationsForAuthenticatedUser: [\"GET /notifications\"],\n listOrgEventsForAuthenticatedUser: [\n \"GET /users/{username}/events/orgs/{org}\"\n ],\n listPublicEvents: [\"GET /events\"],\n listPublicEventsForRepoNetwork: [\"GET /networks/{owner}/{repo}/events\"],\n listPublicEventsForUser: [\"GET /users/{username}/events/public\"],\n listPublicOrgEvents: [\"GET /orgs/{org}/events\"],\n listReceivedEventsForUser: [\"GET /users/{username}/received_events\"],\n listReceivedPublicEventsForUser: [\n \"GET /users/{username}/received_events/public\"\n ],\n listRepoEvents: [\"GET /repos/{owner}/{repo}/events\"],\n listRepoNotificationsForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/notifications\"\n ],\n listReposStarredByAuthenticatedUser: [\"GET /user/starred\"],\n listReposStarredByUser: [\"GET /users/{username}/starred\"],\n listReposWatchedByUser: [\"GET /users/{username}/subscriptions\"],\n listStargazersForRepo: [\"GET /repos/{owner}/{repo}/stargazers\"],\n listWatchedReposForAuthenticatedUser: [\"GET /user/subscriptions\"],\n listWatchersForRepo: [\"GET /repos/{owner}/{repo}/subscribers\"],\n markNotificationsAsRead: [\"PUT /notifications\"],\n markRepoNotificationsAsRead: [\"PUT /repos/{owner}/{repo}/notifications\"],\n markThreadAsDone: [\"DELETE /notifications/threads/{thread_id}\"],\n markThreadAsRead: [\"PATCH /notifications/threads/{thread_id}\"],\n setRepoSubscription: [\"PUT /repos/{owner}/{repo}/subscription\"],\n setThreadSubscription: [\n \"PUT /notifications/threads/{thread_id}/subscription\"\n ],\n starRepoForAuthenticatedUser: [\"PUT /user/starred/{owner}/{repo}\"],\n unstarRepoForAuthenticatedUser: [\"DELETE /user/starred/{owner}/{repo}\"]\n },\n apps: {\n addRepoToInstallation: [\n \"PUT /user/installations/{installation_id}/repositories/{repository_id}\",\n {},\n { renamed: [\"apps\", \"addRepoToInstallationForAuthenticatedUser\"] }\n ],\n addRepoToInstallationForAuthenticatedUser: [\n \"PUT /user/installations/{installation_id}/repositories/{repository_id}\"\n ],\n checkToken: [\"POST /applications/{client_id}/token\"],\n createFromManifest: [\"POST /app-manifests/{code}/conversions\"],\n createInstallationAccessToken: [\n \"POST /app/installations/{installation_id}/access_tokens\"\n ],\n deleteAuthorization: [\"DELETE /applications/{client_id}/grant\"],\n deleteInstallation: [\"DELETE /app/installations/{installation_id}\"],\n deleteToken: [\"DELETE /applications/{client_id}/token\"],\n getAuthenticated: [\"GET /app\"],\n getBySlug: [\"GET /apps/{app_slug}\"],\n getInstallation: [\"GET /app/installations/{installation_id}\"],\n getOrgInstallation: [\"GET /orgs/{org}/installation\"],\n getRepoInstallation: [\"GET /repos/{owner}/{repo}/installation\"],\n getSubscriptionPlanForAccount: [\n \"GET /marketplace_listing/accounts/{account_id}\"\n ],\n getSubscriptionPlanForAccountStubbed: [\n \"GET /marketplace_listing/stubbed/accounts/{account_id}\"\n ],\n getUserInstallation: [\"GET /users/{username}/installation\"],\n getWebhookConfigForApp: [\"GET /app/hook/config\"],\n getWebhookDelivery: [\"GET /app/hook/deliveries/{delivery_id}\"],\n listAccountsForPlan: [\"GET /marketplace_listing/plans/{plan_id}/accounts\"],\n listAccountsForPlanStubbed: [\n \"GET /marketplace_listing/stubbed/plans/{plan_id}/accounts\"\n ],\n listInstallationReposForAuthenticatedUser: [\n \"GET /user/installations/{installation_id}/repositories\"\n ],\n listInstallationRequestsForAuthenticatedApp: [\n \"GET /app/installation-requests\"\n ],\n listInstallations: [\"GET /app/installations\"],\n listInstallationsForAuthenticatedUser: [\"GET /user/installations\"],\n listPlans: [\"GET /marketplace_listing/plans\"],\n listPlansStubbed: [\"GET /marketplace_listing/stubbed/plans\"],\n listReposAccessibleToInstallation: [\"GET /installation/repositories\"],\n listSubscriptionsForAuthenticatedUser: [\"GET /user/marketplace_purchases\"],\n listSubscriptionsForAuthenticatedUserStubbed: [\n \"GET /user/marketplace_purchases/stubbed\"\n ],\n listWebhookDeliveries: [\"GET /app/hook/deliveries\"],\n redeliverWebhookDelivery: [\n \"POST /app/hook/deliveries/{delivery_id}/attempts\"\n ],\n removeRepoFromInstallation: [\n \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\",\n {},\n { renamed: [\"apps\", \"removeRepoFromInstallationForAuthenticatedUser\"] }\n ],\n removeRepoFromInstallationForAuthenticatedUser: [\n \"DELETE /user/installations/{installation_id}/repositories/{repository_id}\"\n ],\n resetToken: [\"PATCH /applications/{client_id}/token\"],\n revokeInstallationAccessToken: [\"DELETE /installation/token\"],\n scopeToken: [\"POST /applications/{client_id}/token/scoped\"],\n suspendInstallation: [\"PUT /app/installations/{installation_id}/suspended\"],\n unsuspendInstallation: [\n \"DELETE /app/installations/{installation_id}/suspended\"\n ],\n updateWebhookConfigForApp: [\"PATCH /app/hook/config\"]\n },\n billing: {\n getGithubActionsBillingOrg: [\"GET /orgs/{org}/settings/billing/actions\"],\n getGithubActionsBillingUser: [\n \"GET /users/{username}/settings/billing/actions\"\n ],\n getGithubBillingPremiumRequestUsageReportOrg: [\n \"GET /organizations/{org}/settings/billing/premium_request/usage\"\n ],\n getGithubBillingPremiumRequestUsageReportUser: [\n \"GET /users/{username}/settings/billing/premium_request/usage\"\n ],\n getGithubBillingUsageReportOrg: [\n \"GET /organizations/{org}/settings/billing/usage\"\n ],\n getGithubBillingUsageReportUser: [\n \"GET /users/{username}/settings/billing/usage\"\n ],\n getGithubPackagesBillingOrg: [\"GET /orgs/{org}/settings/billing/packages\"],\n getGithubPackagesBillingUser: [\n \"GET /users/{username}/settings/billing/packages\"\n ],\n getSharedStorageBillingOrg: [\n \"GET /orgs/{org}/settings/billing/shared-storage\"\n ],\n getSharedStorageBillingUser: [\n \"GET /users/{username}/settings/billing/shared-storage\"\n ]\n },\n campaigns: {\n createCampaign: [\"POST /orgs/{org}/campaigns\"],\n deleteCampaign: [\"DELETE /orgs/{org}/campaigns/{campaign_number}\"],\n getCampaignSummary: [\"GET /orgs/{org}/campaigns/{campaign_number}\"],\n listOrgCampaigns: [\"GET /orgs/{org}/campaigns\"],\n updateCampaign: [\"PATCH /orgs/{org}/campaigns/{campaign_number}\"]\n },\n checks: {\n create: [\"POST /repos/{owner}/{repo}/check-runs\"],\n createSuite: [\"POST /repos/{owner}/{repo}/check-suites\"],\n get: [\"GET /repos/{owner}/{repo}/check-runs/{check_run_id}\"],\n getSuite: [\"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}\"],\n listAnnotations: [\n \"GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations\"\n ],\n listForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-runs\"],\n listForSuite: [\n \"GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs\"\n ],\n listSuitesForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/check-suites\"],\n rerequestRun: [\n \"POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest\"\n ],\n rerequestSuite: [\n \"POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest\"\n ],\n setSuitesPreferences: [\n \"PATCH /repos/{owner}/{repo}/check-suites/preferences\"\n ],\n update: [\"PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}\"]\n },\n codeScanning: {\n commitAutofix: [\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits\"\n ],\n createAutofix: [\n \"POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\"\n ],\n createVariantAnalysis: [\n \"POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses\"\n ],\n deleteAnalysis: [\n \"DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}\"\n ],\n deleteCodeqlDatabase: [\n \"DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\"\n ],\n getAlert: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\",\n {},\n { renamedParameters: { alert_id: \"alert_number\" } }\n ],\n getAnalysis: [\n \"GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}\"\n ],\n getAutofix: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix\"\n ],\n getCodeqlDatabase: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}\"\n ],\n getDefaultSetup: [\"GET /repos/{owner}/{repo}/code-scanning/default-setup\"],\n getSarif: [\"GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}\"],\n getVariantAnalysis: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}\"\n ],\n getVariantAnalysisRepoTask: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}\"\n ],\n listAlertInstances: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\"\n ],\n listAlertsForOrg: [\"GET /orgs/{org}/code-scanning/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/code-scanning/alerts\"],\n listAlertsInstances: [\n \"GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances\",\n {},\n { renamed: [\"codeScanning\", \"listAlertInstances\"] }\n ],\n listCodeqlDatabases: [\n \"GET /repos/{owner}/{repo}/code-scanning/codeql/databases\"\n ],\n listRecentAnalyses: [\"GET /repos/{owner}/{repo}/code-scanning/analyses\"],\n updateAlert: [\n \"PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}\"\n ],\n updateDefaultSetup: [\n \"PATCH /repos/{owner}/{repo}/code-scanning/default-setup\"\n ],\n uploadSarif: [\"POST /repos/{owner}/{repo}/code-scanning/sarifs\"]\n },\n codeSecurity: {\n attachConfiguration: [\n \"POST /orgs/{org}/code-security/configurations/{configuration_id}/attach\"\n ],\n attachEnterpriseConfiguration: [\n \"POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach\"\n ],\n createConfiguration: [\"POST /orgs/{org}/code-security/configurations\"],\n createConfigurationForEnterprise: [\n \"POST /enterprises/{enterprise}/code-security/configurations\"\n ],\n deleteConfiguration: [\n \"DELETE /orgs/{org}/code-security/configurations/{configuration_id}\"\n ],\n deleteConfigurationForEnterprise: [\n \"DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}\"\n ],\n detachConfiguration: [\n \"DELETE /orgs/{org}/code-security/configurations/detach\"\n ],\n getConfiguration: [\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}\"\n ],\n getConfigurationForRepository: [\n \"GET /repos/{owner}/{repo}/code-security-configuration\"\n ],\n getConfigurationsForEnterprise: [\n \"GET /enterprises/{enterprise}/code-security/configurations\"\n ],\n getConfigurationsForOrg: [\"GET /orgs/{org}/code-security/configurations\"],\n getDefaultConfigurations: [\n \"GET /orgs/{org}/code-security/configurations/defaults\"\n ],\n getDefaultConfigurationsForEnterprise: [\n \"GET /enterprises/{enterprise}/code-security/configurations/defaults\"\n ],\n getRepositoriesForConfiguration: [\n \"GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories\"\n ],\n getRepositoriesForEnterpriseConfiguration: [\n \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories\"\n ],\n getSingleConfigurationForEnterprise: [\n \"GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}\"\n ],\n setConfigurationAsDefault: [\n \"PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults\"\n ],\n setConfigurationAsDefaultForEnterprise: [\n \"PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults\"\n ],\n updateConfiguration: [\n \"PATCH /orgs/{org}/code-security/configurations/{configuration_id}\"\n ],\n updateEnterpriseConfiguration: [\n \"PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}\"\n ]\n },\n codesOfConduct: {\n getAllCodesOfConduct: [\"GET /codes_of_conduct\"],\n getConductCode: [\"GET /codes_of_conduct/{key}\"]\n },\n codespaces: {\n addRepositoryForSecretForAuthenticatedUser: [\n \"PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n addSelectedRepoToOrgSecret: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n checkPermissionsForDevcontainer: [\n \"GET /repos/{owner}/{repo}/codespaces/permissions_check\"\n ],\n codespaceMachinesForAuthenticatedUser: [\n \"GET /user/codespaces/{codespace_name}/machines\"\n ],\n createForAuthenticatedUser: [\"POST /user/codespaces\"],\n createOrUpdateOrgSecret: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}\"\n ],\n createOrUpdateRepoSecret: [\n \"PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"\n ],\n createOrUpdateSecretForAuthenticatedUser: [\n \"PUT /user/codespaces/secrets/{secret_name}\"\n ],\n createWithPrForAuthenticatedUser: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces\"\n ],\n createWithRepoForAuthenticatedUser: [\n \"POST /repos/{owner}/{repo}/codespaces\"\n ],\n deleteForAuthenticatedUser: [\"DELETE /user/codespaces/{codespace_name}\"],\n deleteFromOrganization: [\n \"DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}\"\n ],\n deleteOrgSecret: [\"DELETE /orgs/{org}/codespaces/secrets/{secret_name}\"],\n deleteRepoSecret: [\n \"DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"\n ],\n deleteSecretForAuthenticatedUser: [\n \"DELETE /user/codespaces/secrets/{secret_name}\"\n ],\n exportForAuthenticatedUser: [\n \"POST /user/codespaces/{codespace_name}/exports\"\n ],\n getCodespacesForUserInOrg: [\n \"GET /orgs/{org}/members/{username}/codespaces\"\n ],\n getExportDetailsForAuthenticatedUser: [\n \"GET /user/codespaces/{codespace_name}/exports/{export_id}\"\n ],\n getForAuthenticatedUser: [\"GET /user/codespaces/{codespace_name}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/codespaces/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/codespaces/secrets/{secret_name}\"],\n getPublicKeyForAuthenticatedUser: [\n \"GET /user/codespaces/secrets/public-key\"\n ],\n getRepoPublicKey: [\n \"GET /repos/{owner}/{repo}/codespaces/secrets/public-key\"\n ],\n getRepoSecret: [\n \"GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}\"\n ],\n getSecretForAuthenticatedUser: [\n \"GET /user/codespaces/secrets/{secret_name}\"\n ],\n listDevcontainersInRepositoryForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces/devcontainers\"\n ],\n listForAuthenticatedUser: [\"GET /user/codespaces\"],\n listInOrganization: [\n \"GET /orgs/{org}/codespaces\",\n {},\n { renamedParameters: { org_id: \"org\" } }\n ],\n listInRepositoryForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces\"\n ],\n listOrgSecrets: [\"GET /orgs/{org}/codespaces/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/codespaces/secrets\"],\n listRepositoriesForSecretForAuthenticatedUser: [\n \"GET /user/codespaces/secrets/{secret_name}/repositories\"\n ],\n listSecretsForAuthenticatedUser: [\"GET /user/codespaces/secrets\"],\n listSelectedReposForOrgSecret: [\n \"GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories\"\n ],\n preFlightWithRepoForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces/new\"\n ],\n publishForAuthenticatedUser: [\n \"POST /user/codespaces/{codespace_name}/publish\"\n ],\n removeRepositoryForSecretForAuthenticatedUser: [\n \"DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n removeSelectedRepoFromOrgSecret: [\n \"DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n repoMachinesForAuthenticatedUser: [\n \"GET /repos/{owner}/{repo}/codespaces/machines\"\n ],\n setRepositoriesForSecretForAuthenticatedUser: [\n \"PUT /user/codespaces/secrets/{secret_name}/repositories\"\n ],\n setSelectedReposForOrgSecret: [\n \"PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories\"\n ],\n startForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/start\"],\n stopForAuthenticatedUser: [\"POST /user/codespaces/{codespace_name}/stop\"],\n stopInOrganization: [\n \"POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop\"\n ],\n updateForAuthenticatedUser: [\"PATCH /user/codespaces/{codespace_name}\"]\n },\n copilot: {\n addCopilotSeatsForTeams: [\n \"POST /orgs/{org}/copilot/billing/selected_teams\"\n ],\n addCopilotSeatsForUsers: [\n \"POST /orgs/{org}/copilot/billing/selected_users\"\n ],\n cancelCopilotSeatAssignmentForTeams: [\n \"DELETE /orgs/{org}/copilot/billing/selected_teams\"\n ],\n cancelCopilotSeatAssignmentForUsers: [\n \"DELETE /orgs/{org}/copilot/billing/selected_users\"\n ],\n copilotMetricsForOrganization: [\"GET /orgs/{org}/copilot/metrics\"],\n copilotMetricsForTeam: [\"GET /orgs/{org}/team/{team_slug}/copilot/metrics\"],\n getCopilotOrganizationDetails: [\"GET /orgs/{org}/copilot/billing\"],\n getCopilotSeatDetailsForUser: [\n \"GET /orgs/{org}/members/{username}/copilot\"\n ],\n listCopilotSeats: [\"GET /orgs/{org}/copilot/billing/seats\"]\n },\n credentials: { revoke: [\"POST /credentials/revoke\"] },\n dependabot: {\n addSelectedRepoToOrgSecret: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n createOrUpdateOrgSecret: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}\"\n ],\n createOrUpdateRepoSecret: [\n \"PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"\n ],\n deleteOrgSecret: [\"DELETE /orgs/{org}/dependabot/secrets/{secret_name}\"],\n deleteRepoSecret: [\n \"DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"\n ],\n getAlert: [\"GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/dependabot/secrets/public-key\"],\n getOrgSecret: [\"GET /orgs/{org}/dependabot/secrets/{secret_name}\"],\n getRepoPublicKey: [\n \"GET /repos/{owner}/{repo}/dependabot/secrets/public-key\"\n ],\n getRepoSecret: [\n \"GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}\"\n ],\n listAlertsForEnterprise: [\n \"GET /enterprises/{enterprise}/dependabot/alerts\"\n ],\n listAlertsForOrg: [\"GET /orgs/{org}/dependabot/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/dependabot/alerts\"],\n listOrgSecrets: [\"GET /orgs/{org}/dependabot/secrets\"],\n listRepoSecrets: [\"GET /repos/{owner}/{repo}/dependabot/secrets\"],\n listSelectedReposForOrgSecret: [\n \"GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories\"\n ],\n removeSelectedRepoFromOrgSecret: [\n \"DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}\"\n ],\n repositoryAccessForOrg: [\n \"GET /organizations/{org}/dependabot/repository-access\"\n ],\n setRepositoryAccessDefaultLevel: [\n \"PUT /organizations/{org}/dependabot/repository-access/default-level\"\n ],\n setSelectedReposForOrgSecret: [\n \"PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories\"\n ],\n updateAlert: [\n \"PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}\"\n ],\n updateRepositoryAccessForOrg: [\n \"PATCH /organizations/{org}/dependabot/repository-access\"\n ]\n },\n dependencyGraph: {\n createRepositorySnapshot: [\n \"POST /repos/{owner}/{repo}/dependency-graph/snapshots\"\n ],\n diffRange: [\n \"GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}\"\n ],\n exportSbom: [\"GET /repos/{owner}/{repo}/dependency-graph/sbom\"]\n },\n emojis: { get: [\"GET /emojis\"] },\n enterpriseTeamMemberships: {\n add: [\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\"\n ],\n bulkAdd: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add\"\n ],\n bulkRemove: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove\"\n ],\n get: [\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\"\n ],\n list: [\"GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships\"],\n remove: [\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}\"\n ]\n },\n enterpriseTeamOrganizations: {\n add: [\n \"PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\"\n ],\n bulkAdd: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add\"\n ],\n bulkRemove: [\n \"POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove\"\n ],\n delete: [\n \"DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\"\n ],\n getAssignment: [\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}\"\n ],\n getAssignments: [\n \"GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations\"\n ]\n },\n enterpriseTeams: {\n create: [\"POST /enterprises/{enterprise}/teams\"],\n delete: [\"DELETE /enterprises/{enterprise}/teams/{team_slug}\"],\n get: [\"GET /enterprises/{enterprise}/teams/{team_slug}\"],\n list: [\"GET /enterprises/{enterprise}/teams\"],\n update: [\"PATCH /enterprises/{enterprise}/teams/{team_slug}\"]\n },\n gists: {\n checkIsStarred: [\"GET /gists/{gist_id}/star\"],\n create: [\"POST /gists\"],\n createComment: [\"POST /gists/{gist_id}/comments\"],\n delete: [\"DELETE /gists/{gist_id}\"],\n deleteComment: [\"DELETE /gists/{gist_id}/comments/{comment_id}\"],\n fork: [\"POST /gists/{gist_id}/forks\"],\n get: [\"GET /gists/{gist_id}\"],\n getComment: [\"GET /gists/{gist_id}/comments/{comment_id}\"],\n getRevision: [\"GET /gists/{gist_id}/{sha}\"],\n list: [\"GET /gists\"],\n listComments: [\"GET /gists/{gist_id}/comments\"],\n listCommits: [\"GET /gists/{gist_id}/commits\"],\n listForUser: [\"GET /users/{username}/gists\"],\n listForks: [\"GET /gists/{gist_id}/forks\"],\n listPublic: [\"GET /gists/public\"],\n listStarred: [\"GET /gists/starred\"],\n star: [\"PUT /gists/{gist_id}/star\"],\n unstar: [\"DELETE /gists/{gist_id}/star\"],\n update: [\"PATCH /gists/{gist_id}\"],\n updateComment: [\"PATCH /gists/{gist_id}/comments/{comment_id}\"]\n },\n git: {\n createBlob: [\"POST /repos/{owner}/{repo}/git/blobs\"],\n createCommit: [\"POST /repos/{owner}/{repo}/git/commits\"],\n createRef: [\"POST /repos/{owner}/{repo}/git/refs\"],\n createTag: [\"POST /repos/{owner}/{repo}/git/tags\"],\n createTree: [\"POST /repos/{owner}/{repo}/git/trees\"],\n deleteRef: [\"DELETE /repos/{owner}/{repo}/git/refs/{ref}\"],\n getBlob: [\"GET /repos/{owner}/{repo}/git/blobs/{file_sha}\"],\n getCommit: [\"GET /repos/{owner}/{repo}/git/commits/{commit_sha}\"],\n getRef: [\"GET /repos/{owner}/{repo}/git/ref/{ref}\"],\n getTag: [\"GET /repos/{owner}/{repo}/git/tags/{tag_sha}\"],\n getTree: [\"GET /repos/{owner}/{repo}/git/trees/{tree_sha}\"],\n listMatchingRefs: [\"GET /repos/{owner}/{repo}/git/matching-refs/{ref}\"],\n updateRef: [\"PATCH /repos/{owner}/{repo}/git/refs/{ref}\"]\n },\n gitignore: {\n getAllTemplates: [\"GET /gitignore/templates\"],\n getTemplate: [\"GET /gitignore/templates/{name}\"]\n },\n hostedCompute: {\n createNetworkConfigurationForOrg: [\n \"POST /orgs/{org}/settings/network-configurations\"\n ],\n deleteNetworkConfigurationFromOrg: [\n \"DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}\"\n ],\n getNetworkConfigurationForOrg: [\n \"GET /orgs/{org}/settings/network-configurations/{network_configuration_id}\"\n ],\n getNetworkSettingsForOrg: [\n \"GET /orgs/{org}/settings/network-settings/{network_settings_id}\"\n ],\n listNetworkConfigurationsForOrg: [\n \"GET /orgs/{org}/settings/network-configurations\"\n ],\n updateNetworkConfigurationForOrg: [\n \"PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}\"\n ]\n },\n interactions: {\n getRestrictionsForAuthenticatedUser: [\"GET /user/interaction-limits\"],\n getRestrictionsForOrg: [\"GET /orgs/{org}/interaction-limits\"],\n getRestrictionsForRepo: [\"GET /repos/{owner}/{repo}/interaction-limits\"],\n getRestrictionsForYourPublicRepos: [\n \"GET /user/interaction-limits\",\n {},\n { renamed: [\"interactions\", \"getRestrictionsForAuthenticatedUser\"] }\n ],\n removeRestrictionsForAuthenticatedUser: [\"DELETE /user/interaction-limits\"],\n removeRestrictionsForOrg: [\"DELETE /orgs/{org}/interaction-limits\"],\n removeRestrictionsForRepo: [\n \"DELETE /repos/{owner}/{repo}/interaction-limits\"\n ],\n removeRestrictionsForYourPublicRepos: [\n \"DELETE /user/interaction-limits\",\n {},\n { renamed: [\"interactions\", \"removeRestrictionsForAuthenticatedUser\"] }\n ],\n setRestrictionsForAuthenticatedUser: [\"PUT /user/interaction-limits\"],\n setRestrictionsForOrg: [\"PUT /orgs/{org}/interaction-limits\"],\n setRestrictionsForRepo: [\"PUT /repos/{owner}/{repo}/interaction-limits\"],\n setRestrictionsForYourPublicRepos: [\n \"PUT /user/interaction-limits\",\n {},\n { renamed: [\"interactions\", \"setRestrictionsForAuthenticatedUser\"] }\n ]\n },\n issues: {\n addAssignees: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/assignees\"\n ],\n addBlockedByDependency: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\"\n ],\n addLabels: [\"POST /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n addSubIssue: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\"\n ],\n checkUserCanBeAssigned: [\"GET /repos/{owner}/{repo}/assignees/{assignee}\"],\n checkUserCanBeAssignedToIssue: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}\"\n ],\n create: [\"POST /repos/{owner}/{repo}/issues\"],\n createComment: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/comments\"\n ],\n createLabel: [\"POST /repos/{owner}/{repo}/labels\"],\n createMilestone: [\"POST /repos/{owner}/{repo}/milestones\"],\n deleteComment: [\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}\"\n ],\n deleteLabel: [\"DELETE /repos/{owner}/{repo}/labels/{name}\"],\n deleteMilestone: [\n \"DELETE /repos/{owner}/{repo}/milestones/{milestone_number}\"\n ],\n get: [\"GET /repos/{owner}/{repo}/issues/{issue_number}\"],\n getComment: [\"GET /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n getEvent: [\"GET /repos/{owner}/{repo}/issues/events/{event_id}\"],\n getLabel: [\"GET /repos/{owner}/{repo}/labels/{name}\"],\n getMilestone: [\"GET /repos/{owner}/{repo}/milestones/{milestone_number}\"],\n getParent: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/parent\"],\n list: [\"GET /issues\"],\n listAssignees: [\"GET /repos/{owner}/{repo}/assignees\"],\n listComments: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/comments\"],\n listCommentsForRepo: [\"GET /repos/{owner}/{repo}/issues/comments\"],\n listDependenciesBlockedBy: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by\"\n ],\n listDependenciesBlocking: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking\"\n ],\n listEvents: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/events\"],\n listEventsForRepo: [\"GET /repos/{owner}/{repo}/issues/events\"],\n listEventsForTimeline: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/timeline\"\n ],\n listForAuthenticatedUser: [\"GET /user/issues\"],\n listForOrg: [\"GET /orgs/{org}/issues\"],\n listForRepo: [\"GET /repos/{owner}/{repo}/issues\"],\n listLabelsForMilestone: [\n \"GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels\"\n ],\n listLabelsForRepo: [\"GET /repos/{owner}/{repo}/labels\"],\n listLabelsOnIssue: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/labels\"\n ],\n listMilestones: [\"GET /repos/{owner}/{repo}/milestones\"],\n listSubIssues: [\n \"GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues\"\n ],\n lock: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n removeAllLabels: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels\"\n ],\n removeAssignees: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees\"\n ],\n removeDependencyBlockedBy: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}\"\n ],\n removeLabel: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}\"\n ],\n removeSubIssue: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue\"\n ],\n reprioritizeSubIssue: [\n \"PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\"\n ],\n setLabels: [\"PUT /repos/{owner}/{repo}/issues/{issue_number}/labels\"],\n unlock: [\"DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock\"],\n update: [\"PATCH /repos/{owner}/{repo}/issues/{issue_number}\"],\n updateComment: [\"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}\"],\n updateLabel: [\"PATCH /repos/{owner}/{repo}/labels/{name}\"],\n updateMilestone: [\n \"PATCH /repos/{owner}/{repo}/milestones/{milestone_number}\"\n ]\n },\n licenses: {\n get: [\"GET /licenses/{license}\"],\n getAllCommonlyUsed: [\"GET /licenses\"],\n getForRepo: [\"GET /repos/{owner}/{repo}/license\"]\n },\n markdown: {\n render: [\"POST /markdown\"],\n renderRaw: [\n \"POST /markdown/raw\",\n { headers: { \"content-type\": \"text/plain; charset=utf-8\" } }\n ]\n },\n meta: {\n get: [\"GET /meta\"],\n getAllVersions: [\"GET /versions\"],\n getOctocat: [\"GET /octocat\"],\n getZen: [\"GET /zen\"],\n root: [\"GET /\"]\n },\n migrations: {\n deleteArchiveForAuthenticatedUser: [\n \"DELETE /user/migrations/{migration_id}/archive\"\n ],\n deleteArchiveForOrg: [\n \"DELETE /orgs/{org}/migrations/{migration_id}/archive\"\n ],\n downloadArchiveForOrg: [\n \"GET /orgs/{org}/migrations/{migration_id}/archive\"\n ],\n getArchiveForAuthenticatedUser: [\n \"GET /user/migrations/{migration_id}/archive\"\n ],\n getStatusForAuthenticatedUser: [\"GET /user/migrations/{migration_id}\"],\n getStatusForOrg: [\"GET /orgs/{org}/migrations/{migration_id}\"],\n listForAuthenticatedUser: [\"GET /user/migrations\"],\n listForOrg: [\"GET /orgs/{org}/migrations\"],\n listReposForAuthenticatedUser: [\n \"GET /user/migrations/{migration_id}/repositories\"\n ],\n listReposForOrg: [\"GET /orgs/{org}/migrations/{migration_id}/repositories\"],\n listReposForUser: [\n \"GET /user/migrations/{migration_id}/repositories\",\n {},\n { renamed: [\"migrations\", \"listReposForAuthenticatedUser\"] }\n ],\n startForAuthenticatedUser: [\"POST /user/migrations\"],\n startForOrg: [\"POST /orgs/{org}/migrations\"],\n unlockRepoForAuthenticatedUser: [\n \"DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock\"\n ],\n unlockRepoForOrg: [\n \"DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock\"\n ]\n },\n oidc: {\n getOidcCustomSubTemplateForOrg: [\n \"GET /orgs/{org}/actions/oidc/customization/sub\"\n ],\n updateOidcCustomSubTemplateForOrg: [\n \"PUT /orgs/{org}/actions/oidc/customization/sub\"\n ]\n },\n orgs: {\n addSecurityManagerTeam: [\n \"PUT /orgs/{org}/security-managers/teams/{team_slug}\",\n {},\n {\n deprecated: \"octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team\"\n }\n ],\n assignTeamToOrgRole: [\n \"PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\"\n ],\n assignUserToOrgRole: [\n \"PUT /orgs/{org}/organization-roles/users/{username}/{role_id}\"\n ],\n blockUser: [\"PUT /orgs/{org}/blocks/{username}\"],\n cancelInvitation: [\"DELETE /orgs/{org}/invitations/{invitation_id}\"],\n checkBlockedUser: [\"GET /orgs/{org}/blocks/{username}\"],\n checkMembershipForUser: [\"GET /orgs/{org}/members/{username}\"],\n checkPublicMembershipForUser: [\"GET /orgs/{org}/public_members/{username}\"],\n convertMemberToOutsideCollaborator: [\n \"PUT /orgs/{org}/outside_collaborators/{username}\"\n ],\n createArtifactStorageRecord: [\n \"POST /orgs/{org}/artifacts/metadata/storage-record\"\n ],\n createInvitation: [\"POST /orgs/{org}/invitations\"],\n createIssueType: [\"POST /orgs/{org}/issue-types\"],\n createWebhook: [\"POST /orgs/{org}/hooks\"],\n customPropertiesForOrgsCreateOrUpdateOrganizationValues: [\n \"PATCH /organizations/{org}/org-properties/values\"\n ],\n customPropertiesForOrgsGetOrganizationValues: [\n \"GET /organizations/{org}/org-properties/values\"\n ],\n customPropertiesForReposCreateOrUpdateOrganizationDefinition: [\n \"PUT /orgs/{org}/properties/schema/{custom_property_name}\"\n ],\n customPropertiesForReposCreateOrUpdateOrganizationDefinitions: [\n \"PATCH /orgs/{org}/properties/schema\"\n ],\n customPropertiesForReposCreateOrUpdateOrganizationValues: [\n \"PATCH /orgs/{org}/properties/values\"\n ],\n customPropertiesForReposDeleteOrganizationDefinition: [\n \"DELETE /orgs/{org}/properties/schema/{custom_property_name}\"\n ],\n customPropertiesForReposGetOrganizationDefinition: [\n \"GET /orgs/{org}/properties/schema/{custom_property_name}\"\n ],\n customPropertiesForReposGetOrganizationDefinitions: [\n \"GET /orgs/{org}/properties/schema\"\n ],\n customPropertiesForReposGetOrganizationValues: [\n \"GET /orgs/{org}/properties/values\"\n ],\n delete: [\"DELETE /orgs/{org}\"],\n deleteAttestationsBulk: [\"POST /orgs/{org}/attestations/delete-request\"],\n deleteAttestationsById: [\n \"DELETE /orgs/{org}/attestations/{attestation_id}\"\n ],\n deleteAttestationsBySubjectDigest: [\n \"DELETE /orgs/{org}/attestations/digest/{subject_digest}\"\n ],\n deleteIssueType: [\"DELETE /orgs/{org}/issue-types/{issue_type_id}\"],\n deleteWebhook: [\"DELETE /orgs/{org}/hooks/{hook_id}\"],\n disableSelectedRepositoryImmutableReleasesOrganization: [\n \"DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\"\n ],\n enableSelectedRepositoryImmutableReleasesOrganization: [\n \"PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}\"\n ],\n get: [\"GET /orgs/{org}\"],\n getImmutableReleasesSettings: [\n \"GET /orgs/{org}/settings/immutable-releases\"\n ],\n getImmutableReleasesSettingsRepositories: [\n \"GET /orgs/{org}/settings/immutable-releases/repositories\"\n ],\n getMembershipForAuthenticatedUser: [\"GET /user/memberships/orgs/{org}\"],\n getMembershipForUser: [\"GET /orgs/{org}/memberships/{username}\"],\n getOrgRole: [\"GET /orgs/{org}/organization-roles/{role_id}\"],\n getOrgRulesetHistory: [\"GET /orgs/{org}/rulesets/{ruleset_id}/history\"],\n getOrgRulesetVersion: [\n \"GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}\"\n ],\n getWebhook: [\"GET /orgs/{org}/hooks/{hook_id}\"],\n getWebhookConfigForOrg: [\"GET /orgs/{org}/hooks/{hook_id}/config\"],\n getWebhookDelivery: [\n \"GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}\"\n ],\n list: [\"GET /organizations\"],\n listAppInstallations: [\"GET /orgs/{org}/installations\"],\n listArtifactStorageRecords: [\n \"GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records\"\n ],\n listAttestationRepositories: [\"GET /orgs/{org}/attestations/repositories\"],\n listAttestations: [\"GET /orgs/{org}/attestations/{subject_digest}\"],\n listAttestationsBulk: [\n \"POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}\"\n ],\n listBlockedUsers: [\"GET /orgs/{org}/blocks\"],\n listFailedInvitations: [\"GET /orgs/{org}/failed_invitations\"],\n listForAuthenticatedUser: [\"GET /user/orgs\"],\n listForUser: [\"GET /users/{username}/orgs\"],\n listInvitationTeams: [\"GET /orgs/{org}/invitations/{invitation_id}/teams\"],\n listIssueTypes: [\"GET /orgs/{org}/issue-types\"],\n listMembers: [\"GET /orgs/{org}/members\"],\n listMembershipsForAuthenticatedUser: [\"GET /user/memberships/orgs\"],\n listOrgRoleTeams: [\"GET /orgs/{org}/organization-roles/{role_id}/teams\"],\n listOrgRoleUsers: [\"GET /orgs/{org}/organization-roles/{role_id}/users\"],\n listOrgRoles: [\"GET /orgs/{org}/organization-roles\"],\n listOrganizationFineGrainedPermissions: [\n \"GET /orgs/{org}/organization-fine-grained-permissions\"\n ],\n listOutsideCollaborators: [\"GET /orgs/{org}/outside_collaborators\"],\n listPatGrantRepositories: [\n \"GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories\"\n ],\n listPatGrantRequestRepositories: [\n \"GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories\"\n ],\n listPatGrantRequests: [\"GET /orgs/{org}/personal-access-token-requests\"],\n listPatGrants: [\"GET /orgs/{org}/personal-access-tokens\"],\n listPendingInvitations: [\"GET /orgs/{org}/invitations\"],\n listPublicMembers: [\"GET /orgs/{org}/public_members\"],\n listSecurityManagerTeams: [\n \"GET /orgs/{org}/security-managers\",\n {},\n {\n deprecated: \"octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams\"\n }\n ],\n listWebhookDeliveries: [\"GET /orgs/{org}/hooks/{hook_id}/deliveries\"],\n listWebhooks: [\"GET /orgs/{org}/hooks\"],\n pingWebhook: [\"POST /orgs/{org}/hooks/{hook_id}/pings\"],\n redeliverWebhookDelivery: [\n \"POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\"\n ],\n removeMember: [\"DELETE /orgs/{org}/members/{username}\"],\n removeMembershipForUser: [\"DELETE /orgs/{org}/memberships/{username}\"],\n removeOutsideCollaborator: [\n \"DELETE /orgs/{org}/outside_collaborators/{username}\"\n ],\n removePublicMembershipForAuthenticatedUser: [\n \"DELETE /orgs/{org}/public_members/{username}\"\n ],\n removeSecurityManagerTeam: [\n \"DELETE /orgs/{org}/security-managers/teams/{team_slug}\",\n {},\n {\n deprecated: \"octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team\"\n }\n ],\n reviewPatGrantRequest: [\n \"POST /orgs/{org}/personal-access-token-requests/{pat_request_id}\"\n ],\n reviewPatGrantRequestsInBulk: [\n \"POST /orgs/{org}/personal-access-token-requests\"\n ],\n revokeAllOrgRolesTeam: [\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}\"\n ],\n revokeAllOrgRolesUser: [\n \"DELETE /orgs/{org}/organization-roles/users/{username}\"\n ],\n revokeOrgRoleTeam: [\n \"DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}\"\n ],\n revokeOrgRoleUser: [\n \"DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}\"\n ],\n setImmutableReleasesSettings: [\n \"PUT /orgs/{org}/settings/immutable-releases\"\n ],\n setImmutableReleasesSettingsRepositories: [\n \"PUT /orgs/{org}/settings/immutable-releases/repositories\"\n ],\n setMembershipForUser: [\"PUT /orgs/{org}/memberships/{username}\"],\n setPublicMembershipForAuthenticatedUser: [\n \"PUT /orgs/{org}/public_members/{username}\"\n ],\n unblockUser: [\"DELETE /orgs/{org}/blocks/{username}\"],\n update: [\"PATCH /orgs/{org}\"],\n updateIssueType: [\"PUT /orgs/{org}/issue-types/{issue_type_id}\"],\n updateMembershipForAuthenticatedUser: [\n \"PATCH /user/memberships/orgs/{org}\"\n ],\n updatePatAccess: [\"POST /orgs/{org}/personal-access-tokens/{pat_id}\"],\n updatePatAccesses: [\"POST /orgs/{org}/personal-access-tokens\"],\n updateWebhook: [\"PATCH /orgs/{org}/hooks/{hook_id}\"],\n updateWebhookConfigForOrg: [\"PATCH /orgs/{org}/hooks/{hook_id}/config\"]\n },\n packages: {\n deletePackageForAuthenticatedUser: [\n \"DELETE /user/packages/{package_type}/{package_name}\"\n ],\n deletePackageForOrg: [\n \"DELETE /orgs/{org}/packages/{package_type}/{package_name}\"\n ],\n deletePackageForUser: [\n \"DELETE /users/{username}/packages/{package_type}/{package_name}\"\n ],\n deletePackageVersionForAuthenticatedUser: [\n \"DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n deletePackageVersionForOrg: [\n \"DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n deletePackageVersionForUser: [\n \"DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n getAllPackageVersionsForAPackageOwnedByAnOrg: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\",\n {},\n { renamed: [\"packages\", \"getAllPackageVersionsForPackageOwnedByOrg\"] }\n ],\n getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}/versions\",\n {},\n {\n renamed: [\n \"packages\",\n \"getAllPackageVersionsForPackageOwnedByAuthenticatedUser\"\n ]\n }\n ],\n getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}/versions\"\n ],\n getAllPackageVersionsForPackageOwnedByOrg: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions\"\n ],\n getAllPackageVersionsForPackageOwnedByUser: [\n \"GET /users/{username}/packages/{package_type}/{package_name}/versions\"\n ],\n getPackageForAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}\"\n ],\n getPackageForOrganization: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}\"\n ],\n getPackageForUser: [\n \"GET /users/{username}/packages/{package_type}/{package_name}\"\n ],\n getPackageVersionForAuthenticatedUser: [\n \"GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n getPackageVersionForOrganization: [\n \"GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n getPackageVersionForUser: [\n \"GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}\"\n ],\n listDockerMigrationConflictingPackagesForAuthenticatedUser: [\n \"GET /user/docker/conflicts\"\n ],\n listDockerMigrationConflictingPackagesForOrganization: [\n \"GET /orgs/{org}/docker/conflicts\"\n ],\n listDockerMigrationConflictingPackagesForUser: [\n \"GET /users/{username}/docker/conflicts\"\n ],\n listPackagesForAuthenticatedUser: [\"GET /user/packages\"],\n listPackagesForOrganization: [\"GET /orgs/{org}/packages\"],\n listPackagesForUser: [\"GET /users/{username}/packages\"],\n restorePackageForAuthenticatedUser: [\n \"POST /user/packages/{package_type}/{package_name}/restore{?token}\"\n ],\n restorePackageForOrg: [\n \"POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}\"\n ],\n restorePackageForUser: [\n \"POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}\"\n ],\n restorePackageVersionForAuthenticatedUser: [\n \"POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"\n ],\n restorePackageVersionForOrg: [\n \"POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"\n ],\n restorePackageVersionForUser: [\n \"POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore\"\n ]\n },\n privateRegistries: {\n createOrgPrivateRegistry: [\"POST /orgs/{org}/private-registries\"],\n deleteOrgPrivateRegistry: [\n \"DELETE /orgs/{org}/private-registries/{secret_name}\"\n ],\n getOrgPrivateRegistry: [\"GET /orgs/{org}/private-registries/{secret_name}\"],\n getOrgPublicKey: [\"GET /orgs/{org}/private-registries/public-key\"],\n listOrgPrivateRegistries: [\"GET /orgs/{org}/private-registries\"],\n updateOrgPrivateRegistry: [\n \"PATCH /orgs/{org}/private-registries/{secret_name}\"\n ]\n },\n projects: {\n addItemForOrg: [\"POST /orgs/{org}/projectsV2/{project_number}/items\"],\n addItemForUser: [\n \"POST /users/{username}/projectsV2/{project_number}/items\"\n ],\n deleteItemForOrg: [\n \"DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"\n ],\n deleteItemForUser: [\n \"DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}\"\n ],\n getFieldForOrg: [\n \"GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}\"\n ],\n getFieldForUser: [\n \"GET /users/{username}/projectsV2/{project_number}/fields/{field_id}\"\n ],\n getForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}\"],\n getForUser: [\"GET /users/{username}/projectsV2/{project_number}\"],\n getOrgItem: [\"GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"],\n getUserItem: [\n \"GET /users/{username}/projectsV2/{project_number}/items/{item_id}\"\n ],\n listFieldsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/fields\"],\n listFieldsForUser: [\n \"GET /users/{username}/projectsV2/{project_number}/fields\"\n ],\n listForOrg: [\"GET /orgs/{org}/projectsV2\"],\n listForUser: [\"GET /users/{username}/projectsV2\"],\n listItemsForOrg: [\"GET /orgs/{org}/projectsV2/{project_number}/items\"],\n listItemsForUser: [\n \"GET /users/{username}/projectsV2/{project_number}/items\"\n ],\n updateItemForOrg: [\n \"PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}\"\n ],\n updateItemForUser: [\n \"PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}\"\n ]\n },\n pulls: {\n checkIfMerged: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n create: [\"POST /repos/{owner}/{repo}/pulls\"],\n createReplyForReviewComment: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\"\n ],\n createReview: [\"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n createReviewComment: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/comments\"\n ],\n deletePendingReview: [\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"\n ],\n deleteReviewComment: [\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}\"\n ],\n dismissReview: [\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals\"\n ],\n get: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}\"],\n getReview: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"\n ],\n getReviewComment: [\"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}\"],\n list: [\"GET /repos/{owner}/{repo}/pulls\"],\n listCommentsForReview: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments\"\n ],\n listCommits: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/commits\"],\n listFiles: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/files\"],\n listRequestedReviewers: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"\n ],\n listReviewComments: [\n \"GET /repos/{owner}/{repo}/pulls/{pull_number}/comments\"\n ],\n listReviewCommentsForRepo: [\"GET /repos/{owner}/{repo}/pulls/comments\"],\n listReviews: [\"GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews\"],\n merge: [\"PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge\"],\n removeRequestedReviewers: [\n \"DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"\n ],\n requestReviewers: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\"\n ],\n submitReview: [\n \"POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events\"\n ],\n update: [\"PATCH /repos/{owner}/{repo}/pulls/{pull_number}\"],\n updateBranch: [\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch\"\n ],\n updateReview: [\n \"PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}\"\n ],\n updateReviewComment: [\n \"PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}\"\n ]\n },\n rateLimit: { get: [\"GET /rate_limit\"] },\n reactions: {\n createForCommitComment: [\n \"POST /repos/{owner}/{repo}/comments/{comment_id}/reactions\"\n ],\n createForIssue: [\n \"POST /repos/{owner}/{repo}/issues/{issue_number}/reactions\"\n ],\n createForIssueComment: [\n \"POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\"\n ],\n createForPullRequestReviewComment: [\n \"POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\"\n ],\n createForRelease: [\n \"POST /repos/{owner}/{repo}/releases/{release_id}/reactions\"\n ],\n createForTeamDiscussionCommentInOrg: [\n \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\"\n ],\n createForTeamDiscussionInOrg: [\n \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\"\n ],\n deleteForCommitComment: [\n \"DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}\"\n ],\n deleteForIssue: [\n \"DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}\"\n ],\n deleteForIssueComment: [\n \"DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}\"\n ],\n deleteForPullRequestComment: [\n \"DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}\"\n ],\n deleteForRelease: [\n \"DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}\"\n ],\n deleteForTeamDiscussion: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}\"\n ],\n deleteForTeamDiscussionComment: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}\"\n ],\n listForCommitComment: [\n \"GET /repos/{owner}/{repo}/comments/{comment_id}/reactions\"\n ],\n listForIssue: [\"GET /repos/{owner}/{repo}/issues/{issue_number}/reactions\"],\n listForIssueComment: [\n \"GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions\"\n ],\n listForPullRequestReviewComment: [\n \"GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions\"\n ],\n listForRelease: [\n \"GET /repos/{owner}/{repo}/releases/{release_id}/reactions\"\n ],\n listForTeamDiscussionCommentInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions\"\n ],\n listForTeamDiscussionInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions\"\n ]\n },\n repos: {\n acceptInvitation: [\n \"PATCH /user/repository_invitations/{invitation_id}\",\n {},\n { renamed: [\"repos\", \"acceptInvitationForAuthenticatedUser\"] }\n ],\n acceptInvitationForAuthenticatedUser: [\n \"PATCH /user/repository_invitations/{invitation_id}\"\n ],\n addAppAccessRestrictions: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n {},\n { mapToData: \"apps\" }\n ],\n addCollaborator: [\"PUT /repos/{owner}/{repo}/collaborators/{username}\"],\n addStatusCheckContexts: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n {},\n { mapToData: \"contexts\" }\n ],\n addTeamAccessRestrictions: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n {},\n { mapToData: \"teams\" }\n ],\n addUserAccessRestrictions: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n {},\n { mapToData: \"users\" }\n ],\n cancelPagesDeployment: [\n \"POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel\"\n ],\n checkAutomatedSecurityFixes: [\n \"GET /repos/{owner}/{repo}/automated-security-fixes\"\n ],\n checkCollaborator: [\"GET /repos/{owner}/{repo}/collaborators/{username}\"],\n checkImmutableReleases: [\"GET /repos/{owner}/{repo}/immutable-releases\"],\n checkPrivateVulnerabilityReporting: [\n \"GET /repos/{owner}/{repo}/private-vulnerability-reporting\"\n ],\n checkVulnerabilityAlerts: [\n \"GET /repos/{owner}/{repo}/vulnerability-alerts\"\n ],\n codeownersErrors: [\"GET /repos/{owner}/{repo}/codeowners/errors\"],\n compareCommits: [\"GET /repos/{owner}/{repo}/compare/{base}...{head}\"],\n compareCommitsWithBasehead: [\n \"GET /repos/{owner}/{repo}/compare/{basehead}\"\n ],\n createAttestation: [\"POST /repos/{owner}/{repo}/attestations\"],\n createAutolink: [\"POST /repos/{owner}/{repo}/autolinks\"],\n createCommitComment: [\n \"POST /repos/{owner}/{repo}/commits/{commit_sha}/comments\"\n ],\n createCommitSignatureProtection: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"\n ],\n createCommitStatus: [\"POST /repos/{owner}/{repo}/statuses/{sha}\"],\n createDeployKey: [\"POST /repos/{owner}/{repo}/keys\"],\n createDeployment: [\"POST /repos/{owner}/{repo}/deployments\"],\n createDeploymentBranchPolicy: [\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\"\n ],\n createDeploymentProtectionRule: [\n \"POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\"\n ],\n createDeploymentStatus: [\n \"POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"\n ],\n createDispatchEvent: [\"POST /repos/{owner}/{repo}/dispatches\"],\n createForAuthenticatedUser: [\"POST /user/repos\"],\n createFork: [\"POST /repos/{owner}/{repo}/forks\"],\n createInOrg: [\"POST /orgs/{org}/repos\"],\n createOrUpdateEnvironment: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}\"\n ],\n createOrUpdateFileContents: [\"PUT /repos/{owner}/{repo}/contents/{path}\"],\n createOrgRuleset: [\"POST /orgs/{org}/rulesets\"],\n createPagesDeployment: [\"POST /repos/{owner}/{repo}/pages/deployments\"],\n createPagesSite: [\"POST /repos/{owner}/{repo}/pages\"],\n createRelease: [\"POST /repos/{owner}/{repo}/releases\"],\n createRepoRuleset: [\"POST /repos/{owner}/{repo}/rulesets\"],\n createUsingTemplate: [\n \"POST /repos/{template_owner}/{template_repo}/generate\"\n ],\n createWebhook: [\"POST /repos/{owner}/{repo}/hooks\"],\n customPropertiesForReposCreateOrUpdateRepositoryValues: [\n \"PATCH /repos/{owner}/{repo}/properties/values\"\n ],\n customPropertiesForReposGetRepositoryValues: [\n \"GET /repos/{owner}/{repo}/properties/values\"\n ],\n declineInvitation: [\n \"DELETE /user/repository_invitations/{invitation_id}\",\n {},\n { renamed: [\"repos\", \"declineInvitationForAuthenticatedUser\"] }\n ],\n declineInvitationForAuthenticatedUser: [\n \"DELETE /user/repository_invitations/{invitation_id}\"\n ],\n delete: [\"DELETE /repos/{owner}/{repo}\"],\n deleteAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"\n ],\n deleteAdminBranchProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"\n ],\n deleteAnEnvironment: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}\"\n ],\n deleteAutolink: [\"DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n deleteBranchProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection\"\n ],\n deleteCommitComment: [\"DELETE /repos/{owner}/{repo}/comments/{comment_id}\"],\n deleteCommitSignatureProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"\n ],\n deleteDeployKey: [\"DELETE /repos/{owner}/{repo}/keys/{key_id}\"],\n deleteDeployment: [\n \"DELETE /repos/{owner}/{repo}/deployments/{deployment_id}\"\n ],\n deleteDeploymentBranchPolicy: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\"\n ],\n deleteFile: [\"DELETE /repos/{owner}/{repo}/contents/{path}\"],\n deleteInvitation: [\n \"DELETE /repos/{owner}/{repo}/invitations/{invitation_id}\"\n ],\n deleteOrgRuleset: [\"DELETE /orgs/{org}/rulesets/{ruleset_id}\"],\n deletePagesSite: [\"DELETE /repos/{owner}/{repo}/pages\"],\n deletePullRequestReviewProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"\n ],\n deleteRelease: [\"DELETE /repos/{owner}/{repo}/releases/{release_id}\"],\n deleteReleaseAsset: [\n \"DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}\"\n ],\n deleteRepoRuleset: [\"DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n deleteWebhook: [\"DELETE /repos/{owner}/{repo}/hooks/{hook_id}\"],\n disableAutomatedSecurityFixes: [\n \"DELETE /repos/{owner}/{repo}/automated-security-fixes\"\n ],\n disableDeploymentProtectionRule: [\n \"DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\"\n ],\n disableImmutableReleases: [\n \"DELETE /repos/{owner}/{repo}/immutable-releases\"\n ],\n disablePrivateVulnerabilityReporting: [\n \"DELETE /repos/{owner}/{repo}/private-vulnerability-reporting\"\n ],\n disableVulnerabilityAlerts: [\n \"DELETE /repos/{owner}/{repo}/vulnerability-alerts\"\n ],\n downloadArchive: [\n \"GET /repos/{owner}/{repo}/zipball/{ref}\",\n {},\n { renamed: [\"repos\", \"downloadZipballArchive\"] }\n ],\n downloadTarballArchive: [\"GET /repos/{owner}/{repo}/tarball/{ref}\"],\n downloadZipballArchive: [\"GET /repos/{owner}/{repo}/zipball/{ref}\"],\n enableAutomatedSecurityFixes: [\n \"PUT /repos/{owner}/{repo}/automated-security-fixes\"\n ],\n enableImmutableReleases: [\"PUT /repos/{owner}/{repo}/immutable-releases\"],\n enablePrivateVulnerabilityReporting: [\n \"PUT /repos/{owner}/{repo}/private-vulnerability-reporting\"\n ],\n enableVulnerabilityAlerts: [\n \"PUT /repos/{owner}/{repo}/vulnerability-alerts\"\n ],\n generateReleaseNotes: [\n \"POST /repos/{owner}/{repo}/releases/generate-notes\"\n ],\n get: [\"GET /repos/{owner}/{repo}\"],\n getAccessRestrictions: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions\"\n ],\n getAdminBranchProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"\n ],\n getAllDeploymentProtectionRules: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules\"\n ],\n getAllEnvironments: [\"GET /repos/{owner}/{repo}/environments\"],\n getAllStatusCheckContexts: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\"\n ],\n getAllTopics: [\"GET /repos/{owner}/{repo}/topics\"],\n getAppsWithAccessToProtectedBranch: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\"\n ],\n getAutolink: [\"GET /repos/{owner}/{repo}/autolinks/{autolink_id}\"],\n getBranch: [\"GET /repos/{owner}/{repo}/branches/{branch}\"],\n getBranchProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection\"\n ],\n getBranchRules: [\"GET /repos/{owner}/{repo}/rules/branches/{branch}\"],\n getClones: [\"GET /repos/{owner}/{repo}/traffic/clones\"],\n getCodeFrequencyStats: [\"GET /repos/{owner}/{repo}/stats/code_frequency\"],\n getCollaboratorPermissionLevel: [\n \"GET /repos/{owner}/{repo}/collaborators/{username}/permission\"\n ],\n getCombinedStatusForRef: [\"GET /repos/{owner}/{repo}/commits/{ref}/status\"],\n getCommit: [\"GET /repos/{owner}/{repo}/commits/{ref}\"],\n getCommitActivityStats: [\"GET /repos/{owner}/{repo}/stats/commit_activity\"],\n getCommitComment: [\"GET /repos/{owner}/{repo}/comments/{comment_id}\"],\n getCommitSignatureProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures\"\n ],\n getCommunityProfileMetrics: [\"GET /repos/{owner}/{repo}/community/profile\"],\n getContent: [\"GET /repos/{owner}/{repo}/contents/{path}\"],\n getContributorsStats: [\"GET /repos/{owner}/{repo}/stats/contributors\"],\n getCustomDeploymentProtectionRule: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}\"\n ],\n getDeployKey: [\"GET /repos/{owner}/{repo}/keys/{key_id}\"],\n getDeployment: [\"GET /repos/{owner}/{repo}/deployments/{deployment_id}\"],\n getDeploymentBranchPolicy: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\"\n ],\n getDeploymentStatus: [\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}\"\n ],\n getEnvironment: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}\"\n ],\n getLatestPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/latest\"],\n getLatestRelease: [\"GET /repos/{owner}/{repo}/releases/latest\"],\n getOrgRuleSuite: [\"GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}\"],\n getOrgRuleSuites: [\"GET /orgs/{org}/rulesets/rule-suites\"],\n getOrgRuleset: [\"GET /orgs/{org}/rulesets/{ruleset_id}\"],\n getOrgRulesets: [\"GET /orgs/{org}/rulesets\"],\n getPages: [\"GET /repos/{owner}/{repo}/pages\"],\n getPagesBuild: [\"GET /repos/{owner}/{repo}/pages/builds/{build_id}\"],\n getPagesDeployment: [\n \"GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}\"\n ],\n getPagesHealthCheck: [\"GET /repos/{owner}/{repo}/pages/health\"],\n getParticipationStats: [\"GET /repos/{owner}/{repo}/stats/participation\"],\n getPullRequestReviewProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"\n ],\n getPunchCardStats: [\"GET /repos/{owner}/{repo}/stats/punch_card\"],\n getReadme: [\"GET /repos/{owner}/{repo}/readme\"],\n getReadmeInDirectory: [\"GET /repos/{owner}/{repo}/readme/{dir}\"],\n getRelease: [\"GET /repos/{owner}/{repo}/releases/{release_id}\"],\n getReleaseAsset: [\"GET /repos/{owner}/{repo}/releases/assets/{asset_id}\"],\n getReleaseByTag: [\"GET /repos/{owner}/{repo}/releases/tags/{tag}\"],\n getRepoRuleSuite: [\n \"GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}\"\n ],\n getRepoRuleSuites: [\"GET /repos/{owner}/{repo}/rulesets/rule-suites\"],\n getRepoRuleset: [\"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n getRepoRulesetHistory: [\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history\"\n ],\n getRepoRulesetVersion: [\n \"GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}\"\n ],\n getRepoRulesets: [\"GET /repos/{owner}/{repo}/rulesets\"],\n getStatusChecksProtection: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"\n ],\n getTeamsWithAccessToProtectedBranch: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\"\n ],\n getTopPaths: [\"GET /repos/{owner}/{repo}/traffic/popular/paths\"],\n getTopReferrers: [\"GET /repos/{owner}/{repo}/traffic/popular/referrers\"],\n getUsersWithAccessToProtectedBranch: [\n \"GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\"\n ],\n getViews: [\"GET /repos/{owner}/{repo}/traffic/views\"],\n getWebhook: [\"GET /repos/{owner}/{repo}/hooks/{hook_id}\"],\n getWebhookConfigForRepo: [\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/config\"\n ],\n getWebhookDelivery: [\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}\"\n ],\n listActivities: [\"GET /repos/{owner}/{repo}/activity\"],\n listAttestations: [\n \"GET /repos/{owner}/{repo}/attestations/{subject_digest}\"\n ],\n listAutolinks: [\"GET /repos/{owner}/{repo}/autolinks\"],\n listBranches: [\"GET /repos/{owner}/{repo}/branches\"],\n listBranchesForHeadCommit: [\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head\"\n ],\n listCollaborators: [\"GET /repos/{owner}/{repo}/collaborators\"],\n listCommentsForCommit: [\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/comments\"\n ],\n listCommitCommentsForRepo: [\"GET /repos/{owner}/{repo}/comments\"],\n listCommitStatusesForRef: [\n \"GET /repos/{owner}/{repo}/commits/{ref}/statuses\"\n ],\n listCommits: [\"GET /repos/{owner}/{repo}/commits\"],\n listContributors: [\"GET /repos/{owner}/{repo}/contributors\"],\n listCustomDeploymentRuleIntegrations: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps\"\n ],\n listDeployKeys: [\"GET /repos/{owner}/{repo}/keys\"],\n listDeploymentBranchPolicies: [\n \"GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies\"\n ],\n listDeploymentStatuses: [\n \"GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses\"\n ],\n listDeployments: [\"GET /repos/{owner}/{repo}/deployments\"],\n listForAuthenticatedUser: [\"GET /user/repos\"],\n listForOrg: [\"GET /orgs/{org}/repos\"],\n listForUser: [\"GET /users/{username}/repos\"],\n listForks: [\"GET /repos/{owner}/{repo}/forks\"],\n listInvitations: [\"GET /repos/{owner}/{repo}/invitations\"],\n listInvitationsForAuthenticatedUser: [\"GET /user/repository_invitations\"],\n listLanguages: [\"GET /repos/{owner}/{repo}/languages\"],\n listPagesBuilds: [\"GET /repos/{owner}/{repo}/pages/builds\"],\n listPublic: [\"GET /repositories\"],\n listPullRequestsAssociatedWithCommit: [\n \"GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls\"\n ],\n listReleaseAssets: [\n \"GET /repos/{owner}/{repo}/releases/{release_id}/assets\"\n ],\n listReleases: [\"GET /repos/{owner}/{repo}/releases\"],\n listTags: [\"GET /repos/{owner}/{repo}/tags\"],\n listTeams: [\"GET /repos/{owner}/{repo}/teams\"],\n listWebhookDeliveries: [\n \"GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries\"\n ],\n listWebhooks: [\"GET /repos/{owner}/{repo}/hooks\"],\n merge: [\"POST /repos/{owner}/{repo}/merges\"],\n mergeUpstream: [\"POST /repos/{owner}/{repo}/merge-upstream\"],\n pingWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/pings\"],\n redeliverWebhookDelivery: [\n \"POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts\"\n ],\n removeAppAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n {},\n { mapToData: \"apps\" }\n ],\n removeCollaborator: [\n \"DELETE /repos/{owner}/{repo}/collaborators/{username}\"\n ],\n removeStatusCheckContexts: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n {},\n { mapToData: \"contexts\" }\n ],\n removeStatusCheckProtection: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"\n ],\n removeTeamAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n {},\n { mapToData: \"teams\" }\n ],\n removeUserAccessRestrictions: [\n \"DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n {},\n { mapToData: \"users\" }\n ],\n renameBranch: [\"POST /repos/{owner}/{repo}/branches/{branch}/rename\"],\n replaceAllTopics: [\"PUT /repos/{owner}/{repo}/topics\"],\n requestPagesBuild: [\"POST /repos/{owner}/{repo}/pages/builds\"],\n setAdminBranchProtection: [\n \"POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins\"\n ],\n setAppAccessRestrictions: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps\",\n {},\n { mapToData: \"apps\" }\n ],\n setStatusCheckContexts: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts\",\n {},\n { mapToData: \"contexts\" }\n ],\n setTeamAccessRestrictions: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams\",\n {},\n { mapToData: \"teams\" }\n ],\n setUserAccessRestrictions: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users\",\n {},\n { mapToData: \"users\" }\n ],\n testPushWebhook: [\"POST /repos/{owner}/{repo}/hooks/{hook_id}/tests\"],\n transfer: [\"POST /repos/{owner}/{repo}/transfer\"],\n update: [\"PATCH /repos/{owner}/{repo}\"],\n updateBranchProtection: [\n \"PUT /repos/{owner}/{repo}/branches/{branch}/protection\"\n ],\n updateCommitComment: [\"PATCH /repos/{owner}/{repo}/comments/{comment_id}\"],\n updateDeploymentBranchPolicy: [\n \"PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}\"\n ],\n updateInformationAboutPagesSite: [\"PUT /repos/{owner}/{repo}/pages\"],\n updateInvitation: [\n \"PATCH /repos/{owner}/{repo}/invitations/{invitation_id}\"\n ],\n updateOrgRuleset: [\"PUT /orgs/{org}/rulesets/{ruleset_id}\"],\n updatePullRequestReviewProtection: [\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews\"\n ],\n updateRelease: [\"PATCH /repos/{owner}/{repo}/releases/{release_id}\"],\n updateReleaseAsset: [\n \"PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}\"\n ],\n updateRepoRuleset: [\"PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}\"],\n updateStatusCheckPotection: [\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\",\n {},\n { renamed: [\"repos\", \"updateStatusCheckProtection\"] }\n ],\n updateStatusCheckProtection: [\n \"PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks\"\n ],\n updateWebhook: [\"PATCH /repos/{owner}/{repo}/hooks/{hook_id}\"],\n updateWebhookConfigForRepo: [\n \"PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config\"\n ],\n uploadReleaseAsset: [\n \"POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}\",\n { baseUrl: \"https://uploads.github.com\" }\n ]\n },\n search: {\n code: [\"GET /search/code\"],\n commits: [\"GET /search/commits\"],\n issuesAndPullRequests: [\"GET /search/issues\"],\n labels: [\"GET /search/labels\"],\n repos: [\"GET /search/repositories\"],\n topics: [\"GET /search/topics\"],\n users: [\"GET /search/users\"]\n },\n secretScanning: {\n createPushProtectionBypass: [\n \"POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses\"\n ],\n getAlert: [\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\"\n ],\n getScanHistory: [\"GET /repos/{owner}/{repo}/secret-scanning/scan-history\"],\n listAlertsForOrg: [\"GET /orgs/{org}/secret-scanning/alerts\"],\n listAlertsForRepo: [\"GET /repos/{owner}/{repo}/secret-scanning/alerts\"],\n listLocationsForAlert: [\n \"GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations\"\n ],\n listOrgPatternConfigs: [\n \"GET /orgs/{org}/secret-scanning/pattern-configurations\"\n ],\n updateAlert: [\n \"PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}\"\n ],\n updateOrgPatternConfigs: [\n \"PATCH /orgs/{org}/secret-scanning/pattern-configurations\"\n ]\n },\n securityAdvisories: {\n createFork: [\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks\"\n ],\n createPrivateVulnerabilityReport: [\n \"POST /repos/{owner}/{repo}/security-advisories/reports\"\n ],\n createRepositoryAdvisory: [\n \"POST /repos/{owner}/{repo}/security-advisories\"\n ],\n createRepositoryAdvisoryCveRequest: [\n \"POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve\"\n ],\n getGlobalAdvisory: [\"GET /advisories/{ghsa_id}\"],\n getRepositoryAdvisory: [\n \"GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}\"\n ],\n listGlobalAdvisories: [\"GET /advisories\"],\n listOrgRepositoryAdvisories: [\"GET /orgs/{org}/security-advisories\"],\n listRepositoryAdvisories: [\"GET /repos/{owner}/{repo}/security-advisories\"],\n updateRepositoryAdvisory: [\n \"PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}\"\n ]\n },\n teams: {\n addOrUpdateMembershipForUserInOrg: [\n \"PUT /orgs/{org}/teams/{team_slug}/memberships/{username}\"\n ],\n addOrUpdateRepoPermissionsInOrg: [\n \"PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"\n ],\n checkPermissionsForRepoInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"\n ],\n create: [\"POST /orgs/{org}/teams\"],\n createDiscussionCommentInOrg: [\n \"POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"\n ],\n createDiscussionInOrg: [\"POST /orgs/{org}/teams/{team_slug}/discussions\"],\n deleteDiscussionCommentInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"\n ],\n deleteDiscussionInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"\n ],\n deleteInOrg: [\"DELETE /orgs/{org}/teams/{team_slug}\"],\n getByName: [\"GET /orgs/{org}/teams/{team_slug}\"],\n getDiscussionCommentInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"\n ],\n getDiscussionInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"\n ],\n getMembershipForUserInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/memberships/{username}\"\n ],\n list: [\"GET /orgs/{org}/teams\"],\n listChildInOrg: [\"GET /orgs/{org}/teams/{team_slug}/teams\"],\n listDiscussionCommentsInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\"\n ],\n listDiscussionsInOrg: [\"GET /orgs/{org}/teams/{team_slug}/discussions\"],\n listForAuthenticatedUser: [\"GET /user/teams\"],\n listMembersInOrg: [\"GET /orgs/{org}/teams/{team_slug}/members\"],\n listPendingInvitationsInOrg: [\n \"GET /orgs/{org}/teams/{team_slug}/invitations\"\n ],\n listReposInOrg: [\"GET /orgs/{org}/teams/{team_slug}/repos\"],\n removeMembershipForUserInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}\"\n ],\n removeRepoInOrg: [\n \"DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}\"\n ],\n updateDiscussionCommentInOrg: [\n \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}\"\n ],\n updateDiscussionInOrg: [\n \"PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}\"\n ],\n updateInOrg: [\"PATCH /orgs/{org}/teams/{team_slug}\"]\n },\n users: {\n addEmailForAuthenticated: [\n \"POST /user/emails\",\n {},\n { renamed: [\"users\", \"addEmailForAuthenticatedUser\"] }\n ],\n addEmailForAuthenticatedUser: [\"POST /user/emails\"],\n addSocialAccountForAuthenticatedUser: [\"POST /user/social_accounts\"],\n block: [\"PUT /user/blocks/{username}\"],\n checkBlocked: [\"GET /user/blocks/{username}\"],\n checkFollowingForUser: [\"GET /users/{username}/following/{target_user}\"],\n checkPersonIsFollowedByAuthenticated: [\"GET /user/following/{username}\"],\n createGpgKeyForAuthenticated: [\n \"POST /user/gpg_keys\",\n {},\n { renamed: [\"users\", \"createGpgKeyForAuthenticatedUser\"] }\n ],\n createGpgKeyForAuthenticatedUser: [\"POST /user/gpg_keys\"],\n createPublicSshKeyForAuthenticated: [\n \"POST /user/keys\",\n {},\n { renamed: [\"users\", \"createPublicSshKeyForAuthenticatedUser\"] }\n ],\n createPublicSshKeyForAuthenticatedUser: [\"POST /user/keys\"],\n createSshSigningKeyForAuthenticatedUser: [\"POST /user/ssh_signing_keys\"],\n deleteAttestationsBulk: [\n \"POST /users/{username}/attestations/delete-request\"\n ],\n deleteAttestationsById: [\n \"DELETE /users/{username}/attestations/{attestation_id}\"\n ],\n deleteAttestationsBySubjectDigest: [\n \"DELETE /users/{username}/attestations/digest/{subject_digest}\"\n ],\n deleteEmailForAuthenticated: [\n \"DELETE /user/emails\",\n {},\n { renamed: [\"users\", \"deleteEmailForAuthenticatedUser\"] }\n ],\n deleteEmailForAuthenticatedUser: [\"DELETE /user/emails\"],\n deleteGpgKeyForAuthenticated: [\n \"DELETE /user/gpg_keys/{gpg_key_id}\",\n {},\n { renamed: [\"users\", \"deleteGpgKeyForAuthenticatedUser\"] }\n ],\n deleteGpgKeyForAuthenticatedUser: [\"DELETE /user/gpg_keys/{gpg_key_id}\"],\n deletePublicSshKeyForAuthenticated: [\n \"DELETE /user/keys/{key_id}\",\n {},\n { renamed: [\"users\", \"deletePublicSshKeyForAuthenticatedUser\"] }\n ],\n deletePublicSshKeyForAuthenticatedUser: [\"DELETE /user/keys/{key_id}\"],\n deleteSocialAccountForAuthenticatedUser: [\"DELETE /user/social_accounts\"],\n deleteSshSigningKeyForAuthenticatedUser: [\n \"DELETE /user/ssh_signing_keys/{ssh_signing_key_id}\"\n ],\n follow: [\"PUT /user/following/{username}\"],\n getAuthenticated: [\"GET /user\"],\n getById: [\"GET /user/{account_id}\"],\n getByUsername: [\"GET /users/{username}\"],\n getContextForUser: [\"GET /users/{username}/hovercard\"],\n getGpgKeyForAuthenticated: [\n \"GET /user/gpg_keys/{gpg_key_id}\",\n {},\n { renamed: [\"users\", \"getGpgKeyForAuthenticatedUser\"] }\n ],\n getGpgKeyForAuthenticatedUser: [\"GET /user/gpg_keys/{gpg_key_id}\"],\n getPublicSshKeyForAuthenticated: [\n \"GET /user/keys/{key_id}\",\n {},\n { renamed: [\"users\", \"getPublicSshKeyForAuthenticatedUser\"] }\n ],\n getPublicSshKeyForAuthenticatedUser: [\"GET /user/keys/{key_id}\"],\n getSshSigningKeyForAuthenticatedUser: [\n \"GET /user/ssh_signing_keys/{ssh_signing_key_id}\"\n ],\n list: [\"GET /users\"],\n listAttestations: [\"GET /users/{username}/attestations/{subject_digest}\"],\n listAttestationsBulk: [\n \"POST /users/{username}/attestations/bulk-list{?per_page,before,after}\"\n ],\n listBlockedByAuthenticated: [\n \"GET /user/blocks\",\n {},\n { renamed: [\"users\", \"listBlockedByAuthenticatedUser\"] }\n ],\n listBlockedByAuthenticatedUser: [\"GET /user/blocks\"],\n listEmailsForAuthenticated: [\n \"GET /user/emails\",\n {},\n { renamed: [\"users\", \"listEmailsForAuthenticatedUser\"] }\n ],\n listEmailsForAuthenticatedUser: [\"GET /user/emails\"],\n listFollowedByAuthenticated: [\n \"GET /user/following\",\n {},\n { renamed: [\"users\", \"listFollowedByAuthenticatedUser\"] }\n ],\n listFollowedByAuthenticatedUser: [\"GET /user/following\"],\n listFollowersForAuthenticatedUser: [\"GET /user/followers\"],\n listFollowersForUser: [\"GET /users/{username}/followers\"],\n listFollowingForUser: [\"GET /users/{username}/following\"],\n listGpgKeysForAuthenticated: [\n \"GET /user/gpg_keys\",\n {},\n { renamed: [\"users\", \"listGpgKeysForAuthenticatedUser\"] }\n ],\n listGpgKeysForAuthenticatedUser: [\"GET /user/gpg_keys\"],\n listGpgKeysForUser: [\"GET /users/{username}/gpg_keys\"],\n listPublicEmailsForAuthenticated: [\n \"GET /user/public_emails\",\n {},\n { renamed: [\"users\", \"listPublicEmailsForAuthenticatedUser\"] }\n ],\n listPublicEmailsForAuthenticatedUser: [\"GET /user/public_emails\"],\n listPublicKeysForUser: [\"GET /users/{username}/keys\"],\n listPublicSshKeysForAuthenticated: [\n \"GET /user/keys\",\n {},\n { renamed: [\"users\", \"listPublicSshKeysForAuthenticatedUser\"] }\n ],\n listPublicSshKeysForAuthenticatedUser: [\"GET /user/keys\"],\n listSocialAccountsForAuthenticatedUser: [\"GET /user/social_accounts\"],\n listSocialAccountsForUser: [\"GET /users/{username}/social_accounts\"],\n listSshSigningKeysForAuthenticatedUser: [\"GET /user/ssh_signing_keys\"],\n listSshSigningKeysForUser: [\"GET /users/{username}/ssh_signing_keys\"],\n setPrimaryEmailVisibilityForAuthenticated: [\n \"PATCH /user/email/visibility\",\n {},\n { renamed: [\"users\", \"setPrimaryEmailVisibilityForAuthenticatedUser\"] }\n ],\n setPrimaryEmailVisibilityForAuthenticatedUser: [\n \"PATCH /user/email/visibility\"\n ],\n unblock: [\"DELETE /user/blocks/{username}\"],\n unfollow: [\"DELETE /user/following/{username}\"],\n updateAuthenticated: [\"PATCH /user\"]\n }\n};\nvar endpoints_default = Endpoints;\nexport {\n endpoints_default as default\n};\n//# sourceMappingURL=endpoints.js.map\n","import ENDPOINTS from \"./generated/endpoints.js\";\nconst endpointMethodsMap = /* @__PURE__ */ new Map();\nfor (const [scope, endpoints] of Object.entries(ENDPOINTS)) {\n for (const [methodName, endpoint] of Object.entries(endpoints)) {\n const [route, defaults, decorations] = endpoint;\n const [method, url] = route.split(/ /);\n const endpointDefaults = Object.assign(\n {\n method,\n url\n },\n defaults\n );\n if (!endpointMethodsMap.has(scope)) {\n endpointMethodsMap.set(scope, /* @__PURE__ */ new Map());\n }\n endpointMethodsMap.get(scope).set(methodName, {\n scope,\n methodName,\n endpointDefaults,\n decorations\n });\n }\n}\nconst handler = {\n has({ scope }, methodName) {\n return endpointMethodsMap.get(scope).has(methodName);\n },\n getOwnPropertyDescriptor(target, methodName) {\n return {\n value: this.get(target, methodName),\n // ensures method is in the cache\n configurable: true,\n writable: true,\n enumerable: true\n };\n },\n defineProperty(target, methodName, descriptor) {\n Object.defineProperty(target.cache, methodName, descriptor);\n return true;\n },\n deleteProperty(target, methodName) {\n delete target.cache[methodName];\n return true;\n },\n ownKeys({ scope }) {\n return [...endpointMethodsMap.get(scope).keys()];\n },\n set(target, methodName, value) {\n return target.cache[methodName] = value;\n },\n get({ octokit, scope, cache }, methodName) {\n if (cache[methodName]) {\n return cache[methodName];\n }\n const method = endpointMethodsMap.get(scope).get(methodName);\n if (!method) {\n return void 0;\n }\n const { endpointDefaults, decorations } = method;\n if (decorations) {\n cache[methodName] = decorate(\n octokit,\n scope,\n methodName,\n endpointDefaults,\n decorations\n );\n } else {\n cache[methodName] = octokit.request.defaults(endpointDefaults);\n }\n return cache[methodName];\n }\n};\nfunction endpointsToMethods(octokit) {\n const newMethods = {};\n for (const scope of endpointMethodsMap.keys()) {\n newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);\n }\n return newMethods;\n}\nfunction decorate(octokit, scope, methodName, defaults, decorations) {\n const requestWithDefaults = octokit.request.defaults(defaults);\n function withDecorations(...args) {\n let options = requestWithDefaults.endpoint.merge(...args);\n if (decorations.mapToData) {\n options = Object.assign({}, options, {\n data: options[decorations.mapToData],\n [decorations.mapToData]: void 0\n });\n return requestWithDefaults(options);\n }\n if (decorations.renamed) {\n const [newScope, newMethodName] = decorations.renamed;\n octokit.log.warn(\n `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`\n );\n }\n if (decorations.deprecated) {\n octokit.log.warn(decorations.deprecated);\n }\n if (decorations.renamedParameters) {\n const options2 = requestWithDefaults.endpoint.merge(...args);\n for (const [name, alias] of Object.entries(\n decorations.renamedParameters\n )) {\n if (name in options2) {\n octokit.log.warn(\n `\"${name}\" parameter is deprecated for \"octokit.${scope}.${methodName}()\". Use \"${alias}\" instead`\n );\n if (!(alias in options2)) {\n options2[alias] = options2[name];\n }\n delete options2[name];\n }\n }\n return requestWithDefaults(options2);\n }\n return requestWithDefaults(...args);\n }\n return Object.assign(withDecorations, requestWithDefaults);\n}\nexport {\n endpointsToMethods\n};\n//# sourceMappingURL=endpoints-to-methods.js.map\n","import { VERSION } from \"./version.js\";\nimport { endpointsToMethods } from \"./endpoints-to-methods.js\";\nfunction restEndpointMethods(octokit) {\n const api = endpointsToMethods(octokit);\n return {\n rest: api\n };\n}\nrestEndpointMethods.VERSION = VERSION;\nfunction legacyRestEndpointMethods(octokit) {\n const api = endpointsToMethods(octokit);\n return {\n ...api,\n rest: api\n };\n}\nlegacyRestEndpointMethods.VERSION = VERSION;\nexport {\n legacyRestEndpointMethods,\n restEndpointMethods\n};\n//# sourceMappingURL=index.js.map\n","const VERSION = \"22.0.1\";\nexport {\n VERSION\n};\n","import { Octokit as Core } from \"@octokit/core\";\nimport { requestLog } from \"@octokit/plugin-request-log\";\nimport {\n paginateRest\n} from \"@octokit/plugin-paginate-rest\";\nimport { legacyRestEndpointMethods } from \"@octokit/plugin-rest-endpoint-methods\";\nimport { VERSION } from \"./version.js\";\nconst Octokit = Core.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults(\n {\n userAgent: `octokit-rest.js/${VERSION}`\n }\n);\nexport {\n Octokit\n};\n","/**\n * This file contains the Bottleneck library (MIT), compiled to ES2017, and without Clustering support.\n * https://github.com/SGrondin/bottleneck\n */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Bottleneck = factory());\n}(this, (function () { 'use strict';\n\n\tvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\tfunction getCjsExportFromNamespace (n) {\n\t\treturn n && n['default'] || n;\n\t}\n\n\tvar load = function(received, defaults, onto = {}) {\n\t var k, ref, v;\n\t for (k in defaults) {\n\t v = defaults[k];\n\t onto[k] = (ref = received[k]) != null ? ref : v;\n\t }\n\t return onto;\n\t};\n\n\tvar overwrite = function(received, defaults, onto = {}) {\n\t var k, v;\n\t for (k in received) {\n\t v = received[k];\n\t if (defaults[k] !== void 0) {\n\t onto[k] = v;\n\t }\n\t }\n\t return onto;\n\t};\n\n\tvar parser = {\n\t\tload: load,\n\t\toverwrite: overwrite\n\t};\n\n\tvar DLList;\n\n\tDLList = class DLList {\n\t constructor(incr, decr) {\n\t this.incr = incr;\n\t this.decr = decr;\n\t this._first = null;\n\t this._last = null;\n\t this.length = 0;\n\t }\n\n\t push(value) {\n\t var node;\n\t this.length++;\n\t if (typeof this.incr === \"function\") {\n\t this.incr();\n\t }\n\t node = {\n\t value,\n\t prev: this._last,\n\t next: null\n\t };\n\t if (this._last != null) {\n\t this._last.next = node;\n\t this._last = node;\n\t } else {\n\t this._first = this._last = node;\n\t }\n\t return void 0;\n\t }\n\n\t shift() {\n\t var value;\n\t if (this._first == null) {\n\t return;\n\t } else {\n\t this.length--;\n\t if (typeof this.decr === \"function\") {\n\t this.decr();\n\t }\n\t }\n\t value = this._first.value;\n\t if ((this._first = this._first.next) != null) {\n\t this._first.prev = null;\n\t } else {\n\t this._last = null;\n\t }\n\t return value;\n\t }\n\n\t first() {\n\t if (this._first != null) {\n\t return this._first.value;\n\t }\n\t }\n\n\t getArray() {\n\t var node, ref, results;\n\t node = this._first;\n\t results = [];\n\t while (node != null) {\n\t results.push((ref = node, node = node.next, ref.value));\n\t }\n\t return results;\n\t }\n\n\t forEachShift(cb) {\n\t var node;\n\t node = this.shift();\n\t while (node != null) {\n\t (cb(node), node = this.shift());\n\t }\n\t return void 0;\n\t }\n\n\t debug() {\n\t var node, ref, ref1, ref2, results;\n\t node = this._first;\n\t results = [];\n\t while (node != null) {\n\t results.push((ref = node, node = node.next, {\n\t value: ref.value,\n\t prev: (ref1 = ref.prev) != null ? ref1.value : void 0,\n\t next: (ref2 = ref.next) != null ? ref2.value : void 0\n\t }));\n\t }\n\t return results;\n\t }\n\n\t};\n\n\tvar DLList_1 = DLList;\n\n\tvar Events;\n\n\tEvents = class Events {\n\t constructor(instance) {\n\t this.instance = instance;\n\t this._events = {};\n\t if ((this.instance.on != null) || (this.instance.once != null) || (this.instance.removeAllListeners != null)) {\n\t throw new Error(\"An Emitter already exists for this object\");\n\t }\n\t this.instance.on = (name, cb) => {\n\t return this._addListener(name, \"many\", cb);\n\t };\n\t this.instance.once = (name, cb) => {\n\t return this._addListener(name, \"once\", cb);\n\t };\n\t this.instance.removeAllListeners = (name = null) => {\n\t if (name != null) {\n\t return delete this._events[name];\n\t } else {\n\t return this._events = {};\n\t }\n\t };\n\t }\n\n\t _addListener(name, status, cb) {\n\t var base;\n\t if ((base = this._events)[name] == null) {\n\t base[name] = [];\n\t }\n\t this._events[name].push({cb, status});\n\t return this.instance;\n\t }\n\n\t listenerCount(name) {\n\t if (this._events[name] != null) {\n\t return this._events[name].length;\n\t } else {\n\t return 0;\n\t }\n\t }\n\n\t async trigger(name, ...args) {\n\t var e, promises;\n\t try {\n\t if (name !== \"debug\") {\n\t this.trigger(\"debug\", `Event triggered: ${name}`, args);\n\t }\n\t if (this._events[name] == null) {\n\t return;\n\t }\n\t this._events[name] = this._events[name].filter(function(listener) {\n\t return listener.status !== \"none\";\n\t });\n\t promises = this._events[name].map(async(listener) => {\n\t var e, returned;\n\t if (listener.status === \"none\") {\n\t return;\n\t }\n\t if (listener.status === \"once\") {\n\t listener.status = \"none\";\n\t }\n\t try {\n\t returned = typeof listener.cb === \"function\" ? listener.cb(...args) : void 0;\n\t if (typeof (returned != null ? returned.then : void 0) === \"function\") {\n\t return (await returned);\n\t } else {\n\t return returned;\n\t }\n\t } catch (error) {\n\t e = error;\n\t {\n\t this.trigger(\"error\", e);\n\t }\n\t return null;\n\t }\n\t });\n\t return ((await Promise.all(promises))).find(function(x) {\n\t return x != null;\n\t });\n\t } catch (error) {\n\t e = error;\n\t {\n\t this.trigger(\"error\", e);\n\t }\n\t return null;\n\t }\n\t }\n\n\t};\n\n\tvar Events_1 = Events;\n\n\tvar DLList$1, Events$1, Queues;\n\n\tDLList$1 = DLList_1;\n\n\tEvents$1 = Events_1;\n\n\tQueues = class Queues {\n\t constructor(num_priorities) {\n\t var i;\n\t this.Events = new Events$1(this);\n\t this._length = 0;\n\t this._lists = (function() {\n\t var j, ref, results;\n\t results = [];\n\t for (i = j = 1, ref = num_priorities; (1 <= ref ? j <= ref : j >= ref); i = 1 <= ref ? ++j : --j) {\n\t results.push(new DLList$1((() => {\n\t return this.incr();\n\t }), (() => {\n\t return this.decr();\n\t })));\n\t }\n\t return results;\n\t }).call(this);\n\t }\n\n\t incr() {\n\t if (this._length++ === 0) {\n\t return this.Events.trigger(\"leftzero\");\n\t }\n\t }\n\n\t decr() {\n\t if (--this._length === 0) {\n\t return this.Events.trigger(\"zero\");\n\t }\n\t }\n\n\t push(job) {\n\t return this._lists[job.options.priority].push(job);\n\t }\n\n\t queued(priority) {\n\t if (priority != null) {\n\t return this._lists[priority].length;\n\t } else {\n\t return this._length;\n\t }\n\t }\n\n\t shiftAll(fn) {\n\t return this._lists.forEach(function(list) {\n\t return list.forEachShift(fn);\n\t });\n\t }\n\n\t getFirst(arr = this._lists) {\n\t var j, len, list;\n\t for (j = 0, len = arr.length; j < len; j++) {\n\t list = arr[j];\n\t if (list.length > 0) {\n\t return list;\n\t }\n\t }\n\t return [];\n\t }\n\n\t shiftLastFrom(priority) {\n\t return this.getFirst(this._lists.slice(priority).reverse()).shift();\n\t }\n\n\t};\n\n\tvar Queues_1 = Queues;\n\n\tvar BottleneckError;\n\n\tBottleneckError = class BottleneckError extends Error {};\n\n\tvar BottleneckError_1 = BottleneckError;\n\n\tvar BottleneckError$1, DEFAULT_PRIORITY, Job, NUM_PRIORITIES, parser$1;\n\n\tNUM_PRIORITIES = 10;\n\n\tDEFAULT_PRIORITY = 5;\n\n\tparser$1 = parser;\n\n\tBottleneckError$1 = BottleneckError_1;\n\n\tJob = class Job {\n\t constructor(task, args, options, jobDefaults, rejectOnDrop, Events, _states, Promise) {\n\t this.task = task;\n\t this.args = args;\n\t this.rejectOnDrop = rejectOnDrop;\n\t this.Events = Events;\n\t this._states = _states;\n\t this.Promise = Promise;\n\t this.options = parser$1.load(options, jobDefaults);\n\t this.options.priority = this._sanitizePriority(this.options.priority);\n\t if (this.options.id === jobDefaults.id) {\n\t this.options.id = `${this.options.id}-${this._randomIndex()}`;\n\t }\n\t this.promise = new this.Promise((_resolve, _reject) => {\n\t this._resolve = _resolve;\n\t this._reject = _reject;\n\t });\n\t this.retryCount = 0;\n\t }\n\n\t _sanitizePriority(priority) {\n\t var sProperty;\n\t sProperty = ~~priority !== priority ? DEFAULT_PRIORITY : priority;\n\t if (sProperty < 0) {\n\t return 0;\n\t } else if (sProperty > NUM_PRIORITIES - 1) {\n\t return NUM_PRIORITIES - 1;\n\t } else {\n\t return sProperty;\n\t }\n\t }\n\n\t _randomIndex() {\n\t return Math.random().toString(36).slice(2);\n\t }\n\n\t doDrop({error, message = \"This job has been dropped by Bottleneck\"} = {}) {\n\t if (this._states.remove(this.options.id)) {\n\t if (this.rejectOnDrop) {\n\t this._reject(error != null ? error : new BottleneckError$1(message));\n\t }\n\t this.Events.trigger(\"dropped\", {args: this.args, options: this.options, task: this.task, promise: this.promise});\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t }\n\n\t _assertStatus(expected) {\n\t var status;\n\t status = this._states.jobStatus(this.options.id);\n\t if (!(status === expected || (expected === \"DONE\" && status === null))) {\n\t throw new BottleneckError$1(`Invalid job status ${status}, expected ${expected}. Please open an issue at https://github.com/SGrondin/bottleneck/issues`);\n\t }\n\t }\n\n\t doReceive() {\n\t this._states.start(this.options.id);\n\t return this.Events.trigger(\"received\", {args: this.args, options: this.options});\n\t }\n\n\t doQueue(reachedHWM, blocked) {\n\t this._assertStatus(\"RECEIVED\");\n\t this._states.next(this.options.id);\n\t return this.Events.trigger(\"queued\", {args: this.args, options: this.options, reachedHWM, blocked});\n\t }\n\n\t doRun() {\n\t if (this.retryCount === 0) {\n\t this._assertStatus(\"QUEUED\");\n\t this._states.next(this.options.id);\n\t } else {\n\t this._assertStatus(\"EXECUTING\");\n\t }\n\t return this.Events.trigger(\"scheduled\", {args: this.args, options: this.options});\n\t }\n\n\t async doExecute(chained, clearGlobalState, run, free) {\n\t var error, eventInfo, passed;\n\t if (this.retryCount === 0) {\n\t this._assertStatus(\"RUNNING\");\n\t this._states.next(this.options.id);\n\t } else {\n\t this._assertStatus(\"EXECUTING\");\n\t }\n\t eventInfo = {args: this.args, options: this.options, retryCount: this.retryCount};\n\t this.Events.trigger(\"executing\", eventInfo);\n\t try {\n\t passed = (await (chained != null ? chained.schedule(this.options, this.task, ...this.args) : this.task(...this.args)));\n\t if (clearGlobalState()) {\n\t this.doDone(eventInfo);\n\t await free(this.options, eventInfo);\n\t this._assertStatus(\"DONE\");\n\t return this._resolve(passed);\n\t }\n\t } catch (error1) {\n\t error = error1;\n\t return this._onFailure(error, eventInfo, clearGlobalState, run, free);\n\t }\n\t }\n\n\t doExpire(clearGlobalState, run, free) {\n\t var error, eventInfo;\n\t if (this._states.jobStatus(this.options.id === \"RUNNING\")) {\n\t this._states.next(this.options.id);\n\t }\n\t this._assertStatus(\"EXECUTING\");\n\t eventInfo = {args: this.args, options: this.options, retryCount: this.retryCount};\n\t error = new BottleneckError$1(`This job timed out after ${this.options.expiration} ms.`);\n\t return this._onFailure(error, eventInfo, clearGlobalState, run, free);\n\t }\n\n\t async _onFailure(error, eventInfo, clearGlobalState, run, free) {\n\t var retry, retryAfter;\n\t if (clearGlobalState()) {\n\t retry = (await this.Events.trigger(\"failed\", error, eventInfo));\n\t if (retry != null) {\n\t retryAfter = ~~retry;\n\t this.Events.trigger(\"retry\", `Retrying ${this.options.id} after ${retryAfter} ms`, eventInfo);\n\t this.retryCount++;\n\t return run(retryAfter);\n\t } else {\n\t this.doDone(eventInfo);\n\t await free(this.options, eventInfo);\n\t this._assertStatus(\"DONE\");\n\t return this._reject(error);\n\t }\n\t }\n\t }\n\n\t doDone(eventInfo) {\n\t this._assertStatus(\"EXECUTING\");\n\t this._states.next(this.options.id);\n\t return this.Events.trigger(\"done\", eventInfo);\n\t }\n\n\t};\n\n\tvar Job_1 = Job;\n\n\tvar BottleneckError$2, LocalDatastore, parser$2;\n\n\tparser$2 = parser;\n\n\tBottleneckError$2 = BottleneckError_1;\n\n\tLocalDatastore = class LocalDatastore {\n\t constructor(instance, storeOptions, storeInstanceOptions) {\n\t this.instance = instance;\n\t this.storeOptions = storeOptions;\n\t this.clientId = this.instance._randomIndex();\n\t parser$2.load(storeInstanceOptions, storeInstanceOptions, this);\n\t this._nextRequest = this._lastReservoirRefresh = this._lastReservoirIncrease = Date.now();\n\t this._running = 0;\n\t this._done = 0;\n\t this._unblockTime = 0;\n\t this.ready = this.Promise.resolve();\n\t this.clients = {};\n\t this._startHeartbeat();\n\t }\n\n\t _startHeartbeat() {\n\t var base;\n\t if ((this.heartbeat == null) && (((this.storeOptions.reservoirRefreshInterval != null) && (this.storeOptions.reservoirRefreshAmount != null)) || ((this.storeOptions.reservoirIncreaseInterval != null) && (this.storeOptions.reservoirIncreaseAmount != null)))) {\n\t return typeof (base = (this.heartbeat = setInterval(() => {\n\t var amount, incr, maximum, now, reservoir;\n\t now = Date.now();\n\t if ((this.storeOptions.reservoirRefreshInterval != null) && now >= this._lastReservoirRefresh + this.storeOptions.reservoirRefreshInterval) {\n\t this._lastReservoirRefresh = now;\n\t this.storeOptions.reservoir = this.storeOptions.reservoirRefreshAmount;\n\t this.instance._drainAll(this.computeCapacity());\n\t }\n\t if ((this.storeOptions.reservoirIncreaseInterval != null) && now >= this._lastReservoirIncrease + this.storeOptions.reservoirIncreaseInterval) {\n\t ({\n\t reservoirIncreaseAmount: amount,\n\t reservoirIncreaseMaximum: maximum,\n\t reservoir\n\t } = this.storeOptions);\n\t this._lastReservoirIncrease = now;\n\t incr = maximum != null ? Math.min(amount, maximum - reservoir) : amount;\n\t if (incr > 0) {\n\t this.storeOptions.reservoir += incr;\n\t return this.instance._drainAll(this.computeCapacity());\n\t }\n\t }\n\t }, this.heartbeatInterval))).unref === \"function\" ? base.unref() : void 0;\n\t } else {\n\t return clearInterval(this.heartbeat);\n\t }\n\t }\n\n\t async __publish__(message) {\n\t await this.yieldLoop();\n\t return this.instance.Events.trigger(\"message\", message.toString());\n\t }\n\n\t async __disconnect__(flush) {\n\t await this.yieldLoop();\n\t clearInterval(this.heartbeat);\n\t return this.Promise.resolve();\n\t }\n\n\t yieldLoop(t = 0) {\n\t return new this.Promise(function(resolve, reject) {\n\t return setTimeout(resolve, t);\n\t });\n\t }\n\n\t computePenalty() {\n\t var ref;\n\t return (ref = this.storeOptions.penalty) != null ? ref : (15 * this.storeOptions.minTime) || 5000;\n\t }\n\n\t async __updateSettings__(options) {\n\t await this.yieldLoop();\n\t parser$2.overwrite(options, options, this.storeOptions);\n\t this._startHeartbeat();\n\t this.instance._drainAll(this.computeCapacity());\n\t return true;\n\t }\n\n\t async __running__() {\n\t await this.yieldLoop();\n\t return this._running;\n\t }\n\n\t async __queued__() {\n\t await this.yieldLoop();\n\t return this.instance.queued();\n\t }\n\n\t async __done__() {\n\t await this.yieldLoop();\n\t return this._done;\n\t }\n\n\t async __groupCheck__(time) {\n\t await this.yieldLoop();\n\t return (this._nextRequest + this.timeout) < time;\n\t }\n\n\t computeCapacity() {\n\t var maxConcurrent, reservoir;\n\t ({maxConcurrent, reservoir} = this.storeOptions);\n\t if ((maxConcurrent != null) && (reservoir != null)) {\n\t return Math.min(maxConcurrent - this._running, reservoir);\n\t } else if (maxConcurrent != null) {\n\t return maxConcurrent - this._running;\n\t } else if (reservoir != null) {\n\t return reservoir;\n\t } else {\n\t return null;\n\t }\n\t }\n\n\t conditionsCheck(weight) {\n\t var capacity;\n\t capacity = this.computeCapacity();\n\t return (capacity == null) || weight <= capacity;\n\t }\n\n\t async __incrementReservoir__(incr) {\n\t var reservoir;\n\t await this.yieldLoop();\n\t reservoir = this.storeOptions.reservoir += incr;\n\t this.instance._drainAll(this.computeCapacity());\n\t return reservoir;\n\t }\n\n\t async __currentReservoir__() {\n\t await this.yieldLoop();\n\t return this.storeOptions.reservoir;\n\t }\n\n\t isBlocked(now) {\n\t return this._unblockTime >= now;\n\t }\n\n\t check(weight, now) {\n\t return this.conditionsCheck(weight) && (this._nextRequest - now) <= 0;\n\t }\n\n\t async __check__(weight) {\n\t var now;\n\t await this.yieldLoop();\n\t now = Date.now();\n\t return this.check(weight, now);\n\t }\n\n\t async __register__(index, weight, expiration) {\n\t var now, wait;\n\t await this.yieldLoop();\n\t now = Date.now();\n\t if (this.conditionsCheck(weight)) {\n\t this._running += weight;\n\t if (this.storeOptions.reservoir != null) {\n\t this.storeOptions.reservoir -= weight;\n\t }\n\t wait = Math.max(this._nextRequest - now, 0);\n\t this._nextRequest = now + wait + this.storeOptions.minTime;\n\t return {\n\t success: true,\n\t wait,\n\t reservoir: this.storeOptions.reservoir\n\t };\n\t } else {\n\t return {\n\t success: false\n\t };\n\t }\n\t }\n\n\t strategyIsBlock() {\n\t return this.storeOptions.strategy === 3;\n\t }\n\n\t async __submit__(queueLength, weight) {\n\t var blocked, now, reachedHWM;\n\t await this.yieldLoop();\n\t if ((this.storeOptions.maxConcurrent != null) && weight > this.storeOptions.maxConcurrent) {\n\t throw new BottleneckError$2(`Impossible to add a job having a weight of ${weight} to a limiter having a maxConcurrent setting of ${this.storeOptions.maxConcurrent}`);\n\t }\n\t now = Date.now();\n\t reachedHWM = (this.storeOptions.highWater != null) && queueLength === this.storeOptions.highWater && !this.check(weight, now);\n\t blocked = this.strategyIsBlock() && (reachedHWM || this.isBlocked(now));\n\t if (blocked) {\n\t this._unblockTime = now + this.computePenalty();\n\t this._nextRequest = this._unblockTime + this.storeOptions.minTime;\n\t this.instance._dropAllQueued();\n\t }\n\t return {\n\t reachedHWM,\n\t blocked,\n\t strategy: this.storeOptions.strategy\n\t };\n\t }\n\n\t async __free__(index, weight) {\n\t await this.yieldLoop();\n\t this._running -= weight;\n\t this._done += weight;\n\t this.instance._drainAll(this.computeCapacity());\n\t return {\n\t running: this._running\n\t };\n\t }\n\n\t};\n\n\tvar LocalDatastore_1 = LocalDatastore;\n\n\tvar BottleneckError$3, States;\n\n\tBottleneckError$3 = BottleneckError_1;\n\n\tStates = class States {\n\t constructor(status1) {\n\t this.status = status1;\n\t this._jobs = {};\n\t this.counts = this.status.map(function() {\n\t return 0;\n\t });\n\t }\n\n\t next(id) {\n\t var current, next;\n\t current = this._jobs[id];\n\t next = current + 1;\n\t if ((current != null) && next < this.status.length) {\n\t this.counts[current]--;\n\t this.counts[next]++;\n\t return this._jobs[id]++;\n\t } else if (current != null) {\n\t this.counts[current]--;\n\t return delete this._jobs[id];\n\t }\n\t }\n\n\t start(id) {\n\t var initial;\n\t initial = 0;\n\t this._jobs[id] = initial;\n\t return this.counts[initial]++;\n\t }\n\n\t remove(id) {\n\t var current;\n\t current = this._jobs[id];\n\t if (current != null) {\n\t this.counts[current]--;\n\t delete this._jobs[id];\n\t }\n\t return current != null;\n\t }\n\n\t jobStatus(id) {\n\t var ref;\n\t return (ref = this.status[this._jobs[id]]) != null ? ref : null;\n\t }\n\n\t statusJobs(status) {\n\t var k, pos, ref, results, v;\n\t if (status != null) {\n\t pos = this.status.indexOf(status);\n\t if (pos < 0) {\n\t throw new BottleneckError$3(`status must be one of ${this.status.join(', ')}`);\n\t }\n\t ref = this._jobs;\n\t results = [];\n\t for (k in ref) {\n\t v = ref[k];\n\t if (v === pos) {\n\t results.push(k);\n\t }\n\t }\n\t return results;\n\t } else {\n\t return Object.keys(this._jobs);\n\t }\n\t }\n\n\t statusCounts() {\n\t return this.counts.reduce(((acc, v, i) => {\n\t acc[this.status[i]] = v;\n\t return acc;\n\t }), {});\n\t }\n\n\t};\n\n\tvar States_1 = States;\n\n\tvar DLList$2, Sync;\n\n\tDLList$2 = DLList_1;\n\n\tSync = class Sync {\n\t constructor(name, Promise) {\n\t this.schedule = this.schedule.bind(this);\n\t this.name = name;\n\t this.Promise = Promise;\n\t this._running = 0;\n\t this._queue = new DLList$2();\n\t }\n\n\t isEmpty() {\n\t return this._queue.length === 0;\n\t }\n\n\t async _tryToRun() {\n\t var args, cb, error, reject, resolve, returned, task;\n\t if ((this._running < 1) && this._queue.length > 0) {\n\t this._running++;\n\t ({task, args, resolve, reject} = this._queue.shift());\n\t cb = (await (async function() {\n\t try {\n\t returned = (await task(...args));\n\t return function() {\n\t return resolve(returned);\n\t };\n\t } catch (error1) {\n\t error = error1;\n\t return function() {\n\t return reject(error);\n\t };\n\t }\n\t })());\n\t this._running--;\n\t this._tryToRun();\n\t return cb();\n\t }\n\t }\n\n\t schedule(task, ...args) {\n\t var promise, reject, resolve;\n\t resolve = reject = null;\n\t promise = new this.Promise(function(_resolve, _reject) {\n\t resolve = _resolve;\n\t return reject = _reject;\n\t });\n\t this._queue.push({task, args, resolve, reject});\n\t this._tryToRun();\n\t return promise;\n\t }\n\n\t};\n\n\tvar Sync_1 = Sync;\n\n\tvar version = \"2.19.5\";\n\tvar version$1 = {\n\t\tversion: version\n\t};\n\n\tvar version$2 = /*#__PURE__*/Object.freeze({\n\t\tversion: version,\n\t\tdefault: version$1\n\t});\n\n\tvar require$$2 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');\n\n\tvar require$$3 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');\n\n\tvar require$$4 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');\n\n\tvar Events$2, Group, IORedisConnection$1, RedisConnection$1, Scripts$1, parser$3;\n\n\tparser$3 = parser;\n\n\tEvents$2 = Events_1;\n\n\tRedisConnection$1 = require$$2;\n\n\tIORedisConnection$1 = require$$3;\n\n\tScripts$1 = require$$4;\n\n\tGroup = (function() {\n\t class Group {\n\t constructor(limiterOptions = {}) {\n\t this.deleteKey = this.deleteKey.bind(this);\n\t this.limiterOptions = limiterOptions;\n\t parser$3.load(this.limiterOptions, this.defaults, this);\n\t this.Events = new Events$2(this);\n\t this.instances = {};\n\t this.Bottleneck = Bottleneck_1;\n\t this._startAutoCleanup();\n\t this.sharedConnection = this.connection != null;\n\t if (this.connection == null) {\n\t if (this.limiterOptions.datastore === \"redis\") {\n\t this.connection = new RedisConnection$1(Object.assign({}, this.limiterOptions, {Events: this.Events}));\n\t } else if (this.limiterOptions.datastore === \"ioredis\") {\n\t this.connection = new IORedisConnection$1(Object.assign({}, this.limiterOptions, {Events: this.Events}));\n\t }\n\t }\n\t }\n\n\t key(key = \"\") {\n\t var ref;\n\t return (ref = this.instances[key]) != null ? ref : (() => {\n\t var limiter;\n\t limiter = this.instances[key] = new this.Bottleneck(Object.assign(this.limiterOptions, {\n\t id: `${this.id}-${key}`,\n\t timeout: this.timeout,\n\t connection: this.connection\n\t }));\n\t this.Events.trigger(\"created\", limiter, key);\n\t return limiter;\n\t })();\n\t }\n\n\t async deleteKey(key = \"\") {\n\t var deleted, instance;\n\t instance = this.instances[key];\n\t if (this.connection) {\n\t deleted = (await this.connection.__runCommand__(['del', ...Scripts$1.allKeys(`${this.id}-${key}`)]));\n\t }\n\t if (instance != null) {\n\t delete this.instances[key];\n\t await instance.disconnect();\n\t }\n\t return (instance != null) || deleted > 0;\n\t }\n\n\t limiters() {\n\t var k, ref, results, v;\n\t ref = this.instances;\n\t results = [];\n\t for (k in ref) {\n\t v = ref[k];\n\t results.push({\n\t key: k,\n\t limiter: v\n\t });\n\t }\n\t return results;\n\t }\n\n\t keys() {\n\t return Object.keys(this.instances);\n\t }\n\n\t async clusterKeys() {\n\t var cursor, end, found, i, k, keys, len, next, start;\n\t if (this.connection == null) {\n\t return this.Promise.resolve(this.keys());\n\t }\n\t keys = [];\n\t cursor = null;\n\t start = `b_${this.id}-`.length;\n\t end = \"_settings\".length;\n\t while (cursor !== 0) {\n\t [next, found] = (await this.connection.__runCommand__([\"scan\", cursor != null ? cursor : 0, \"match\", `b_${this.id}-*_settings`, \"count\", 10000]));\n\t cursor = ~~next;\n\t for (i = 0, len = found.length; i < len; i++) {\n\t k = found[i];\n\t keys.push(k.slice(start, -end));\n\t }\n\t }\n\t return keys;\n\t }\n\n\t _startAutoCleanup() {\n\t var base;\n\t clearInterval(this.interval);\n\t return typeof (base = (this.interval = setInterval(async() => {\n\t var e, k, ref, results, time, v;\n\t time = Date.now();\n\t ref = this.instances;\n\t results = [];\n\t for (k in ref) {\n\t v = ref[k];\n\t try {\n\t if ((await v._store.__groupCheck__(time))) {\n\t results.push(this.deleteKey(k));\n\t } else {\n\t results.push(void 0);\n\t }\n\t } catch (error) {\n\t e = error;\n\t results.push(v.Events.trigger(\"error\", e));\n\t }\n\t }\n\t return results;\n\t }, this.timeout / 2))).unref === \"function\" ? base.unref() : void 0;\n\t }\n\n\t updateSettings(options = {}) {\n\t parser$3.overwrite(options, this.defaults, this);\n\t parser$3.overwrite(options, options, this.limiterOptions);\n\t if (options.timeout != null) {\n\t return this._startAutoCleanup();\n\t }\n\t }\n\n\t disconnect(flush = true) {\n\t var ref;\n\t if (!this.sharedConnection) {\n\t return (ref = this.connection) != null ? ref.disconnect(flush) : void 0;\n\t }\n\t }\n\n\t }\n\t Group.prototype.defaults = {\n\t timeout: 1000 * 60 * 5,\n\t connection: null,\n\t Promise: Promise,\n\t id: \"group-key\"\n\t };\n\n\t return Group;\n\n\t}).call(commonjsGlobal);\n\n\tvar Group_1 = Group;\n\n\tvar Batcher, Events$3, parser$4;\n\n\tparser$4 = parser;\n\n\tEvents$3 = Events_1;\n\n\tBatcher = (function() {\n\t class Batcher {\n\t constructor(options = {}) {\n\t this.options = options;\n\t parser$4.load(this.options, this.defaults, this);\n\t this.Events = new Events$3(this);\n\t this._arr = [];\n\t this._resetPromise();\n\t this._lastFlush = Date.now();\n\t }\n\n\t _resetPromise() {\n\t return this._promise = new this.Promise((res, rej) => {\n\t return this._resolve = res;\n\t });\n\t }\n\n\t _flush() {\n\t clearTimeout(this._timeout);\n\t this._lastFlush = Date.now();\n\t this._resolve();\n\t this.Events.trigger(\"batch\", this._arr);\n\t this._arr = [];\n\t return this._resetPromise();\n\t }\n\n\t add(data) {\n\t var ret;\n\t this._arr.push(data);\n\t ret = this._promise;\n\t if (this._arr.length === this.maxSize) {\n\t this._flush();\n\t } else if ((this.maxTime != null) && this._arr.length === 1) {\n\t this._timeout = setTimeout(() => {\n\t return this._flush();\n\t }, this.maxTime);\n\t }\n\t return ret;\n\t }\n\n\t }\n\t Batcher.prototype.defaults = {\n\t maxTime: null,\n\t maxSize: null,\n\t Promise: Promise\n\t };\n\n\t return Batcher;\n\n\t}).call(commonjsGlobal);\n\n\tvar Batcher_1 = Batcher;\n\n\tvar require$$4$1 = () => console.log('You must import the full version of Bottleneck in order to use this feature.');\n\n\tvar require$$8 = getCjsExportFromNamespace(version$2);\n\n\tvar Bottleneck, DEFAULT_PRIORITY$1, Events$4, Job$1, LocalDatastore$1, NUM_PRIORITIES$1, Queues$1, RedisDatastore$1, States$1, Sync$1, parser$5,\n\t splice = [].splice;\n\n\tNUM_PRIORITIES$1 = 10;\n\n\tDEFAULT_PRIORITY$1 = 5;\n\n\tparser$5 = parser;\n\n\tQueues$1 = Queues_1;\n\n\tJob$1 = Job_1;\n\n\tLocalDatastore$1 = LocalDatastore_1;\n\n\tRedisDatastore$1 = require$$4$1;\n\n\tEvents$4 = Events_1;\n\n\tStates$1 = States_1;\n\n\tSync$1 = Sync_1;\n\n\tBottleneck = (function() {\n\t class Bottleneck {\n\t constructor(options = {}, ...invalid) {\n\t var storeInstanceOptions, storeOptions;\n\t this._addToQueue = this._addToQueue.bind(this);\n\t this._validateOptions(options, invalid);\n\t parser$5.load(options, this.instanceDefaults, this);\n\t this._queues = new Queues$1(NUM_PRIORITIES$1);\n\t this._scheduled = {};\n\t this._states = new States$1([\"RECEIVED\", \"QUEUED\", \"RUNNING\", \"EXECUTING\"].concat(this.trackDoneStatus ? [\"DONE\"] : []));\n\t this._limiter = null;\n\t this.Events = new Events$4(this);\n\t this._submitLock = new Sync$1(\"submit\", this.Promise);\n\t this._registerLock = new Sync$1(\"register\", this.Promise);\n\t storeOptions = parser$5.load(options, this.storeDefaults, {});\n\t this._store = (function() {\n\t if (this.datastore === \"redis\" || this.datastore === \"ioredis\" || (this.connection != null)) {\n\t storeInstanceOptions = parser$5.load(options, this.redisStoreDefaults, {});\n\t return new RedisDatastore$1(this, storeOptions, storeInstanceOptions);\n\t } else if (this.datastore === \"local\") {\n\t storeInstanceOptions = parser$5.load(options, this.localStoreDefaults, {});\n\t return new LocalDatastore$1(this, storeOptions, storeInstanceOptions);\n\t } else {\n\t throw new Bottleneck.prototype.BottleneckError(`Invalid datastore type: ${this.datastore}`);\n\t }\n\t }).call(this);\n\t this._queues.on(\"leftzero\", () => {\n\t var ref;\n\t return (ref = this._store.heartbeat) != null ? typeof ref.ref === \"function\" ? ref.ref() : void 0 : void 0;\n\t });\n\t this._queues.on(\"zero\", () => {\n\t var ref;\n\t return (ref = this._store.heartbeat) != null ? typeof ref.unref === \"function\" ? ref.unref() : void 0 : void 0;\n\t });\n\t }\n\n\t _validateOptions(options, invalid) {\n\t if (!((options != null) && typeof options === \"object\" && invalid.length === 0)) {\n\t throw new Bottleneck.prototype.BottleneckError(\"Bottleneck v2 takes a single object argument. Refer to https://github.com/SGrondin/bottleneck#upgrading-to-v2 if you're upgrading from Bottleneck v1.\");\n\t }\n\t }\n\n\t ready() {\n\t return this._store.ready;\n\t }\n\n\t clients() {\n\t return this._store.clients;\n\t }\n\n\t channel() {\n\t return `b_${this.id}`;\n\t }\n\n\t channel_client() {\n\t return `b_${this.id}_${this._store.clientId}`;\n\t }\n\n\t publish(message) {\n\t return this._store.__publish__(message);\n\t }\n\n\t disconnect(flush = true) {\n\t return this._store.__disconnect__(flush);\n\t }\n\n\t chain(_limiter) {\n\t this._limiter = _limiter;\n\t return this;\n\t }\n\n\t queued(priority) {\n\t return this._queues.queued(priority);\n\t }\n\n\t clusterQueued() {\n\t return this._store.__queued__();\n\t }\n\n\t empty() {\n\t return this.queued() === 0 && this._submitLock.isEmpty();\n\t }\n\n\t running() {\n\t return this._store.__running__();\n\t }\n\n\t done() {\n\t return this._store.__done__();\n\t }\n\n\t jobStatus(id) {\n\t return this._states.jobStatus(id);\n\t }\n\n\t jobs(status) {\n\t return this._states.statusJobs(status);\n\t }\n\n\t counts() {\n\t return this._states.statusCounts();\n\t }\n\n\t _randomIndex() {\n\t return Math.random().toString(36).slice(2);\n\t }\n\n\t check(weight = 1) {\n\t return this._store.__check__(weight);\n\t }\n\n\t _clearGlobalState(index) {\n\t if (this._scheduled[index] != null) {\n\t clearTimeout(this._scheduled[index].expiration);\n\t delete this._scheduled[index];\n\t return true;\n\t } else {\n\t return false;\n\t }\n\t }\n\n\t async _free(index, job, options, eventInfo) {\n\t var e, running;\n\t try {\n\t ({running} = (await this._store.__free__(index, options.weight)));\n\t this.Events.trigger(\"debug\", `Freed ${options.id}`, eventInfo);\n\t if (running === 0 && this.empty()) {\n\t return this.Events.trigger(\"idle\");\n\t }\n\t } catch (error1) {\n\t e = error1;\n\t return this.Events.trigger(\"error\", e);\n\t }\n\t }\n\n\t _run(index, job, wait) {\n\t var clearGlobalState, free, run;\n\t job.doRun();\n\t clearGlobalState = this._clearGlobalState.bind(this, index);\n\t run = this._run.bind(this, index, job);\n\t free = this._free.bind(this, index, job);\n\t return this._scheduled[index] = {\n\t timeout: setTimeout(() => {\n\t return job.doExecute(this._limiter, clearGlobalState, run, free);\n\t }, wait),\n\t expiration: job.options.expiration != null ? setTimeout(function() {\n\t return job.doExpire(clearGlobalState, run, free);\n\t }, wait + job.options.expiration) : void 0,\n\t job: job\n\t };\n\t }\n\n\t _drainOne(capacity) {\n\t return this._registerLock.schedule(() => {\n\t var args, index, next, options, queue;\n\t if (this.queued() === 0) {\n\t return this.Promise.resolve(null);\n\t }\n\t queue = this._queues.getFirst();\n\t ({options, args} = next = queue.first());\n\t if ((capacity != null) && options.weight > capacity) {\n\t return this.Promise.resolve(null);\n\t }\n\t this.Events.trigger(\"debug\", `Draining ${options.id}`, {args, options});\n\t index = this._randomIndex();\n\t return this._store.__register__(index, options.weight, options.expiration).then(({success, wait, reservoir}) => {\n\t var empty;\n\t this.Events.trigger(\"debug\", `Drained ${options.id}`, {success, args, options});\n\t if (success) {\n\t queue.shift();\n\t empty = this.empty();\n\t if (empty) {\n\t this.Events.trigger(\"empty\");\n\t }\n\t if (reservoir === 0) {\n\t this.Events.trigger(\"depleted\", empty);\n\t }\n\t this._run(index, next, wait);\n\t return this.Promise.resolve(options.weight);\n\t } else {\n\t return this.Promise.resolve(null);\n\t }\n\t });\n\t });\n\t }\n\n\t _drainAll(capacity, total = 0) {\n\t return this._drainOne(capacity).then((drained) => {\n\t var newCapacity;\n\t if (drained != null) {\n\t newCapacity = capacity != null ? capacity - drained : capacity;\n\t return this._drainAll(newCapacity, total + drained);\n\t } else {\n\t return this.Promise.resolve(total);\n\t }\n\t }).catch((e) => {\n\t return this.Events.trigger(\"error\", e);\n\t });\n\t }\n\n\t _dropAllQueued(message) {\n\t return this._queues.shiftAll(function(job) {\n\t return job.doDrop({message});\n\t });\n\t }\n\n\t stop(options = {}) {\n\t var done, waitForExecuting;\n\t options = parser$5.load(options, this.stopDefaults);\n\t waitForExecuting = (at) => {\n\t var finished;\n\t finished = () => {\n\t var counts;\n\t counts = this._states.counts;\n\t return (counts[0] + counts[1] + counts[2] + counts[3]) === at;\n\t };\n\t return new this.Promise((resolve, reject) => {\n\t if (finished()) {\n\t return resolve();\n\t } else {\n\t return this.on(\"done\", () => {\n\t if (finished()) {\n\t this.removeAllListeners(\"done\");\n\t return resolve();\n\t }\n\t });\n\t }\n\t });\n\t };\n\t done = options.dropWaitingJobs ? (this._run = function(index, next) {\n\t return next.doDrop({\n\t message: options.dropErrorMessage\n\t });\n\t }, this._drainOne = () => {\n\t return this.Promise.resolve(null);\n\t }, this._registerLock.schedule(() => {\n\t return this._submitLock.schedule(() => {\n\t var k, ref, v;\n\t ref = this._scheduled;\n\t for (k in ref) {\n\t v = ref[k];\n\t if (this.jobStatus(v.job.options.id) === \"RUNNING\") {\n\t clearTimeout(v.timeout);\n\t clearTimeout(v.expiration);\n\t v.job.doDrop({\n\t message: options.dropErrorMessage\n\t });\n\t }\n\t }\n\t this._dropAllQueued(options.dropErrorMessage);\n\t return waitForExecuting(0);\n\t });\n\t })) : this.schedule({\n\t priority: NUM_PRIORITIES$1 - 1,\n\t weight: 0\n\t }, () => {\n\t return waitForExecuting(1);\n\t });\n\t this._receive = function(job) {\n\t return job._reject(new Bottleneck.prototype.BottleneckError(options.enqueueErrorMessage));\n\t };\n\t this.stop = () => {\n\t return this.Promise.reject(new Bottleneck.prototype.BottleneckError(\"stop() has already been called\"));\n\t };\n\t return done;\n\t }\n\n\t async _addToQueue(job) {\n\t var args, blocked, error, options, reachedHWM, shifted, strategy;\n\t ({args, options} = job);\n\t try {\n\t ({reachedHWM, blocked, strategy} = (await this._store.__submit__(this.queued(), options.weight)));\n\t } catch (error1) {\n\t error = error1;\n\t this.Events.trigger(\"debug\", `Could not queue ${options.id}`, {args, options, error});\n\t job.doDrop({error});\n\t return false;\n\t }\n\t if (blocked) {\n\t job.doDrop();\n\t return true;\n\t } else if (reachedHWM) {\n\t shifted = strategy === Bottleneck.prototype.strategy.LEAK ? this._queues.shiftLastFrom(options.priority) : strategy === Bottleneck.prototype.strategy.OVERFLOW_PRIORITY ? this._queues.shiftLastFrom(options.priority + 1) : strategy === Bottleneck.prototype.strategy.OVERFLOW ? job : void 0;\n\t if (shifted != null) {\n\t shifted.doDrop();\n\t }\n\t if ((shifted == null) || strategy === Bottleneck.prototype.strategy.OVERFLOW) {\n\t if (shifted == null) {\n\t job.doDrop();\n\t }\n\t return reachedHWM;\n\t }\n\t }\n\t job.doQueue(reachedHWM, blocked);\n\t this._queues.push(job);\n\t await this._drainAll();\n\t return reachedHWM;\n\t }\n\n\t _receive(job) {\n\t if (this._states.jobStatus(job.options.id) != null) {\n\t job._reject(new Bottleneck.prototype.BottleneckError(`A job with the same id already exists (id=${job.options.id})`));\n\t return false;\n\t } else {\n\t job.doReceive();\n\t return this._submitLock.schedule(this._addToQueue, job);\n\t }\n\t }\n\n\t submit(...args) {\n\t var cb, fn, job, options, ref, ref1, task;\n\t if (typeof args[0] === \"function\") {\n\t ref = args, [fn, ...args] = ref, [cb] = splice.call(args, -1);\n\t options = parser$5.load({}, this.jobDefaults);\n\t } else {\n\t ref1 = args, [options, fn, ...args] = ref1, [cb] = splice.call(args, -1);\n\t options = parser$5.load(options, this.jobDefaults);\n\t }\n\t task = (...args) => {\n\t return new this.Promise(function(resolve, reject) {\n\t return fn(...args, function(...args) {\n\t return (args[0] != null ? reject : resolve)(args);\n\t });\n\t });\n\t };\n\t job = new Job$1(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);\n\t job.promise.then(function(args) {\n\t return typeof cb === \"function\" ? cb(...args) : void 0;\n\t }).catch(function(args) {\n\t if (Array.isArray(args)) {\n\t return typeof cb === \"function\" ? cb(...args) : void 0;\n\t } else {\n\t return typeof cb === \"function\" ? cb(args) : void 0;\n\t }\n\t });\n\t return this._receive(job);\n\t }\n\n\t schedule(...args) {\n\t var job, options, task;\n\t if (typeof args[0] === \"function\") {\n\t [task, ...args] = args;\n\t options = {};\n\t } else {\n\t [options, task, ...args] = args;\n\t }\n\t job = new Job$1(task, args, options, this.jobDefaults, this.rejectOnDrop, this.Events, this._states, this.Promise);\n\t this._receive(job);\n\t return job.promise;\n\t }\n\n\t wrap(fn) {\n\t var schedule, wrapped;\n\t schedule = this.schedule.bind(this);\n\t wrapped = function(...args) {\n\t return schedule(fn.bind(this), ...args);\n\t };\n\t wrapped.withOptions = function(options, ...args) {\n\t return schedule(options, fn, ...args);\n\t };\n\t return wrapped;\n\t }\n\n\t async updateSettings(options = {}) {\n\t await this._store.__updateSettings__(parser$5.overwrite(options, this.storeDefaults));\n\t parser$5.overwrite(options, this.instanceDefaults, this);\n\t return this;\n\t }\n\n\t currentReservoir() {\n\t return this._store.__currentReservoir__();\n\t }\n\n\t incrementReservoir(incr = 0) {\n\t return this._store.__incrementReservoir__(incr);\n\t }\n\n\t }\n\t Bottleneck.default = Bottleneck;\n\n\t Bottleneck.Events = Events$4;\n\n\t Bottleneck.version = Bottleneck.prototype.version = require$$8.version;\n\n\t Bottleneck.strategy = Bottleneck.prototype.strategy = {\n\t LEAK: 1,\n\t OVERFLOW: 2,\n\t OVERFLOW_PRIORITY: 4,\n\t BLOCK: 3\n\t };\n\n\t Bottleneck.BottleneckError = Bottleneck.prototype.BottleneckError = BottleneckError_1;\n\n\t Bottleneck.Group = Bottleneck.prototype.Group = Group_1;\n\n\t Bottleneck.RedisConnection = Bottleneck.prototype.RedisConnection = require$$2;\n\n\t Bottleneck.IORedisConnection = Bottleneck.prototype.IORedisConnection = require$$3;\n\n\t Bottleneck.Batcher = Bottleneck.prototype.Batcher = Batcher_1;\n\n\t Bottleneck.prototype.jobDefaults = {\n\t priority: DEFAULT_PRIORITY$1,\n\t weight: 1,\n\t expiration: null,\n\t id: \"<no-id>\"\n\t };\n\n\t Bottleneck.prototype.storeDefaults = {\n\t maxConcurrent: null,\n\t minTime: 0,\n\t highWater: null,\n\t strategy: Bottleneck.prototype.strategy.LEAK,\n\t penalty: null,\n\t reservoir: null,\n\t reservoirRefreshInterval: null,\n\t reservoirRefreshAmount: null,\n\t reservoirIncreaseInterval: null,\n\t reservoirIncreaseAmount: null,\n\t reservoirIncreaseMaximum: null\n\t };\n\n\t Bottleneck.prototype.localStoreDefaults = {\n\t Promise: Promise,\n\t timeout: null,\n\t heartbeatInterval: 250\n\t };\n\n\t Bottleneck.prototype.redisStoreDefaults = {\n\t Promise: Promise,\n\t timeout: null,\n\t heartbeatInterval: 5000,\n\t clientTimeout: 10000,\n\t Redis: null,\n\t clientOptions: {},\n\t clusterNodes: null,\n\t clearDatastore: false,\n\t connection: null\n\t };\n\n\t Bottleneck.prototype.instanceDefaults = {\n\t datastore: \"local\",\n\t connection: null,\n\t id: \"<no-id>\",\n\t rejectOnDrop: true,\n\t trackDoneStatus: false,\n\t Promise: Promise\n\t };\n\n\t Bottleneck.prototype.stopDefaults = {\n\t enqueueErrorMessage: \"This limiter has been stopped and cannot accept new jobs.\",\n\t dropWaitingJobs: true,\n\t dropErrorMessage: \"This limiter has been stopped.\"\n\t };\n\n\t return Bottleneck;\n\n\t}).call(commonjsGlobal);\n\n\tvar Bottleneck_1 = Bottleneck;\n\n\tvar lib = Bottleneck_1;\n\n\treturn lib;\n\n})));\n","// pkg/dist-src/index.js\nimport BottleneckLight from \"bottleneck/light.js\";\n\n// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/wrap-request.js\nvar noop = () => Promise.resolve();\nfunction wrapRequest(state, request, options) {\n return state.retryLimiter.schedule(doRequest, state, request, options);\n}\nasync function doRequest(state, request, options) {\n const { pathname } = new URL(options.url, \"http://github.test\");\n const isAuth = isAuthRequest(options.method, pathname);\n const isWrite = !isAuth && options.method !== \"GET\" && options.method !== \"HEAD\";\n const isSearch = options.method === \"GET\" && pathname.startsWith(\"/search/\");\n const isGraphQL = pathname.startsWith(\"/graphql\");\n const retryCount = ~~request.retryCount;\n const jobOptions = retryCount > 0 ? { priority: 0, weight: 0 } : {};\n if (state.clustering) {\n jobOptions.expiration = 1e3 * 60;\n }\n if (isWrite || isGraphQL) {\n await state.write.key(state.id).schedule(jobOptions, noop);\n }\n if (isWrite && state.triggersNotification(pathname)) {\n await state.notifications.key(state.id).schedule(jobOptions, noop);\n }\n if (isSearch) {\n await state.search.key(state.id).schedule(jobOptions, noop);\n }\n const req = (isAuth ? state.auth : state.global).key(state.id).schedule(jobOptions, request, options);\n if (isGraphQL) {\n const res = await req;\n if (res.data.errors != null && res.data.errors.some((error) => error.type === \"RATE_LIMITED\")) {\n const error = Object.assign(new Error(\"GraphQL Rate Limit Exceeded\"), {\n response: res,\n data: res.data\n });\n throw error;\n }\n }\n return req;\n}\nfunction isAuthRequest(method, pathname) {\n return method === \"PATCH\" && // https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-a-scoped-access-token\n /^\\/applications\\/[^/]+\\/token\\/scoped$/.test(pathname) || method === \"POST\" && // https://docs.github.com/en/rest/apps/oauth-applications?apiVersion=2022-11-28#reset-a-token\n (/^\\/applications\\/[^/]+\\/token$/.test(pathname) || // https://docs.github.com/en/rest/apps/apps?apiVersion=2022-11-28#create-an-installation-access-token-for-an-app\n /^\\/app\\/installations\\/[^/]+\\/access_tokens$/.test(pathname) || // https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps\n pathname === \"/login/oauth/access_token\");\n}\n\n// pkg/dist-src/generated/triggers-notification-paths.js\nvar triggers_notification_paths_default = [\n \"/orgs/{org}/invitations\",\n \"/orgs/{org}/invitations/{invitation_id}\",\n \"/orgs/{org}/teams/{team_slug}/discussions\",\n \"/orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments\",\n \"/repos/{owner}/{repo}/collaborators/{username}\",\n \"/repos/{owner}/{repo}/commits/{commit_sha}/comments\",\n \"/repos/{owner}/{repo}/issues\",\n \"/repos/{owner}/{repo}/issues/{issue_number}/comments\",\n \"/repos/{owner}/{repo}/issues/{issue_number}/sub_issue\",\n \"/repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority\",\n \"/repos/{owner}/{repo}/pulls\",\n \"/repos/{owner}/{repo}/pulls/{pull_number}/comments\",\n \"/repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies\",\n \"/repos/{owner}/{repo}/pulls/{pull_number}/merge\",\n \"/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers\",\n \"/repos/{owner}/{repo}/pulls/{pull_number}/reviews\",\n \"/repos/{owner}/{repo}/releases\",\n \"/teams/{team_id}/discussions\",\n \"/teams/{team_id}/discussions/{discussion_number}/comments\"\n];\n\n// pkg/dist-src/route-matcher.js\nfunction routeMatcher(paths) {\n const regexes = paths.map(\n (path) => path.split(\"/\").map((c) => c.startsWith(\"{\") ? \"(?:.+?)\" : c).join(\"/\")\n );\n const regex2 = `^(?:${regexes.map((r) => `(?:${r})`).join(\"|\")})[^/]*$`;\n return new RegExp(regex2, \"i\");\n}\n\n// pkg/dist-src/index.js\nvar regex = routeMatcher(triggers_notification_paths_default);\nvar triggersNotification = regex.test.bind(regex);\nvar groups = {};\nvar createGroups = function(Bottleneck, common) {\n groups.global = new Bottleneck.Group({\n id: \"octokit-global\",\n maxConcurrent: 10,\n ...common\n });\n groups.auth = new Bottleneck.Group({\n id: \"octokit-auth\",\n maxConcurrent: 1,\n ...common\n });\n groups.search = new Bottleneck.Group({\n id: \"octokit-search\",\n maxConcurrent: 1,\n minTime: 2e3,\n ...common\n });\n groups.write = new Bottleneck.Group({\n id: \"octokit-write\",\n maxConcurrent: 1,\n minTime: 1e3,\n ...common\n });\n groups.notifications = new Bottleneck.Group({\n id: \"octokit-notifications\",\n maxConcurrent: 1,\n minTime: 3e3,\n ...common\n });\n};\nfunction throttling(octokit, octokitOptions) {\n const {\n enabled = true,\n Bottleneck = BottleneckLight,\n id = \"no-id\",\n timeout = 1e3 * 60 * 2,\n // Redis TTL: 2 minutes\n connection\n } = octokitOptions.throttle || {};\n if (!enabled) {\n return {};\n }\n const common = { timeout };\n if (typeof connection !== \"undefined\") {\n common.connection = connection;\n }\n if (groups.global == null) {\n createGroups(Bottleneck, common);\n }\n const state = Object.assign(\n {\n clustering: connection != null,\n triggersNotification,\n fallbackSecondaryRateRetryAfter: 60,\n retryAfterBaseValue: 1e3,\n retryLimiter: new Bottleneck(),\n id,\n ...groups\n },\n octokitOptions.throttle\n );\n if (typeof state.onSecondaryRateLimit !== \"function\" || typeof state.onRateLimit !== \"function\") {\n throw new Error(`octokit/plugin-throttling error:\n You must pass the onSecondaryRateLimit and onRateLimit error handlers.\n See https://octokit.github.io/rest.js/#throttling\n\n const octokit = new Octokit({\n throttle: {\n onSecondaryRateLimit: (retryAfter, options) => {/* ... */},\n onRateLimit: (retryAfter, options) => {/* ... */}\n }\n })\n `);\n }\n const events = {};\n const emitter = new Bottleneck.Events(events);\n events.on(\"secondary-limit\", state.onSecondaryRateLimit);\n events.on(\"rate-limit\", state.onRateLimit);\n events.on(\n \"error\",\n (e) => octokit.log.warn(\"Error in throttling-plugin limit handler\", e)\n );\n state.retryLimiter.on(\"failed\", async function(error, info) {\n const [state2, request, options] = info.args;\n const { pathname } = new URL(options.url, \"http://github.test\");\n const shouldRetryGraphQL = pathname.startsWith(\"/graphql\") && error.status !== 401;\n if (!(shouldRetryGraphQL || error.status === 403 || error.status === 429)) {\n return;\n }\n const retryCount = ~~request.retryCount;\n request.retryCount = retryCount;\n options.request.retryCount = retryCount;\n const { wantRetry, retryAfter = 0 } = await (async function() {\n if (/\\bsecondary rate\\b/i.test(error.message)) {\n const retryAfter2 = Number(error.response.headers[\"retry-after\"]) || state2.fallbackSecondaryRateRetryAfter;\n const wantRetry2 = await emitter.trigger(\n \"secondary-limit\",\n retryAfter2,\n options,\n octokit,\n retryCount\n );\n return { wantRetry: wantRetry2, retryAfter: retryAfter2 };\n }\n if (error.response.headers != null && error.response.headers[\"x-ratelimit-remaining\"] === \"0\" || (error.response.data?.errors ?? []).some(\n (error2) => error2.type === \"RATE_LIMITED\"\n )) {\n const rateLimitReset = new Date(\n ~~error.response.headers[\"x-ratelimit-reset\"] * 1e3\n ).getTime();\n const retryAfter2 = Math.max(\n // Add one second so we retry _after_ the reset time\n // https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#exceeding-the-rate-limit\n Math.ceil((rateLimitReset - Date.now()) / 1e3) + 1,\n 0\n );\n const wantRetry2 = await emitter.trigger(\n \"rate-limit\",\n retryAfter2,\n options,\n octokit,\n retryCount\n );\n return { wantRetry: wantRetry2, retryAfter: retryAfter2 };\n }\n return {};\n })();\n if (wantRetry) {\n request.retryCount++;\n return retryAfter * state2.retryAfterBaseValue;\n }\n });\n octokit.hook.wrap(\"request\", wrapRequest.bind(null, state));\n return {};\n}\nthrottling.VERSION = VERSION;\nthrottling.triggersNotification = triggersNotification;\nexport {\n throttling\n};\n","// pkg/dist-src/version.js\nvar VERSION = \"0.0.0-development\";\n\n// pkg/dist-src/error-request.js\nfunction isRequestError(error) {\n return error.request !== void 0;\n}\nasync function errorRequest(state, octokit, error, options) {\n if (!isRequestError(error) || !error?.request.request) {\n throw error;\n }\n if (error.status >= 400 && !state.doNotRetry.includes(error.status)) {\n const retries = options.request.retries != null ? options.request.retries : state.retries;\n const retryAfter = Math.pow((options.request.retryCount || 0) + 1, 2);\n throw octokit.retry.retryRequest(error, retries, retryAfter);\n }\n throw error;\n}\n\n// pkg/dist-src/wrap-request.js\nimport Bottleneck, {} from \"bottleneck/light.js\";\nimport { RequestError } from \"@octokit/request-error\";\nasync function wrapRequest(state, octokit, request, options) {\n const limiter = new Bottleneck();\n limiter.on(\"failed\", function(error, info) {\n const maxRetries = ~~error.request.request?.retries;\n const after = ~~error.request.request?.retryAfter;\n options.request.retryCount = info.retryCount + 1;\n if (maxRetries > info.retryCount) {\n return after * state.retryAfterBaseValue;\n }\n });\n return limiter.schedule(\n requestWithGraphqlErrorHandling.bind(null, state, octokit, request),\n options\n );\n}\nasync function requestWithGraphqlErrorHandling(state, octokit, request, options) {\n const response = await request(options);\n if (response.data && response.data.errors && response.data.errors.length > 0 && /Something went wrong while executing your query/.test(\n response.data.errors[0].message\n )) {\n const error = new RequestError(response.data.errors[0].message, 500, {\n request: options,\n response\n });\n return errorRequest(state, octokit, error, options);\n }\n return response;\n}\n\n// pkg/dist-src/index.js\nfunction retry(octokit, octokitOptions) {\n const state = Object.assign(\n {\n enabled: true,\n retryAfterBaseValue: 1e3,\n doNotRetry: [400, 401, 403, 404, 410, 422, 451],\n retries: 3\n },\n octokitOptions.retry\n );\n const retryPlugin = {\n retry: {\n retryRequest: (error, retries, retryAfter) => {\n error.request.request = Object.assign({}, error.request.request, {\n retries,\n retryAfter\n });\n return error;\n }\n }\n };\n if (state.enabled) {\n octokit.hook.error(\"request\", errorRequest.bind(null, state, retryPlugin));\n octokit.hook.wrap(\"request\", wrapRequest.bind(null, state, retryPlugin));\n }\n return retryPlugin;\n}\nretry.VERSION = VERSION;\nexport {\n VERSION,\n retry\n};\n","/**\n * GitHub Integration -- Type definitions\n *\n * All types for the GitHub Issues/Projects v2 integration layer.\n * Used by client.ts, mapping.ts, issues.ts, projects.ts, and downstream modules.\n */\n\n// ---- Error codes for gh CLI wrapper ----------------------------------------\n\nexport type GhErrorCode =\n | 'NOT_AUTHENTICATED'\n | 'NOT_INSTALLED'\n | 'RATE_LIMITED'\n | 'NOT_FOUND'\n | 'PERMISSION_DENIED'\n | 'SCOPE_MISSING'\n | 'UNKNOWN';\n\n// ---- GhResult discriminated union ------------------------------------------\n\nexport type GhResult<T> =\n | { ok: true; data: T }\n | { ok: false; error: string; code: GhErrorCode };\n\n// ---- Auth status -----------------------------------------------------------\n\nexport interface AuthStatus {\n installed: boolean;\n authenticated: boolean;\n scopes: string[];\n hasProjectScope: boolean;\n username: string | null;\n}\n\n// ---- Auth error (thrown by requireAuth) ------------------------------------\n\nexport class AuthError extends Error {\n constructor(\n public readonly code: 'NOT_INSTALLED' | 'NOT_AUTHENTICATED' | 'SCOPE_MISSING',\n message: string,\n ) {\n super(message);\n this.name = 'AuthError';\n }\n}\n\n// ---- Close state reason ----------------------------------------------------\n\nexport type StateReason = 'completed' | 'not_planned';\n\n// ---- Issue status ----------------------------------------------------------\n\nexport type IssueStatus = 'To Do' | 'In Progress' | 'In Review' | 'Done';\n\n// ---- Task-to-issue mapping -------------------------------------------------\n\nexport interface TaskIssueMapping {\n number: number;\n /** Internal numeric ID used for sub-issue linking (NOT the human-readable number). */\n id: number;\n node_id: string;\n item_id: string;\n status: IssueStatus;\n}\n\n// ---- Phase mapping ---------------------------------------------------------\n\nexport interface PhaseMapping {\n tracking_issue: TaskIssueMapping;\n plan: string;\n tasks: Record<string, TaskIssueMapping>;\n body_hash?: string;\n}\n\n// ---- Root mapping file (.planning/github-issues.json) ----------------------\n\nexport interface IssueMappingFile {\n project_number: number;\n project_id: string;\n repo: string;\n status_field_id: string;\n status_options: Record<string, string>;\n estimate_field_id: string;\n milestone_id: number;\n milestone_title: string;\n labels: Record<string, string>;\n phases: Record<string, PhaseMapping>;\n /** @deprecated Todo functionality has been removed. Kept for backwards compatibility with existing mapping files. */\n todos?: Record<string, TaskIssueMapping>;\n}\n\n// ---- Label definitions -----------------------------------------------------\n\nexport const MAXSIM_LABELS = [\n { name: 'phase', color: '6f42c1', description: 'MAXSIM phase issue' },\n { name: 'task', color: '0075ca', description: 'MAXSIM task issue' },\n { name: 'blocker', color: 'd73a4a', description: 'Blocker issue' },\n] as const;\n\n// ---- Fibonacci story points ------------------------------------------------\n\nexport const FIBONACCI_POINTS = [1, 2, 3, 5, 8, 13, 21, 34] as const;\n\n// ---- Default project board status columns ----------------------------------\n\nexport const DEFAULT_STATUS_OPTIONS = ['To Do', 'In Progress', 'In Review', 'Done'] as const;\n","/**\n * GitHub Client — Octokit adapter with auth gate and error wrapping\n *\n * Provides a configured Octokit singleton with throttling + retry plugins.\n * Uses `gh auth token` for authentication (fetched once per process).\n *\n * CRITICAL: This module replaces gh.ts as the primary GitHub API layer.\n * CRITICAL: Never call process.exit() — throw AuthError or return GhResult.\n */\n\nimport { execFileSync } from 'node:child_process';\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nimport { Octokit } from '@octokit/rest';\nimport { throttling } from '@octokit/plugin-throttling';\nimport { retry } from '@octokit/plugin-retry';\nimport { RequestError } from '@octokit/request-error';\n\nimport { AuthError } from './types.js';\nimport type { GhErrorCode, GhResult } from './types.js';\n\nconst execFileAsync = promisify(execFile);\n\n// ---- Singleton state --------------------------------------------------------\n\nconst ThrottledOctokit = Octokit.plugin(throttling, retry);\n\nlet _instance: InstanceType<typeof ThrottledOctokit> | null = null;\nlet _cachedRepo: { owner: string; repo: string } | null = null;\n\n// ---- Auth gate --------------------------------------------------------------\n\n/**\n * Check that `gh` CLI is installed, authenticated, and has the `project` scope.\n * Throws AuthError on failure — this is a hard gate, not a fallback.\n *\n * Three checks in order:\n * 1. Is `gh` CLI installed?\n * 2. Is gh authenticated? (non-empty token)\n * 3. Has the token got `project` scope?\n */\nexport function requireAuth(): void {\n // Check 1: Is gh installed?\n try {\n execFileSync('gh', ['--version'], { timeout: 10_000, stdio: 'pipe' });\n } catch (e: unknown) {\n const err = e as { code?: string };\n if (err.code === 'ENOENT') {\n throw new AuthError(\n 'NOT_INSTALLED',\n 'GitHub CLI (gh) is not installed. Install from https://cli.github.com/',\n );\n }\n // If gh exists but --version failed for another reason, continue\n }\n\n // Check 2: Is gh authenticated?\n let token: string;\n try {\n token = execFileSync('gh', ['auth', 'token'], {\n timeout: 10_000,\n stdio: 'pipe',\n encoding: 'utf-8',\n }).trim();\n } catch {\n throw new AuthError(\n 'NOT_AUTHENTICATED',\n 'GitHub CLI is not authenticated. Run: gh auth login',\n );\n }\n\n if (!token) {\n throw new AuthError(\n 'NOT_AUTHENTICATED',\n 'GitHub CLI returned empty token. Run: gh auth login',\n );\n }\n\n // Check 3: Has project scope?\n try {\n const statusOutput = execFileSync('gh', ['auth', 'status'], {\n timeout: 10_000,\n stdio: 'pipe',\n encoding: 'utf-8',\n });\n\n // gh auth status may write to stderr — execFileSync with stdio: 'pipe' captures stdout\n // If status doesn't include project scope info, check stderr separately\n const output = statusOutput || '';\n\n // Parse scopes — look for 'project' or 'read:project'\n const hasProject =\n output.includes(\"'project'\") ||\n output.includes(\"'read:project'\") ||\n output.includes('\"project\"') ||\n output.includes('\"read:project\"');\n\n if (!hasProject) {\n // Don't throw if we can't detect scopes — gh auth status format varies\n // The API call itself will fail with 403 if scope is missing\n }\n } catch {\n // gh auth status exits non-zero when not authenticated,\n // but we already verified the token above, so this is OK.\n }\n}\n\n// ---- Octokit singleton ------------------------------------------------------\n\n/**\n * Returns a configured Octokit singleton with throttling + retry plugins.\n * Fetches token from `gh auth token` on first call and caches the instance.\n *\n * @throws AuthError if gh is not installed or not authenticated\n */\nexport function getOctokit(): InstanceType<typeof ThrottledOctokit> {\n if (_instance) {\n return _instance;\n }\n\n // Fetch token from gh CLI (synchronous — happens once per process)\n let token: string;\n try {\n token = execFileSync('gh', ['auth', 'token'], {\n timeout: 10_000,\n stdio: 'pipe',\n encoding: 'utf-8',\n }).trim();\n } catch (e: unknown) {\n const err = e as { code?: string };\n if (err.code === 'ENOENT') {\n throw new AuthError(\n 'NOT_INSTALLED',\n 'GitHub CLI (gh) is not installed. Install from https://cli.github.com/',\n );\n }\n throw new AuthError(\n 'NOT_AUTHENTICATED',\n 'GitHub CLI is not authenticated. Run: gh auth login',\n );\n }\n\n if (!token) {\n throw new AuthError(\n 'NOT_AUTHENTICATED',\n 'GitHub CLI returned empty token. Run: gh auth login',\n );\n }\n\n _instance = new ThrottledOctokit({\n auth: token,\n userAgent: 'maxsimcli',\n throttle: {\n onRateLimit: (retryAfter: number, options: Record<string, unknown>, octokit: unknown, retryCount: number) => {\n if (retryCount < 2) {\n return true; // Retry twice on primary rate limits\n }\n return false;\n },\n onSecondaryRateLimit: (retryAfter: number, options: Record<string, unknown>, octokit: unknown, retryCount: number) => {\n if (retryCount < 1) {\n return true; // Retry once on secondary rate limits\n }\n return false;\n },\n },\n retry: {\n enabled: true,\n },\n });\n\n return _instance;\n}\n\n// ---- Repo info detection ----------------------------------------------------\n\n/**\n * Parse owner/repo from `git remote get-url origin`.\n * Supports both HTTPS and SSH remote URLs.\n * Caches the result in a module-level variable.\n */\nexport async function getRepoInfo(): Promise<{ owner: string; repo: string }> {\n if (_cachedRepo) {\n return _cachedRepo;\n }\n\n const { stdout } = await execFileAsync('git', ['remote', 'get-url', 'origin'], {\n timeout: 10_000,\n });\n const url = stdout.trim();\n\n // HTTPS: https://github.com/owner/repo.git\n const httpsMatch = url.match(/github\\.com\\/([^/]+)\\/([^/.]+)/);\n if (httpsMatch) {\n _cachedRepo = { owner: httpsMatch[1], repo: httpsMatch[2] };\n return _cachedRepo;\n }\n\n // SSH: git@github.com:owner/repo.git\n const sshMatch = url.match(/github\\.com:([^/]+)\\/([^/.]+)/);\n if (sshMatch) {\n _cachedRepo = { owner: sshMatch[1], repo: sshMatch[2] };\n return _cachedRepo;\n }\n\n throw new Error(`Could not parse owner/repo from git remote URL: ${url}`);\n}\n\n// ---- Singleton reset (for testing) ------------------------------------------\n\n/**\n * Reset the Octokit singleton and cached repo info.\n * Used in tests to ensure clean state between test runs.\n */\nexport function resetOctokit(): void {\n _instance = null;\n _cachedRepo = null;\n}\n\n// ---- Error wrapper ----------------------------------------------------------\n\n/**\n * Wrap an async function that uses Octokit and return a GhResult.\n * Catches Octokit RequestError and maps HTTP status codes to GhErrorCode.\n */\nexport async function withGhResult<T>(fn: () => Promise<T>): Promise<GhResult<T>> {\n try {\n const data = await fn();\n return { ok: true, data };\n } catch (e: unknown) {\n if (e instanceof RequestError) {\n const code = mapHttpStatusToCode(e.status);\n return { ok: false, error: e.message, code };\n }\n\n if (e instanceof AuthError) {\n const code: GhErrorCode =\n e.code === 'NOT_INSTALLED' ? 'NOT_INSTALLED' :\n e.code === 'SCOPE_MISSING' ? 'SCOPE_MISSING' :\n 'NOT_AUTHENTICATED';\n return { ok: false, error: e.message, code };\n }\n\n const message = e instanceof Error ? e.message : String(e);\n return { ok: false, error: message, code: 'UNKNOWN' };\n }\n}\n\n// ---- Internal helpers -------------------------------------------------------\n\nfunction mapHttpStatusToCode(status: number): GhErrorCode {\n switch (status) {\n case 401:\n return 'NOT_AUTHENTICATED';\n case 403:\n return 'PERMISSION_DENIED';\n case 404:\n return 'NOT_FOUND';\n case 429:\n return 'RATE_LIMITED';\n default:\n return 'UNKNOWN';\n }\n}\n","/**\n * GitHub Issues — Phase CRUD, task sub-issues, plan comments, close/reopen\n *\n * Uses Octokit REST API for all operations. Phase Issues have YAML frontmatter\n * bodies. Tasks are linked as native sub-issues via GitHub's sub-issues API.\n * Plans are posted as structured comments on phase Issues.\n *\n * CRITICAL: Uses `child.data.id` (internal numeric ID) for sub-issue linking,\n * NOT `child.data.number` (human-readable number).\n * CRITICAL: All operations use client.ts (Octokit adapter) exclusively.\n * CRITICAL: Never call process.exit() — return GhResult instead.\n */\n\nimport type { GhResult, StateReason } from './types.js';\nimport { getOctokit, getRepoInfo, withGhResult } from './client.js';\n\n// ---- Phase Issue Creation ---------------------------------------------------\n\n/**\n * Create a GitHub Issue for a MAXSIM phase.\n *\n * Title: `[Phase {phaseNum}] {phaseName}`\n * Body: YAML frontmatter (in ```yaml code fence) + human-readable sections.\n * Label: `phase`\n *\n * Returns both `number` (for display/API) and `id` (for sub-issue linking).\n */\nexport async function createPhaseIssue(\n phaseNum: string,\n phaseName: string,\n goal: string,\n requirements: string[],\n successCriteria: string[],\n): Promise<GhResult<{ number: number; id: number }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const title = `[Phase ${phaseNum}] ${phaseName}`;\n\n // Build YAML frontmatter block\n const reqYaml = requirements.length > 0\n ? `\\n${requirements.map(r => ` - ${r}`).join('\\n')}`\n : ' []';\n\n const frontmatter = [\n '```yaml',\n `phase_number: \"${phaseNum}\"`,\n `requirements:${reqYaml}`,\n 'dependencies: []',\n \"status: 'to-do'\",\n '```',\n ].join('\\n');\n\n // Build human-readable sections\n const reqSection = requirements.length > 0\n ? requirements.map(r => `- ${r}`).join('\\n')\n : '_None specified_';\n\n const criteriaSection = successCriteria.length > 0\n ? successCriteria.map(c => `- [ ] ${c}`).join('\\n')\n : '_None specified_';\n\n const body = `${frontmatter}\n\n## Goal\n\n${goal}\n\n## Requirements\n\n${reqSection}\n\n## Success Criteria\n\n${criteriaSection}\n\n---\n*Generated by MAXSIM*`;\n\n const response = await octokit.rest.issues.create({\n owner,\n repo,\n title,\n body,\n labels: ['phase'],\n });\n\n return {\n number: response.data.number,\n id: response.data.id,\n };\n });\n}\n\n// ---- Task Sub-Issue Creation ------------------------------------------------\n\n/**\n * Create a task sub-issue and link it to a parent phase Issue.\n *\n * Title: `[P{phaseNum}] {title}`\n * Label: `task`\n * Body: passed as-is (caller formats it).\n *\n * After creation, links the new issue as a sub-issue of the parent via\n * GitHub's native sub-issues API. Uses `child.data.id` (internal ID),\n * NOT `child.data.number`.\n *\n * If sub-issue linking fails, attempts cleanup by closing the orphan issue.\n */\nexport async function createTaskSubIssue(\n phaseNum: string,\n taskId: string,\n title: string,\n body: string,\n parentIssueNumber: number,\n): Promise<GhResult<{ number: number; id: number }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const issueTitle = `[P${phaseNum}] ${title}`;\n\n // Create the child issue\n const child = await octokit.rest.issues.create({\n owner,\n repo,\n title: issueTitle,\n body,\n labels: ['task'],\n });\n\n // Link as sub-issue using the internal `id` (NOT `number`)\n try {\n await (octokit.rest.issues as any).addSubIssue({\n owner,\n repo,\n issue_number: parentIssueNumber,\n sub_issue_id: child.data.id,\n });\n } catch (linkError: unknown) {\n // Sub-issue linking failed — attempt cleanup by closing the orphan\n try {\n await octokit.rest.issues.update({\n owner,\n repo,\n issue_number: child.data.number,\n state: 'closed',\n state_reason: 'not_planned' as any,\n });\n } catch {\n // Cleanup failed — orphan issue will remain open\n }\n\n const message = linkError instanceof Error ? linkError.message : String(linkError);\n throw new Error(\n `Created issue #${child.data.number} but failed to link as sub-issue: ${message}. ` +\n `Orphan issue has been closed.`\n );\n }\n\n return {\n number: child.data.number,\n id: child.data.id,\n };\n });\n}\n\n// ---- Plan Comments ----------------------------------------------------------\n\n/**\n * Post a structured plan comment on a phase Issue.\n *\n * Comment body: `## Plan {planNumber}\\n\\n{planContent}\\n\\n---\\n*Posted by MAXSIM*`\n */\nexport async function postPlanComment(\n phaseIssueNumber: number,\n planNumber: string,\n planContent: string,\n): Promise<GhResult<{ commentId: number }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const commentBody = `## Plan ${planNumber}\\n\\n${planContent}\\n\\n---\\n*Posted by MAXSIM*`;\n\n const response = await octokit.rest.issues.createComment({\n owner,\n repo,\n issue_number: phaseIssueNumber,\n body: commentBody,\n });\n\n return { commentId: response.data.id };\n });\n}\n\n// ---- Issue Lifecycle --------------------------------------------------------\n\n/**\n * Close an issue. Optionally post a reason comment before closing.\n *\n * @param stateReason - 'completed' (default) or 'not_planned' (rollback/cancel)\n */\nexport async function closeIssue(\n issueNumber: number,\n reason?: string,\n stateReason: StateReason = 'completed',\n): Promise<GhResult<void>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n // If a reason is provided, post it as a comment before closing\n if (reason) {\n await octokit.rest.issues.createComment({\n owner,\n repo,\n issue_number: issueNumber,\n body: reason,\n });\n }\n\n await octokit.rest.issues.update({\n owner,\n repo,\n issue_number: issueNumber,\n state: 'closed',\n state_reason: stateReason as any,\n });\n });\n}\n\n/**\n * Reopen a closed issue.\n */\nexport async function reopenIssue(issueNumber: number): Promise<GhResult<void>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n await octokit.rest.issues.update({\n owner,\n repo,\n issue_number: issueNumber,\n state: 'open',\n });\n });\n}\n\n// ---- Issue Fetch ------------------------------------------------------------\n\n/**\n * Fetch a single issue by number.\n *\n * Returns number, id, title, state, body, updated_at, labels, and comments_url.\n */\nexport async function getPhaseIssue(\n phaseIssueNumber: number,\n): Promise<GhResult<{\n number: number;\n id: number;\n title: string;\n state: string;\n body: string;\n updated_at: string;\n labels: string[];\n comments_url: string;\n}>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const response = await octokit.rest.issues.get({\n owner,\n repo,\n issue_number: phaseIssueNumber,\n });\n\n const labels = response.data.labels.map(l =>\n typeof l === 'string' ? l : (l.name ?? ''),\n ).filter(Boolean);\n\n return {\n number: response.data.number,\n id: response.data.id,\n title: response.data.title,\n state: response.data.state,\n body: response.data.body ?? '',\n updated_at: response.data.updated_at,\n labels,\n comments_url: response.data.comments_url,\n };\n });\n}\n\n/**\n * List all sub-issues of a phase Issue.\n *\n * Uses GitHub's native sub-issues API.\n * Returns each sub-issue's number, id, title, state, and updated_at.\n */\nexport async function listPhaseSubIssues(\n phaseIssueNumber: number,\n): Promise<GhResult<Array<{ number: number; id: number; title: string; state: string; updated_at: string }>>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const response = await (octokit.rest.issues as any).listSubIssues({\n owner,\n repo,\n issue_number: phaseIssueNumber,\n });\n\n const subIssues = (response.data as any[]).map((issue: any) => ({\n number: issue.number as number,\n id: issue.id as number,\n title: issue.title as string,\n state: issue.state as string,\n updated_at: (issue.updated_at as string) ?? '',\n }));\n\n return subIssues;\n });\n}\n\n// ---- Generic Comment --------------------------------------------------------\n\n/**\n * Post a generic comment on a GitHub issue.\n *\n * Used by MCP tools for blocker linking, bounce feedback, etc.\n */\nexport async function postComment(\n issueNumber: number,\n body: string,\n): Promise<GhResult<{ commentId: number }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const response = await octokit.rest.issues.createComment({\n owner,\n repo,\n issue_number: issueNumber,\n body,\n });\n\n return { commentId: response.data.id };\n });\n}\n\n// ---- Completion Comment -----------------------------------------------------\n\n/**\n * Post a structured completion comment on an issue.\n *\n * Includes the commit SHA and list of files changed.\n * Satisfies CONTEXT.md decision: \"Each completed task gets a completion comment.\"\n */\nexport async function postCompletionComment(\n issueNumber: number,\n commitSha: string,\n filesChanged: string[],\n): Promise<GhResult<{ commentId: number }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const fileList = filesChanged.length > 0\n ? filesChanged.map(f => `- \\`${f}\\``).join('\\n')\n : '_No files changed_';\n\n const commentBody = `## Task Completed\n\n**Commit:** \\`${commitSha}\\`\n\n### Files Changed\n${fileList}\n\n---\n*Completion recorded by MAXSIM*`;\n\n const response = await octokit.rest.issues.createComment({\n owner,\n repo,\n issue_number: issueNumber,\n body: commentBody,\n });\n\n return { commentId: response.data.id };\n });\n}\n","/**\n * GitHub Projects v2 — Board management via Octokit REST API\n *\n * Manages GitHub Projects v2 boards for MAXSIM task tracking.\n * Uses Octokit REST API for all operations -- no GraphQL.\n *\n * One project board per repo (not per milestone). 4 columns:\n * To Do, In Progress, In Review, Done.\n *\n * Projects v2 REST API endpoints:\n * - GET /users/{username}/projectsV2 — list user projects\n * - GET /orgs/{org}/projectsV2 — list org projects\n * - GET /users/{username}/projectsV2/{project_number} — get project\n * - GET /users/{username}/projectsV2/{project_number}/fields — list fields\n * - GET /users/{username}/projectsV2/{project_number}/items — list items\n * - POST /users/{username}/projectsV2/{project_number}/items — add item\n * - PATCH /users/{username}/projectsV2/{project_number}/items/{item_id} — update item\n *\n * CRITICAL: No GraphQL anywhere in this file.\n * CRITICAL: All operations use client.ts (Octokit adapter) exclusively.\n * CRITICAL: Never call process.exit() — return GhResult instead.\n */\n\nimport { execFileSync } from 'node:child_process';\n\nimport { getOctokit, getRepoInfo, withGhResult } from './client.js';\nimport type { GhResult, IssueStatus } from './types.js';\nimport { DEFAULT_STATUS_OPTIONS } from './types.js';\n\n// ---- Helpers ---------------------------------------------------------------\n\n/**\n * Detect whether the repo owner is a user or organization.\n * Returns 'User' or 'Organization'.\n */\nasync function detectOwnerType(owner: string, repo: string): Promise<'User' | 'Organization'> {\n const octokit = getOctokit();\n const response = await octokit.rest.repos.get({ owner, repo });\n return response.data.owner?.type === 'Organization' ? 'Organization' : 'User';\n}\n\n// ---- Status field option ID cache ------------------------------------------\n\ninterface StatusFieldCache {\n fieldId: number;\n options: Map<string, string>; // option name -> option id\n}\n\nlet _statusFieldCache: StatusFieldCache | null = null;\n\n// ---- Project Board Creation ------------------------------------------------\n\n/**\n * Ensure a project board exists with the given title, creating it if needed.\n *\n * 1. Detect owner type (User or Organization)\n * 2. List existing projects, check if one with the title already exists\n * 3. If not found, create via `gh project create` CLI (no REST create endpoint)\n * 4. Verify status field has required options (To Do, In Progress, In Review, Done)\n * 5. Cache status field details for later use\n *\n * Returns the project number and node ID.\n */\nexport async function ensureProjectBoard(\n title: string,\n): Promise<GhResult<{ projectNumber: number; projectId: string }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const ownerType = await detectOwnerType(owner, repo);\n\n // List existing projects to check if one with the title already exists\n let existingProject: { id: number; node_id: string; number: number } | null = null;\n\n if (ownerType === 'Organization') {\n const projects = await octokit.rest.projects.listForOrg({ org: owner });\n const match = projects.data.find(p => p.title === title);\n if (match) {\n existingProject = { id: match.id, node_id: match.node_id, number: match.number };\n }\n } else {\n const projects = await octokit.rest.projects.listForUser({ username: owner });\n const match = projects.data.find(p => p.title === title);\n if (match) {\n existingProject = { id: match.id, node_id: match.node_id, number: match.number };\n }\n }\n\n if (existingProject) {\n // Project exists — ensure status field is set up\n await ensureStatusFieldOptions(owner, ownerType, existingProject.number);\n return {\n projectNumber: existingProject.number,\n projectId: existingProject.node_id,\n };\n }\n\n // No matching project found — create one.\n // TODO(v5.1): Replace gh CLI bridge with Octokit REST when a create endpoint is available.\n // The Projects v2 REST API does not have a POST endpoint for creating projects.\n // Using `gh project create` CLI as a compatibility bridge.\n let createOutput: string;\n try {\n createOutput = execFileSync(\n 'gh',\n ['project', 'create', '--owner', '@me', '--title', title, '--format', 'json'],\n { timeout: 30_000, stdio: 'pipe', encoding: 'utf-8' },\n ).trim();\n } catch (e: unknown) {\n const err = e as { stderr?: string; message?: string };\n throw new Error(`Failed to create project board: ${err.stderr || err.message}`);\n }\n\n const created = JSON.parse(createOutput) as { number: number; id: string };\n\n // Ensure status field has the required options\n await ensureStatusFieldOptions(owner, ownerType, created.number);\n\n return {\n projectNumber: created.number,\n projectId: created.id,\n };\n });\n}\n\n/**\n * Ensure the project Status field has all required status options.\n * Caches the field ID and option IDs for later use.\n */\nasync function ensureStatusFieldOptions(\n owner: string,\n ownerType: 'User' | 'Organization',\n projectNumber: number,\n): Promise<void> {\n const octokit = getOctokit();\n\n // List fields for the project\n let fields: Array<{\n id: number;\n name: string;\n data_type: string;\n options?: Array<{ id: string; name: { raw: string } }>;\n }>;\n\n if (ownerType === 'Organization') {\n const response = await octokit.rest.projects.listFieldsForOrg({\n org: owner,\n project_number: projectNumber,\n });\n fields = response.data as typeof fields;\n } else {\n const response = await octokit.rest.projects.listFieldsForUser({\n username: owner,\n project_number: projectNumber,\n });\n fields = response.data as typeof fields;\n }\n\n // Find the Status field (single_select type)\n const statusField = fields.find(\n f => f.name === 'Status' && f.data_type === 'single_select',\n );\n\n if (!statusField) {\n throw new Error(\n 'Status field not found on project board. This is unexpected for a Projects v2 board.',\n );\n }\n\n // Build option map from existing options\n const optionMap = new Map<string, string>();\n if (statusField.options) {\n for (const opt of statusField.options) {\n optionMap.set(opt.name.raw, opt.id);\n }\n }\n\n // GitHub defaults may use \"Todo\" instead of \"To Do\" — normalize\n if (optionMap.has('Todo') && !optionMap.has('To Do')) {\n optionMap.set('To Do', optionMap.get('Todo')!);\n }\n\n // Check if all required status options exist\n const missingOptions = DEFAULT_STATUS_OPTIONS.filter(opt => !optionMap.has(opt));\n\n if (missingOptions.length > 0) {\n // TODO(v5.1): Replace gh CLI bridge with Octokit REST when field update endpoint is available.\n // The Projects v2 REST API does not have a field update endpoint for adding single-select options.\n // Using `gh project field-list` + `gh api graphql` alternative is banned by CONTEXT.md.\n // For now, missing options will be logged as a warning. The default GitHub Projects v2\n // board comes with \"Todo\", \"In Progress\", and \"Done\" — only \"In Review\" may need to be added.\n // Users should add \"In Review\" manually or the addStatusOption bridge below handles it.\n for (const opt of missingOptions) {\n try {\n // Use gh project field-edit to add missing option via CLI bridge\n // TODO(v5.1): Replace with Octokit REST once typed methods available\n execFileSync(\n 'gh',\n [\n 'project', 'field-create', String(projectNumber),\n '--owner', '@me',\n '--name', opt,\n '--data-type', 'TEXT',\n ],\n { timeout: 15_000, stdio: 'pipe', encoding: 'utf-8' },\n );\n } catch {\n // If creating a field for this option fails, just log and continue.\n // The status options may already exist under slightly different names.\n }\n }\n\n // Re-fetch fields to get updated option IDs after any additions\n if (ownerType === 'Organization') {\n const response = await octokit.rest.projects.listFieldsForOrg({\n org: owner,\n project_number: projectNumber,\n });\n const updatedFields = response.data as typeof fields;\n const updatedStatus = updatedFields.find(\n f => f.name === 'Status' && f.data_type === 'single_select',\n );\n if (updatedStatus?.options) {\n optionMap.clear();\n for (const opt of updatedStatus.options) {\n optionMap.set(opt.name.raw, opt.id);\n }\n if (optionMap.has('Todo') && !optionMap.has('To Do')) {\n optionMap.set('To Do', optionMap.get('Todo')!);\n }\n }\n } else {\n const response = await octokit.rest.projects.listFieldsForUser({\n username: owner,\n project_number: projectNumber,\n });\n const updatedFields = response.data as typeof fields;\n const updatedStatus = updatedFields.find(\n f => f.name === 'Status' && f.data_type === 'single_select',\n );\n if (updatedStatus?.options) {\n optionMap.clear();\n for (const opt of updatedStatus.options) {\n optionMap.set(opt.name.raw, opt.id);\n }\n if (optionMap.has('Todo') && !optionMap.has('To Do')) {\n optionMap.set('To Do', optionMap.get('Todo')!);\n }\n }\n }\n }\n\n // Cache the status field info\n _statusFieldCache = {\n fieldId: statusField.id,\n options: optionMap,\n };\n}\n\n// ---- Add Item to Project ---------------------------------------------------\n\n/**\n * Add an issue to the project board.\n *\n * Uses the Projects v2 REST API to add an issue by its number.\n * Detects owner type and calls the appropriate user/org endpoint.\n *\n * @param projectNumber - The project number\n * @param issueNumber - The issue number (NOT node_id) to add to the project\n * @returns The project item ID\n */\nexport async function addItemToProject(\n projectNumber: number,\n issueNumber: number,\n): Promise<GhResult<{ itemId: string }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const ownerType = await detectOwnerType(owner, repo);\n\n let response: { data: { id: number; node_id?: string } };\n\n if (ownerType === 'Organization') {\n response = await octokit.rest.projects.addItemForOrg({\n org: owner,\n project_number: projectNumber,\n type: 'Issue',\n id: issueNumber,\n });\n } else {\n response = await octokit.rest.projects.addItemForUser({\n username: owner,\n project_number: projectNumber,\n type: 'Issue',\n id: issueNumber,\n });\n }\n\n return { itemId: String(response.data.id) };\n });\n}\n\n// ---- Move Item to Status ---------------------------------------------------\n\n/**\n * Update the Status field of a project item to the given column.\n *\n * Maps the status string to the status option ID from the cached field info,\n * or fetches fresh field data if cache is not populated.\n *\n * @param projectNumber - The project number\n * @param itemId - The project item ID (numeric, as string)\n * @param status - The target status column\n */\nexport async function moveItemToStatus(\n projectNumber: number,\n itemId: string,\n status: IssueStatus,\n): Promise<GhResult<void>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const ownerType = await detectOwnerType(owner, repo);\n\n // Ensure we have cached status field info\n if (!_statusFieldCache) {\n await ensureStatusFieldOptions(owner, ownerType, projectNumber);\n }\n\n if (!_statusFieldCache) {\n throw new Error('Failed to load status field information for project board');\n }\n\n const optionId = _statusFieldCache.options.get(status);\n if (!optionId) {\n throw new Error(\n `Status option \"${status}\" not found on project board. Available: ${Array.from(_statusFieldCache.options.keys()).join(', ')}`,\n );\n }\n\n const numericItemId = parseInt(itemId, 10);\n if (Number.isNaN(numericItemId)) {\n throw new Error(`Invalid item ID: ${itemId} — expected numeric value`);\n }\n\n if (ownerType === 'Organization') {\n await octokit.rest.projects.updateItemForOrg({\n org: owner,\n project_number: projectNumber,\n item_id: numericItemId,\n fields: [{ id: _statusFieldCache.fieldId, value: optionId }],\n });\n } else {\n await octokit.rest.projects.updateItemForUser({\n username: owner,\n project_number: projectNumber,\n item_id: numericItemId,\n fields: [{ id: _statusFieldCache.fieldId, value: optionId }],\n });\n }\n });\n}\n\n// ---- Get Project Board Items -----------------------------------------------\n\n/**\n * List all items in the project with their current status.\n *\n * Uses pagination for large projects. Returns each item's ID, associated\n * issue number, and current status column.\n *\n * @param projectNumber - The project number\n */\nexport async function getProjectBoard(\n projectNumber: number,\n): Promise<GhResult<{ items: Array<{ id: string; issueNumber: number; status: IssueStatus }> }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const ownerType = await detectOwnerType(owner, repo);\n\n // Ensure we have cached status field info\n if (!_statusFieldCache) {\n await ensureStatusFieldOptions(owner, ownerType, projectNumber);\n }\n\n // Build a reverse map: option ID -> status name\n const optionIdToStatus = new Map<string, IssueStatus>();\n if (_statusFieldCache) {\n for (const [name, id] of _statusFieldCache.options) {\n if (DEFAULT_STATUS_OPTIONS.includes(name as IssueStatus)) {\n optionIdToStatus.set(id, name as IssueStatus);\n }\n }\n }\n\n // Fetch items with the status field included\n const statusFieldId = _statusFieldCache?.fieldId;\n const fieldParam = statusFieldId ? String(statusFieldId) : undefined;\n\n type ItemResponse = {\n id: number;\n node_id?: string;\n content_type: string;\n content?: { number?: number } | null;\n fields?: Array<{ [key: string]: unknown }> | null;\n };\n\n const allItems: ItemResponse[] = [];\n let hasMore = true;\n let cursor: string | undefined;\n\n while (hasMore) {\n let response: { data: ItemResponse[]; headers: Record<string, string | undefined> };\n\n const params: {\n project_number: number;\n per_page: number;\n after?: string;\n fields?: string;\n } = {\n project_number: projectNumber,\n per_page: 100,\n };\n\n if (cursor) {\n params.after = cursor;\n }\n if (fieldParam) {\n params.fields = fieldParam;\n }\n\n if (ownerType === 'Organization') {\n response = await octokit.rest.projects.listItemsForOrg({\n org: owner,\n ...params,\n }) as typeof response;\n } else {\n response = await octokit.rest.projects.listItemsForUser({\n username: owner,\n ...params,\n }) as typeof response;\n }\n\n allItems.push(...response.data);\n\n // Check for pagination via Link header\n const linkHeader = response.headers.link;\n if (linkHeader && linkHeader.includes('rel=\"next\"')) {\n const afterMatch = linkHeader.match(/after=([^&>]+)/);\n cursor = afterMatch?.[1];\n hasMore = !!cursor;\n } else {\n hasMore = false;\n }\n }\n\n // Map items to output format\n const items = allItems\n .filter(item => item.content_type === 'Issue' && item.content?.number)\n .map(item => {\n // Extract status from fields\n let status: IssueStatus = 'To Do'; // default\n if (item.fields && Array.isArray(item.fields)) {\n for (const field of item.fields) {\n const fieldValue = field.value as string | undefined;\n if (fieldValue && optionIdToStatus.has(fieldValue)) {\n status = optionIdToStatus.get(fieldValue)!;\n break;\n }\n }\n }\n\n return {\n id: String(item.id),\n issueNumber: item.content!.number!,\n status,\n };\n });\n\n return { items };\n });\n}\n\n// ---- Reset cache (for testing) ---------------------------------------------\n\n/**\n * Reset the status field cache.\n * Used in tests to ensure clean state between test runs.\n */\nexport function resetProjectsCache(): void {\n _statusFieldCache = null;\n}\n","/**\n * GitHub Labels — Label creation and verification via Octokit\n *\n * Manages MAXSIM-specific labels (phase, task, blocker) on the GitHub repository.\n * Creates labels if they do not exist, updates them if color/description differ.\n *\n * CRITICAL: All operations use client.ts (Octokit adapter) exclusively.\n * CRITICAL: Never call process.exit() — return GhResult instead.\n */\n\nimport { RequestError } from '@octokit/request-error';\n\nimport type { GhResult } from './types.js';\nimport { MAXSIM_LABELS } from './types.js';\nimport { getOctokit, getRepoInfo, withGhResult } from './client.js';\n\n// ---- Label Management ------------------------------------------------------\n\n/**\n * Ensure all MAXSIM labels exist on the repository.\n *\n * For each label in MAXSIM_LABELS (phase, task, blocker):\n * - Try to fetch the label via `octokit.rest.issues.getLabel`\n * - If 404 (not found), create it via `octokit.rest.issues.createLabel`\n * - If it exists but color/description differ, update it via `octokit.rest.issues.updateLabel`\n *\n * Continues on individual label failures.\n * Only fails if ALL labels fail to create/update.\n */\nexport async function ensureLabels(): Promise<GhResult<void>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n let successCount = 0;\n const errors: string[] = [];\n\n for (const label of MAXSIM_LABELS) {\n try {\n // Try to get existing label\n let exists = false;\n let needsUpdate = false;\n\n try {\n const existing = await octokit.rest.issues.getLabel({\n owner,\n repo,\n name: label.name,\n });\n\n exists = true;\n\n // Check if color or description differ\n const currentColor = existing.data.color?.toLowerCase() ?? '';\n const targetColor = label.color.toLowerCase();\n const currentDesc = existing.data.description ?? '';\n\n if (currentColor !== targetColor || currentDesc !== label.description) {\n needsUpdate = true;\n }\n } catch (e: unknown) {\n if (e instanceof RequestError && e.status === 404) {\n // Label does not exist — will create below\n exists = false;\n } else {\n throw e;\n }\n }\n\n if (!exists) {\n // Create the label\n await octokit.rest.issues.createLabel({\n owner,\n repo,\n name: label.name,\n color: label.color,\n description: label.description,\n });\n } else if (needsUpdate) {\n // Update existing label to match desired color/description\n await octokit.rest.issues.updateLabel({\n owner,\n repo,\n name: label.name,\n color: label.color,\n description: label.description,\n });\n }\n\n successCount++;\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : String(e);\n errors.push(`${label.name}: ${message}`);\n }\n }\n\n // Only fail if ALL labels failed\n if (successCount === 0 && errors.length > 0) {\n throw new Error(`All labels failed to create/update: ${errors.join('; ')}`);\n }\n });\n}\n\n// Re-export MAXSIM_LABELS for convenience\nexport { MAXSIM_LABELS };\n","/**\n * GitHub Milestones — CRUD operations via Octokit\n *\n * Manages GitHub milestones for MAXSIM milestone grouping.\n * One milestone per MAXSIM milestone. Uses Octokit REST API.\n *\n * CRITICAL: All operations use client.ts (Octokit adapter) exclusively.\n * CRITICAL: Never call process.exit() — return GhResult instead.\n */\n\nimport type { GhResult } from './types.js';\nimport { getOctokit, getRepoInfo, withGhResult } from './client.js';\n\n// ---- Milestone CRUD --------------------------------------------------------\n\n/**\n * Ensure a milestone exists with the given title, creating it if needed.\n *\n * 1. List existing milestones (state: 'all' to include closed ones)\n * 2. If one with matching title exists, return its number\n * 3. If not, create a new milestone\n *\n * Returns the milestone number.\n */\nexport async function ensureMilestone(\n title: string,\n description?: string,\n): Promise<GhResult<{ number: number }>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n // List all milestones (open and closed) to find a match\n const milestones = await octokit.rest.issues.listMilestones({\n owner,\n repo,\n state: 'all',\n per_page: 100,\n });\n\n const match = milestones.data.find(m => m.title === title);\n\n if (match) {\n return { number: match.number };\n }\n\n // No match found — create a new milestone\n const created = await octokit.rest.issues.createMilestone({\n owner,\n repo,\n title,\n description: description ?? undefined,\n });\n\n return { number: created.data.number };\n });\n}\n\n/**\n * Close a milestone.\n *\n * Updates the milestone state to 'closed'.\n */\nexport async function closeMilestone(\n milestoneNumber: number,\n): Promise<GhResult<void>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n await octokit.rest.issues.updateMilestone({\n owner,\n repo,\n milestone_number: milestoneNumber,\n state: 'closed',\n });\n });\n}\n","/**\n * GitHub Issue Templates — Template file generation\n *\n * Installs GitHub Issue Form YAML templates into `.github/ISSUE_TEMPLATE/`\n * for the MAXSIM-managed issue types: phase tasks.\n *\n * These are file-system operations only (no gh CLI needed).\n * Uses synchronous fs to match existing core module patterns.\n *\n * CRITICAL: Never call process.exit().\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n// ---- Template Content ------------------------------------------------------\n\n/**\n * Phase task issue template (GitHub Issue Forms YAML format).\n *\n * Used for issues created from MAXSIM phase plans.\n * Labels: phase, task\n */\nconst PHASE_TASK_TEMPLATE = `name: \"MAXSIM Phase Task\"\ndescription: \"Task generated by MAXSIM phase planning\"\nlabels: [\"phase\", \"task\"]\nbody:\n - type: markdown\n attributes:\n value: |\n This issue was auto-generated by MAXSIM.\n\n - type: textarea\n id: summary\n attributes:\n label: Summary\n description: Task summary\n validations:\n required: true\n\n - type: textarea\n id: spec\n attributes:\n label: Full Specification\n description: Detailed task specification including actions, criteria, and dependencies\n`;\n\n// ---- Installation ----------------------------------------------------------\n\n/**\n * Install MAXSIM issue templates into the project's `.github/ISSUE_TEMPLATE/` directory.\n *\n * Creates the directory recursively if it does not exist.\n * Writes one YAML file:\n * - phase-task.yml (for phase plan tasks)\n *\n * Overwrites existing templates if present (to ensure latest version).\n * This is a synchronous file write operation (no gh CLI needed).\n */\nexport function installIssueTemplates(cwd: string): void {\n const templateDir = path.join(cwd, '.github', 'ISSUE_TEMPLATE');\n\n // Create directory recursively if it doesn't exist\n fs.mkdirSync(templateDir, { recursive: true });\n\n // Write phase task template\n fs.writeFileSync(\n path.join(templateDir, 'phase-task.yml'),\n PHASE_TASK_TEMPLATE,\n 'utf-8',\n );\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = require(\"fs\");\nconst debug_1 = __importDefault(require(\"debug\"));\nconst log = debug_1.default('@kwsites/file-exists');\nfunction check(path, isFile, isDirectory) {\n log(`checking %s`, path);\n try {\n const stat = fs_1.statSync(path);\n if (stat.isFile() && isFile) {\n log(`[OK] path represents a file`);\n return true;\n }\n if (stat.isDirectory() && isDirectory) {\n log(`[OK] path represents a directory`);\n return true;\n }\n log(`[FAIL] path represents something other than a file or directory`);\n return false;\n }\n catch (e) {\n if (e.code === 'ENOENT') {\n log(`[FAIL] path is not accessible: %o`, e);\n return false;\n }\n log(`[FATAL] %o`, e);\n throw e;\n }\n}\n/**\n * Synchronous validation of a path existing either as a file or as a directory.\n *\n * @param {string} path The path to check\n * @param {number} type One or both of the exported numeric constants\n */\nfunction exists(path, type = exports.READABLE) {\n return check(path, (type & exports.FILE) > 0, (type & exports.FOLDER) > 0);\n}\nexports.exists = exists;\n/**\n * Constant representing a file\n */\nexports.FILE = 1;\n/**\n * Constant representing a folder\n */\nexports.FOLDER = 2;\n/**\n * Constant representing either a file or a folder\n */\nexports.READABLE = exports.FILE + exports.FOLDER;\n//# sourceMappingURL=index.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./src\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDeferred = exports.deferred = void 0;\n/**\n * Creates a new `DeferredPromise`\n *\n * ```typescript\n import {deferred} from '@kwsites/promise-deferred`;\n ```\n */\nfunction deferred() {\n let done;\n let fail;\n let status = 'pending';\n const promise = new Promise((_done, _fail) => {\n done = _done;\n fail = _fail;\n });\n return {\n promise,\n done(result) {\n if (status === 'pending') {\n status = 'resolved';\n done(result);\n }\n },\n fail(error) {\n if (status === 'pending') {\n status = 'rejected';\n fail(error);\n }\n },\n get fulfilled() {\n return status !== 'pending';\n },\n get status() {\n return status;\n },\n };\n}\nexports.deferred = deferred;\n/**\n * Alias of the exported `deferred` function, to help consumers wanting to use `deferred` as the\n * local variable name rather than the factory import name, without needing to rename on import.\n *\n * ```typescript\n import {createDeferred} from '@kwsites/promise-deferred`;\n ```\n */\nexports.createDeferred = deferred;\n/**\n * Default export allows use as:\n *\n * ```typescript\n import deferred from '@kwsites/promise-deferred`;\n ```\n */\nexports.default = deferred;\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/lib/args/pathspec.ts\nfunction pathspec(...paths) {\n const key = new String(paths);\n cache.set(key, paths);\n return key;\n}\nfunction isPathSpec(path) {\n return path instanceof String && cache.has(path);\n}\nfunction toPaths(pathSpec) {\n return cache.get(pathSpec) || [];\n}\nvar cache;\nvar init_pathspec = __esm({\n \"src/lib/args/pathspec.ts\"() {\n \"use strict\";\n cache = /* @__PURE__ */ new WeakMap();\n }\n});\n\n// src/lib/errors/git-error.ts\nvar GitError;\nvar init_git_error = __esm({\n \"src/lib/errors/git-error.ts\"() {\n \"use strict\";\n GitError = class extends Error {\n constructor(task, message) {\n super(message);\n this.task = task;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n };\n }\n});\n\n// src/lib/errors/git-response-error.ts\nvar GitResponseError;\nvar init_git_response_error = __esm({\n \"src/lib/errors/git-response-error.ts\"() {\n \"use strict\";\n init_git_error();\n GitResponseError = class extends GitError {\n constructor(git, message) {\n super(void 0, message || String(git));\n this.git = git;\n }\n };\n }\n});\n\n// src/lib/errors/task-configuration-error.ts\nvar TaskConfigurationError;\nvar init_task_configuration_error = __esm({\n \"src/lib/errors/task-configuration-error.ts\"() {\n \"use strict\";\n init_git_error();\n TaskConfigurationError = class extends GitError {\n constructor(message) {\n super(void 0, message);\n }\n };\n }\n});\n\n// src/lib/utils/util.ts\nimport { Buffer as Buffer2 } from \"node:buffer\";\nimport { exists, FOLDER } from \"@kwsites/file-exists\";\nfunction asFunction(source) {\n if (typeof source !== \"function\") {\n return NOOP;\n }\n return source;\n}\nfunction isUserFunction(source) {\n return typeof source === \"function\" && source !== NOOP;\n}\nfunction splitOn(input, char) {\n const index = input.indexOf(char);\n if (index <= 0) {\n return [input, \"\"];\n }\n return [input.substr(0, index), input.substr(index + 1)];\n}\nfunction first(input, offset = 0) {\n return isArrayLike(input) && input.length > offset ? input[offset] : void 0;\n}\nfunction last(input, offset = 0) {\n if (isArrayLike(input) && input.length > offset) {\n return input[input.length - 1 - offset];\n }\n}\nfunction isArrayLike(input) {\n return filterHasLength(input);\n}\nfunction toLinesWithContent(input = \"\", trimmed2 = true, separator = \"\\n\") {\n return input.split(separator).reduce((output, line) => {\n const lineContent = trimmed2 ? line.trim() : line;\n if (lineContent) {\n output.push(lineContent);\n }\n return output;\n }, []);\n}\nfunction forEachLineWithContent(input, callback) {\n return toLinesWithContent(input, true).map((line) => callback(line));\n}\nfunction folderExists(path) {\n return exists(path, FOLDER);\n}\nfunction append(target, item) {\n if (Array.isArray(target)) {\n if (!target.includes(item)) {\n target.push(item);\n }\n } else {\n target.add(item);\n }\n return item;\n}\nfunction including(target, item) {\n if (Array.isArray(target) && !target.includes(item)) {\n target.push(item);\n }\n return target;\n}\nfunction remove(target, item) {\n if (Array.isArray(target)) {\n const index = target.indexOf(item);\n if (index >= 0) {\n target.splice(index, 1);\n }\n } else {\n target.delete(item);\n }\n return item;\n}\nfunction asArray(source) {\n return Array.isArray(source) ? source : [source];\n}\nfunction asCamelCase(str) {\n return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n return chr.toUpperCase();\n });\n}\nfunction asStringArray(source) {\n return asArray(source).map((item) => {\n return item instanceof String ? item : String(item);\n });\n}\nfunction asNumber(source, onNaN = 0) {\n if (source == null) {\n return onNaN;\n }\n const num = parseInt(source, 10);\n return Number.isNaN(num) ? onNaN : num;\n}\nfunction prefixedArray(input, prefix) {\n const output = [];\n for (let i = 0, max = input.length; i < max; i++) {\n output.push(prefix, input[i]);\n }\n return output;\n}\nfunction bufferToString(input) {\n return (Array.isArray(input) ? Buffer2.concat(input) : input).toString(\"utf-8\");\n}\nfunction pick(source, properties) {\n const out = {};\n properties.forEach((key) => {\n if (source[key] !== void 0) {\n out[key] = source[key];\n }\n });\n return out;\n}\nfunction delay(duration = 0) {\n return new Promise((done) => setTimeout(done, duration));\n}\nfunction orVoid(input) {\n if (input === false) {\n return void 0;\n }\n return input;\n}\nvar NULL, NOOP, objectToString;\nvar init_util = __esm({\n \"src/lib/utils/util.ts\"() {\n \"use strict\";\n init_argument_filters();\n NULL = \"\\0\";\n NOOP = () => {\n };\n objectToString = Object.prototype.toString.call.bind(Object.prototype.toString);\n }\n});\n\n// src/lib/utils/argument-filters.ts\nfunction filterType(input, filter, def) {\n if (filter(input)) {\n return input;\n }\n return arguments.length > 2 ? def : void 0;\n}\nfunction filterPrimitives(input, omit) {\n const type = isPathSpec(input) ? \"string\" : typeof input;\n return /number|string|boolean/.test(type) && (!omit || !omit.includes(type));\n}\nfunction filterPlainObject(input) {\n return !!input && objectToString(input) === \"[object Object]\";\n}\nfunction filterFunction(input) {\n return typeof input === \"function\";\n}\nvar filterArray, filterNumber, filterString, filterStringOrStringArray, filterHasLength;\nvar init_argument_filters = __esm({\n \"src/lib/utils/argument-filters.ts\"() {\n \"use strict\";\n init_pathspec();\n init_util();\n filterArray = (input) => {\n return Array.isArray(input);\n };\n filterNumber = (input) => {\n return typeof input === \"number\";\n };\n filterString = (input) => {\n return typeof input === \"string\";\n };\n filterStringOrStringArray = (input) => {\n return filterString(input) || Array.isArray(input) && input.every(filterString);\n };\n filterHasLength = (input) => {\n if (input == null || \"number|boolean|function\".includes(typeof input)) {\n return false;\n }\n return typeof input.length === \"number\";\n };\n }\n});\n\n// src/lib/utils/exit-codes.ts\nvar ExitCodes;\nvar init_exit_codes = __esm({\n \"src/lib/utils/exit-codes.ts\"() {\n \"use strict\";\n ExitCodes = /* @__PURE__ */ ((ExitCodes2) => {\n ExitCodes2[ExitCodes2[\"SUCCESS\"] = 0] = \"SUCCESS\";\n ExitCodes2[ExitCodes2[\"ERROR\"] = 1] = \"ERROR\";\n ExitCodes2[ExitCodes2[\"NOT_FOUND\"] = -2] = \"NOT_FOUND\";\n ExitCodes2[ExitCodes2[\"UNCLEAN\"] = 128] = \"UNCLEAN\";\n return ExitCodes2;\n })(ExitCodes || {});\n }\n});\n\n// src/lib/utils/git-output-streams.ts\nvar GitOutputStreams;\nvar init_git_output_streams = __esm({\n \"src/lib/utils/git-output-streams.ts\"() {\n \"use strict\";\n GitOutputStreams = class _GitOutputStreams {\n constructor(stdOut, stdErr) {\n this.stdOut = stdOut;\n this.stdErr = stdErr;\n }\n asStrings() {\n return new _GitOutputStreams(this.stdOut.toString(\"utf8\"), this.stdErr.toString(\"utf8\"));\n }\n };\n }\n});\n\n// src/lib/utils/line-parser.ts\nfunction useMatchesDefault() {\n throw new Error(`LineParser:useMatches not implemented`);\n}\nvar LineParser, RemoteLineParser;\nvar init_line_parser = __esm({\n \"src/lib/utils/line-parser.ts\"() {\n \"use strict\";\n LineParser = class {\n constructor(regExp, useMatches) {\n this.matches = [];\n this.useMatches = useMatchesDefault;\n this.parse = (line, target) => {\n this.resetMatches();\n if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n return false;\n }\n return this.useMatches(target, this.prepareMatches()) !== false;\n };\n this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n if (useMatches) {\n this.useMatches = useMatches;\n }\n }\n resetMatches() {\n this.matches.length = 0;\n }\n prepareMatches() {\n return this.matches;\n }\n addMatch(reg, index, line) {\n const matched = line && reg.exec(line);\n if (matched) {\n this.pushMatch(index, matched);\n }\n return !!matched;\n }\n pushMatch(_index, matched) {\n this.matches.push(...matched.slice(1));\n }\n };\n RemoteLineParser = class extends LineParser {\n addMatch(reg, index, line) {\n return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n }\n pushMatch(index, matched) {\n if (index > 0 || matched.length > 1) {\n super.pushMatch(index, matched);\n }\n }\n };\n }\n});\n\n// src/lib/utils/simple-git-options.ts\nfunction createInstanceConfig(...options) {\n const baseDir = process.cwd();\n const config = Object.assign(\n { baseDir, ...defaultOptions },\n ...options.filter((o) => typeof o === \"object\" && o)\n );\n config.baseDir = config.baseDir || baseDir;\n config.trimmed = config.trimmed === true;\n return config;\n}\nvar defaultOptions;\nvar init_simple_git_options = __esm({\n \"src/lib/utils/simple-git-options.ts\"() {\n \"use strict\";\n defaultOptions = {\n binary: \"git\",\n maxConcurrentProcesses: 5,\n config: [],\n trimmed: false\n };\n }\n});\n\n// src/lib/utils/task-options.ts\nfunction appendTaskOptions(options, commands = []) {\n if (!filterPlainObject(options)) {\n return commands;\n }\n return Object.keys(options).reduce((commands2, key) => {\n const value = options[key];\n if (isPathSpec(value)) {\n commands2.push(value);\n } else if (filterPrimitives(value, [\"boolean\"])) {\n commands2.push(key + \"=\" + value);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n if (!filterPrimitives(v, [\"string\", \"number\"])) {\n commands2.push(key + \"=\" + v);\n }\n }\n } else {\n commands2.push(key);\n }\n return commands2;\n }, commands);\n}\nfunction getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) {\n const command = [];\n for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n if (\"string|number\".includes(typeof args[i])) {\n command.push(String(args[i]));\n }\n }\n appendTaskOptions(trailingOptionsArgument(args), command);\n if (!objectOnly) {\n command.push(...trailingArrayArgument(args));\n }\n return command;\n}\nfunction trailingArrayArgument(args) {\n const hasTrailingCallback = typeof last(args) === \"function\";\n return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\nfunction trailingOptionsArgument(args) {\n const hasTrailingCallback = filterFunction(last(args));\n return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\nfunction trailingFunctionArgument(args, includeNoop = true) {\n const callback = asFunction(last(args));\n return includeNoop || isUserFunction(callback) ? callback : void 0;\n}\nvar init_task_options = __esm({\n \"src/lib/utils/task-options.ts\"() {\n \"use strict\";\n init_argument_filters();\n init_util();\n init_pathspec();\n }\n});\n\n// src/lib/utils/task-parser.ts\nfunction callTaskParser(parser4, streams) {\n return parser4(streams.stdOut, streams.stdErr);\n}\nfunction parseStringResponse(result, parsers12, texts, trim = true) {\n asArray(texts).forEach((text) => {\n for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n const line = (offset = 0) => {\n if (i + offset >= max) {\n return;\n }\n return lines[i + offset];\n };\n parsers12.some(({ parse }) => parse(line, result));\n }\n });\n return result;\n}\nvar init_task_parser = __esm({\n \"src/lib/utils/task-parser.ts\"() {\n \"use strict\";\n init_util();\n }\n});\n\n// src/lib/utils/index.ts\nvar utils_exports = {};\n__export(utils_exports, {\n ExitCodes: () => ExitCodes,\n GitOutputStreams: () => GitOutputStreams,\n LineParser: () => LineParser,\n NOOP: () => NOOP,\n NULL: () => NULL,\n RemoteLineParser: () => RemoteLineParser,\n append: () => append,\n appendTaskOptions: () => appendTaskOptions,\n asArray: () => asArray,\n asCamelCase: () => asCamelCase,\n asFunction: () => asFunction,\n asNumber: () => asNumber,\n asStringArray: () => asStringArray,\n bufferToString: () => bufferToString,\n callTaskParser: () => callTaskParser,\n createInstanceConfig: () => createInstanceConfig,\n delay: () => delay,\n filterArray: () => filterArray,\n filterFunction: () => filterFunction,\n filterHasLength: () => filterHasLength,\n filterNumber: () => filterNumber,\n filterPlainObject: () => filterPlainObject,\n filterPrimitives: () => filterPrimitives,\n filterString: () => filterString,\n filterStringOrStringArray: () => filterStringOrStringArray,\n filterType: () => filterType,\n first: () => first,\n folderExists: () => folderExists,\n forEachLineWithContent: () => forEachLineWithContent,\n getTrailingOptions: () => getTrailingOptions,\n including: () => including,\n isUserFunction: () => isUserFunction,\n last: () => last,\n objectToString: () => objectToString,\n orVoid: () => orVoid,\n parseStringResponse: () => parseStringResponse,\n pick: () => pick,\n prefixedArray: () => prefixedArray,\n remove: () => remove,\n splitOn: () => splitOn,\n toLinesWithContent: () => toLinesWithContent,\n trailingFunctionArgument: () => trailingFunctionArgument,\n trailingOptionsArgument: () => trailingOptionsArgument\n});\nvar init_utils = __esm({\n \"src/lib/utils/index.ts\"() {\n \"use strict\";\n init_argument_filters();\n init_exit_codes();\n init_git_output_streams();\n init_line_parser();\n init_simple_git_options();\n init_task_options();\n init_task_parser();\n init_util();\n }\n});\n\n// src/lib/tasks/check-is-repo.ts\nvar check_is_repo_exports = {};\n__export(check_is_repo_exports, {\n CheckRepoActions: () => CheckRepoActions,\n checkIsBareRepoTask: () => checkIsBareRepoTask,\n checkIsRepoRootTask: () => checkIsRepoRootTask,\n checkIsRepoTask: () => checkIsRepoTask\n});\nfunction checkIsRepoTask(action) {\n switch (action) {\n case \"bare\" /* BARE */:\n return checkIsBareRepoTask();\n case \"root\" /* IS_REPO_ROOT */:\n return checkIsRepoRootTask();\n }\n const commands = [\"rev-parse\", \"--is-inside-work-tree\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser\n };\n}\nfunction checkIsRepoRootTask() {\n const commands = [\"rev-parse\", \"--git-dir\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser(path) {\n return /^\\.(git)?$/.test(path.trim());\n }\n };\n}\nfunction checkIsBareRepoTask() {\n const commands = [\"rev-parse\", \"--is-bare-repository\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser\n };\n}\nfunction isNotRepoMessage(error) {\n return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\nvar CheckRepoActions, onError, parser;\nvar init_check_is_repo = __esm({\n \"src/lib/tasks/check-is-repo.ts\"() {\n \"use strict\";\n init_utils();\n CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => {\n CheckRepoActions2[\"BARE\"] = \"bare\";\n CheckRepoActions2[\"IN_TREE\"] = \"tree\";\n CheckRepoActions2[\"IS_REPO_ROOT\"] = \"root\";\n return CheckRepoActions2;\n })(CheckRepoActions || {});\n onError = ({ exitCode }, error, done, fail) => {\n if (exitCode === 128 /* UNCLEAN */ && isNotRepoMessage(error)) {\n return done(Buffer.from(\"false\"));\n }\n fail(error);\n };\n parser = (text) => {\n return text.trim() === \"true\";\n };\n }\n});\n\n// src/lib/responses/CleanSummary.ts\nfunction cleanSummaryParser(dryRun, text) {\n const summary = new CleanResponse(dryRun);\n const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n toLinesWithContent(text).forEach((line) => {\n const removed = line.replace(regexp, \"\");\n summary.paths.push(removed);\n (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n });\n return summary;\n}\nvar CleanResponse, removalRegexp, dryRunRemovalRegexp, isFolderRegexp;\nvar init_CleanSummary = __esm({\n \"src/lib/responses/CleanSummary.ts\"() {\n \"use strict\";\n init_utils();\n CleanResponse = class {\n constructor(dryRun) {\n this.dryRun = dryRun;\n this.paths = [];\n this.files = [];\n this.folders = [];\n }\n };\n removalRegexp = /^[a-z]+\\s*/i;\n dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\n isFolderRegexp = /\\/$/;\n }\n});\n\n// src/lib/tasks/task.ts\nvar task_exports = {};\n__export(task_exports, {\n EMPTY_COMMANDS: () => EMPTY_COMMANDS,\n adhocExecTask: () => adhocExecTask,\n configurationErrorTask: () => configurationErrorTask,\n isBufferTask: () => isBufferTask,\n isEmptyTask: () => isEmptyTask,\n straightThroughBufferTask: () => straightThroughBufferTask,\n straightThroughStringTask: () => straightThroughStringTask\n});\nfunction adhocExecTask(parser4) {\n return {\n commands: EMPTY_COMMANDS,\n format: \"empty\",\n parser: parser4\n };\n}\nfunction configurationErrorTask(error) {\n return {\n commands: EMPTY_COMMANDS,\n format: \"empty\",\n parser() {\n throw typeof error === \"string\" ? new TaskConfigurationError(error) : error;\n }\n };\n}\nfunction straightThroughStringTask(commands, trimmed2 = false) {\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return trimmed2 ? String(text).trim() : text;\n }\n };\n}\nfunction straightThroughBufferTask(commands) {\n return {\n commands,\n format: \"buffer\",\n parser(buffer) {\n return buffer;\n }\n };\n}\nfunction isBufferTask(task) {\n return task.format === \"buffer\";\n}\nfunction isEmptyTask(task) {\n return task.format === \"empty\" || !task.commands.length;\n}\nvar EMPTY_COMMANDS;\nvar init_task = __esm({\n \"src/lib/tasks/task.ts\"() {\n \"use strict\";\n init_task_configuration_error();\n EMPTY_COMMANDS = [];\n }\n});\n\n// src/lib/tasks/clean.ts\nvar clean_exports = {};\n__export(clean_exports, {\n CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE,\n CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED,\n CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION,\n CleanOptions: () => CleanOptions,\n cleanTask: () => cleanTask,\n cleanWithOptionsTask: () => cleanWithOptionsTask,\n isCleanOptionsArray: () => isCleanOptionsArray\n});\nfunction cleanWithOptionsTask(mode, customArgs) {\n const { cleanMode, options, valid } = getCleanOptions(mode);\n if (!cleanMode) {\n return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n }\n if (!valid.options) {\n return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n }\n options.push(...customArgs);\n if (options.some(isInteractiveMode)) {\n return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n }\n return cleanTask(cleanMode, options);\n}\nfunction cleanTask(mode, customArgs) {\n const commands = [\"clean\", `-${mode}`, ...customArgs];\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return cleanSummaryParser(mode === \"n\" /* DRY_RUN */, text);\n }\n };\n}\nfunction isCleanOptionsArray(input) {\n return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\nfunction getCleanOptions(input) {\n let cleanMode;\n let options = [];\n let valid = { cleanMode: false, options: true };\n input.replace(/[^a-z]i/g, \"\").split(\"\").forEach((char) => {\n if (isCleanMode(char)) {\n cleanMode = char;\n valid.cleanMode = true;\n } else {\n valid.options = valid.options && isKnownOption(options[options.length] = `-${char}`);\n }\n });\n return {\n cleanMode,\n options,\n valid\n };\n}\nfunction isCleanMode(cleanMode) {\n return cleanMode === \"f\" /* FORCE */ || cleanMode === \"n\" /* DRY_RUN */;\n}\nfunction isKnownOption(option) {\n return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\nfunction isInteractiveMode(option) {\n if (/^-[^\\-]/.test(option)) {\n return option.indexOf(\"i\") > 0;\n }\n return option === \"--interactive\";\n}\nvar CONFIG_ERROR_INTERACTIVE_MODE, CONFIG_ERROR_MODE_REQUIRED, CONFIG_ERROR_UNKNOWN_OPTION, CleanOptions, CleanOptionValues;\nvar init_clean = __esm({\n \"src/lib/tasks/clean.ts\"() {\n \"use strict\";\n init_CleanSummary();\n init_utils();\n init_task();\n CONFIG_ERROR_INTERACTIVE_MODE = \"Git clean interactive mode is not supported\";\n CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\n CONFIG_ERROR_UNKNOWN_OPTION = \"Git clean unknown option found in: \";\n CleanOptions = /* @__PURE__ */ ((CleanOptions2) => {\n CleanOptions2[\"DRY_RUN\"] = \"n\";\n CleanOptions2[\"FORCE\"] = \"f\";\n CleanOptions2[\"IGNORED_INCLUDED\"] = \"x\";\n CleanOptions2[\"IGNORED_ONLY\"] = \"X\";\n CleanOptions2[\"EXCLUDING\"] = \"e\";\n CleanOptions2[\"QUIET\"] = \"q\";\n CleanOptions2[\"RECURSIVE\"] = \"d\";\n return CleanOptions2;\n })(CleanOptions || {});\n CleanOptionValues = /* @__PURE__ */ new Set([\n \"i\",\n ...asStringArray(Object.values(CleanOptions))\n ]);\n }\n});\n\n// src/lib/responses/ConfigList.ts\nfunction configListParser(text) {\n const config = new ConfigList();\n for (const item of configParser(text)) {\n config.addValue(item.file, String(item.key), item.value);\n }\n return config;\n}\nfunction configGetParser(text, key) {\n let value = null;\n const values = [];\n const scopes = /* @__PURE__ */ new Map();\n for (const item of configParser(text, key)) {\n if (item.key !== key) {\n continue;\n }\n values.push(value = item.value);\n if (!scopes.has(item.file)) {\n scopes.set(item.file, []);\n }\n scopes.get(item.file).push(value);\n }\n return {\n key,\n paths: Array.from(scopes.keys()),\n scopes,\n value,\n values\n };\n}\nfunction configFilePath(filePath) {\n return filePath.replace(/^(file):/, \"\");\n}\nfunction* configParser(text, requestedKey = null) {\n const lines = text.split(\"\\0\");\n for (let i = 0, max = lines.length - 1; i < max; ) {\n const file = configFilePath(lines[i++]);\n let value = lines[i++];\n let key = requestedKey;\n if (value.includes(\"\\n\")) {\n const line = splitOn(value, \"\\n\");\n key = line[0];\n value = line[1];\n }\n yield { file, key, value };\n }\n}\nvar ConfigList;\nvar init_ConfigList = __esm({\n \"src/lib/responses/ConfigList.ts\"() {\n \"use strict\";\n init_utils();\n ConfigList = class {\n constructor() {\n this.files = [];\n this.values = /* @__PURE__ */ Object.create(null);\n }\n get all() {\n if (!this._all) {\n this._all = this.files.reduce((all, file) => {\n return Object.assign(all, this.values[file]);\n }, {});\n }\n return this._all;\n }\n addFile(file) {\n if (!(file in this.values)) {\n const latest = last(this.files);\n this.values[file] = latest ? Object.create(this.values[latest]) : {};\n this.files.push(file);\n }\n return this.values[file];\n }\n addValue(file, key, value) {\n const values = this.addFile(file);\n if (!Object.hasOwn(values, key)) {\n values[key] = value;\n } else if (Array.isArray(values[key])) {\n values[key].push(value);\n } else {\n values[key] = [values[key], value];\n }\n this._all = void 0;\n }\n };\n }\n});\n\n// src/lib/tasks/config.ts\nfunction asConfigScope(scope, fallback) {\n if (typeof scope === \"string\" && Object.hasOwn(GitConfigScope, scope)) {\n return scope;\n }\n return fallback;\n}\nfunction addConfigTask(key, value, append2, scope) {\n const commands = [\"config\", `--${scope}`];\n if (append2) {\n commands.push(\"--add\");\n }\n commands.push(key, value);\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return text;\n }\n };\n}\nfunction getConfigTask(key, scope) {\n const commands = [\"config\", \"--null\", \"--show-origin\", \"--get-all\", key];\n if (scope) {\n commands.splice(1, 0, `--${scope}`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return configGetParser(text, key);\n }\n };\n}\nfunction listConfigTask(scope) {\n const commands = [\"config\", \"--list\", \"--show-origin\", \"--null\"];\n if (scope) {\n commands.push(`--${scope}`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return configListParser(text);\n }\n };\n}\nfunction config_default() {\n return {\n addConfig(key, value, ...rest) {\n return this._runTask(\n addConfigTask(\n key,\n value,\n rest[0] === true,\n asConfigScope(rest[1], \"local\" /* local */)\n ),\n trailingFunctionArgument(arguments)\n );\n },\n getConfig(key, scope) {\n return this._runTask(\n getConfigTask(key, asConfigScope(scope, void 0)),\n trailingFunctionArgument(arguments)\n );\n },\n listConfig(...rest) {\n return this._runTask(\n listConfigTask(asConfigScope(rest[0], void 0)),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar GitConfigScope;\nvar init_config = __esm({\n \"src/lib/tasks/config.ts\"() {\n \"use strict\";\n init_ConfigList();\n init_utils();\n GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => {\n GitConfigScope2[\"system\"] = \"system\";\n GitConfigScope2[\"global\"] = \"global\";\n GitConfigScope2[\"local\"] = \"local\";\n GitConfigScope2[\"worktree\"] = \"worktree\";\n return GitConfigScope2;\n })(GitConfigScope || {});\n }\n});\n\n// src/lib/tasks/diff-name-status.ts\nfunction isDiffNameStatus(input) {\n return diffNameStatus.has(input);\n}\nvar DiffNameStatus, diffNameStatus;\nvar init_diff_name_status = __esm({\n \"src/lib/tasks/diff-name-status.ts\"() {\n \"use strict\";\n DiffNameStatus = /* @__PURE__ */ ((DiffNameStatus2) => {\n DiffNameStatus2[\"ADDED\"] = \"A\";\n DiffNameStatus2[\"COPIED\"] = \"C\";\n DiffNameStatus2[\"DELETED\"] = \"D\";\n DiffNameStatus2[\"MODIFIED\"] = \"M\";\n DiffNameStatus2[\"RENAMED\"] = \"R\";\n DiffNameStatus2[\"CHANGED\"] = \"T\";\n DiffNameStatus2[\"UNMERGED\"] = \"U\";\n DiffNameStatus2[\"UNKNOWN\"] = \"X\";\n DiffNameStatus2[\"BROKEN\"] = \"B\";\n return DiffNameStatus2;\n })(DiffNameStatus || {});\n diffNameStatus = new Set(Object.values(DiffNameStatus));\n }\n});\n\n// src/lib/tasks/grep.ts\nfunction grepQueryBuilder(...params) {\n return new GrepQuery().param(...params);\n}\nfunction parseGrep(grep) {\n const paths = /* @__PURE__ */ new Set();\n const results = {};\n forEachLineWithContent(grep, (input) => {\n const [path, line, preview] = input.split(NULL);\n paths.add(path);\n (results[path] = results[path] || []).push({\n line: asNumber(line),\n path,\n preview\n });\n });\n return {\n paths,\n results\n };\n}\nfunction grep_default() {\n return {\n grep(searchTerm) {\n const then = trailingFunctionArgument(arguments);\n const options = getTrailingOptions(arguments);\n for (const option of disallowedOptions) {\n if (options.includes(option)) {\n return this._runTask(\n configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n then\n );\n }\n }\n if (typeof searchTerm === \"string\") {\n searchTerm = grepQueryBuilder().param(searchTerm);\n }\n const commands = [\"grep\", \"--null\", \"-n\", \"--full-name\", ...options, ...searchTerm];\n return this._runTask(\n {\n commands,\n format: \"utf-8\",\n parser(stdOut) {\n return parseGrep(stdOut);\n }\n },\n then\n );\n }\n };\n}\nvar disallowedOptions, Query, _a, GrepQuery;\nvar init_grep = __esm({\n \"src/lib/tasks/grep.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n disallowedOptions = [\"-h\"];\n Query = Symbol(\"grepQuery\");\n GrepQuery = class {\n constructor() {\n this[_a] = [];\n }\n *[(_a = Query, Symbol.iterator)]() {\n for (const query of this[Query]) {\n yield query;\n }\n }\n and(...and) {\n and.length && this[Query].push(\"--and\", \"(\", ...prefixedArray(and, \"-e\"), \")\");\n return this;\n }\n param(...param) {\n this[Query].push(...prefixedArray(param, \"-e\"));\n return this;\n }\n };\n }\n});\n\n// src/lib/tasks/reset.ts\nvar reset_exports = {};\n__export(reset_exports, {\n ResetMode: () => ResetMode,\n getResetMode: () => getResetMode,\n resetTask: () => resetTask\n});\nfunction resetTask(mode, customArgs) {\n const commands = [\"reset\"];\n if (isValidResetMode(mode)) {\n commands.push(`--${mode}`);\n }\n commands.push(...customArgs);\n return straightThroughStringTask(commands);\n}\nfunction getResetMode(mode) {\n if (isValidResetMode(mode)) {\n return mode;\n }\n switch (typeof mode) {\n case \"string\":\n case \"undefined\":\n return \"soft\" /* SOFT */;\n }\n return;\n}\nfunction isValidResetMode(mode) {\n return typeof mode === \"string\" && validResetModes.includes(mode);\n}\nvar ResetMode, validResetModes;\nvar init_reset = __esm({\n \"src/lib/tasks/reset.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n ResetMode = /* @__PURE__ */ ((ResetMode2) => {\n ResetMode2[\"MIXED\"] = \"mixed\";\n ResetMode2[\"SOFT\"] = \"soft\";\n ResetMode2[\"HARD\"] = \"hard\";\n ResetMode2[\"MERGE\"] = \"merge\";\n ResetMode2[\"KEEP\"] = \"keep\";\n return ResetMode2;\n })(ResetMode || {});\n validResetModes = asStringArray(Object.values(ResetMode));\n }\n});\n\n// src/lib/git-logger.ts\nimport debug from \"debug\";\nfunction createLog() {\n return debug(\"simple-git\");\n}\nfunction prefixedLogger(to, prefix, forward) {\n if (!prefix || !String(prefix).replace(/\\s*/, \"\")) {\n return !forward ? to : (message, ...args) => {\n to(message, ...args);\n forward(message, ...args);\n };\n }\n return (message, ...args) => {\n to(`%s ${message}`, prefix, ...args);\n if (forward) {\n forward(message, ...args);\n }\n };\n}\nfunction childLoggerName(name, childDebugger, { namespace: parentNamespace }) {\n if (typeof name === \"string\") {\n return name;\n }\n const childNamespace = childDebugger && childDebugger.namespace || \"\";\n if (childNamespace.startsWith(parentNamespace)) {\n return childNamespace.substr(parentNamespace.length + 1);\n }\n return childNamespace || parentNamespace;\n}\nfunction createLogger(label, verbose, initialStep, infoDebugger = createLog()) {\n const labelPrefix = label && `[${label}]` || \"\";\n const spawned = [];\n const debugDebugger = typeof verbose === \"string\" ? infoDebugger.extend(verbose) : verbose;\n const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n return step(initialStep);\n function sibling(name, initial) {\n return append(\n spawned,\n createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n );\n }\n function step(phase) {\n const stepPrefix = phase && `[${phase}]` || \"\";\n const debug2 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP;\n const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug2);\n return Object.assign(debugDebugger ? debug2 : info, {\n label,\n sibling,\n info,\n step\n });\n }\n}\nvar init_git_logger = __esm({\n \"src/lib/git-logger.ts\"() {\n \"use strict\";\n init_utils();\n debug.formatters.L = (value) => String(filterHasLength(value) ? value.length : \"-\");\n debug.formatters.B = (value) => {\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n return objectToString(value);\n };\n }\n});\n\n// src/lib/runners/tasks-pending-queue.ts\nvar TasksPendingQueue;\nvar init_tasks_pending_queue = __esm({\n \"src/lib/runners/tasks-pending-queue.ts\"() {\n \"use strict\";\n init_git_error();\n init_git_logger();\n TasksPendingQueue = class _TasksPendingQueue {\n constructor(logLabel = \"GitExecutor\") {\n this.logLabel = logLabel;\n this._queue = /* @__PURE__ */ new Map();\n }\n withProgress(task) {\n return this._queue.get(task);\n }\n createProgress(task) {\n const name = _TasksPendingQueue.getName(task.commands[0]);\n const logger = createLogger(this.logLabel, name);\n return {\n task,\n logger,\n name\n };\n }\n push(task) {\n const progress = this.createProgress(task);\n progress.logger(\"Adding task to the queue, commands = %o\", task.commands);\n this._queue.set(task, progress);\n return progress;\n }\n fatal(err) {\n for (const [task, { logger }] of Array.from(this._queue.entries())) {\n if (task === err.task) {\n logger.info(`Failed %o`, err);\n logger(\n `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n );\n } else {\n logger.info(\n `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n err.message\n );\n }\n this.complete(task);\n }\n if (this._queue.size !== 0) {\n throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n }\n }\n complete(task) {\n const progress = this.withProgress(task);\n if (progress) {\n this._queue.delete(task);\n }\n }\n attempt(task) {\n const progress = this.withProgress(task);\n if (!progress) {\n throw new GitError(void 0, \"TasksPendingQueue: attempt called for an unknown task\");\n }\n progress.logger(\"Starting task\");\n return progress;\n }\n static getName(name = \"empty\") {\n return `task:${name}:${++_TasksPendingQueue.counter}`;\n }\n static {\n this.counter = 0;\n }\n };\n }\n});\n\n// src/lib/runners/git-executor-chain.ts\nimport { spawn } from \"child_process\";\nfunction pluginContext(task, commands) {\n return {\n method: first(task.commands) || \"\",\n commands\n };\n}\nfunction onErrorReceived(target, logger) {\n return (err) => {\n logger(`[ERROR] child process exception %o`, err);\n target.push(Buffer.from(String(err.stack), \"ascii\"));\n };\n}\nfunction onDataReceived(target, name, logger, output) {\n return (buffer) => {\n logger(`%s received %L bytes`, name, buffer);\n output(`%B`, buffer);\n target.push(buffer);\n };\n}\nvar GitExecutorChain;\nvar init_git_executor_chain = __esm({\n \"src/lib/runners/git-executor-chain.ts\"() {\n \"use strict\";\n init_git_error();\n init_task();\n init_utils();\n init_tasks_pending_queue();\n GitExecutorChain = class {\n constructor(_executor, _scheduler, _plugins) {\n this._executor = _executor;\n this._scheduler = _scheduler;\n this._plugins = _plugins;\n this._chain = Promise.resolve();\n this._queue = new TasksPendingQueue();\n }\n get cwd() {\n return this._cwd || this._executor.cwd;\n }\n set cwd(cwd) {\n this._cwd = cwd;\n }\n get env() {\n return this._executor.env;\n }\n get outputHandler() {\n return this._executor.outputHandler;\n }\n chain() {\n return this;\n }\n push(task) {\n this._queue.push(task);\n return this._chain = this._chain.then(() => this.attemptTask(task));\n }\n async attemptTask(task) {\n const onScheduleComplete = await this._scheduler.next();\n const onQueueComplete = () => this._queue.complete(task);\n try {\n const { logger } = this._queue.attempt(task);\n return await (isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger));\n } catch (e) {\n throw this.onFatalException(task, e);\n } finally {\n onQueueComplete();\n onScheduleComplete();\n }\n }\n onFatalException(task, e) {\n const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n this._chain = Promise.resolve();\n this._queue.fatal(gitError);\n return gitError;\n }\n async attemptRemoteTask(task, logger) {\n const binary = this._plugins.exec(\"spawn.binary\", \"\", pluginContext(task, task.commands));\n const args = this._plugins.exec(\n \"spawn.args\",\n [...task.commands],\n pluginContext(task, task.commands)\n );\n const raw = await this.gitResponse(\n task,\n binary,\n args,\n this.outputHandler,\n logger.step(\"SPAWN\")\n );\n const outputStreams = await this.handleTaskData(task, args, raw, logger.step(\"HANDLE\"));\n logger(`passing response to task's parser as a %s`, task.format);\n if (isBufferTask(task)) {\n return callTaskParser(task.parser, outputStreams);\n }\n return callTaskParser(task.parser, outputStreams.asStrings());\n }\n async attemptEmptyTask(task, logger) {\n logger(`empty task bypassing child process to call to task's parser`);\n return task.parser(this);\n }\n handleTaskData(task, args, result, logger) {\n const { exitCode, rejection, stdOut, stdErr } = result;\n return new Promise((done, fail) => {\n logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n const { error } = this._plugins.exec(\n \"task.error\",\n { error: rejection },\n {\n ...pluginContext(task, args),\n ...result\n }\n );\n if (error && task.onError) {\n logger.info(`exitCode=%s handling with custom error handler`);\n return task.onError(\n result,\n error,\n (newStdOut) => {\n logger.info(`custom error handler treated as success`);\n logger(`custom error returned a %s`, objectToString(newStdOut));\n done(\n new GitOutputStreams(\n Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n Buffer.concat(stdErr)\n )\n );\n },\n fail\n );\n }\n if (error) {\n logger.info(\n `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n exitCode,\n stdErr.length,\n rejection\n );\n return fail(error);\n }\n logger.info(`retrieving task output complete`);\n done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n });\n }\n async gitResponse(task, command, args, outputHandler, logger) {\n const outputLogger = logger.sibling(\"output\");\n const spawnOptions = this._plugins.exec(\n \"spawn.options\",\n {\n cwd: this.cwd,\n env: this.env,\n windowsHide: true\n },\n pluginContext(task, task.commands)\n );\n return new Promise((done) => {\n const stdOut = [];\n const stdErr = [];\n logger.info(`%s %o`, command, args);\n logger(\"%O\", spawnOptions);\n let rejection = this._beforeSpawn(task, args);\n if (rejection) {\n return done({\n stdOut,\n stdErr,\n exitCode: 9901,\n rejection\n });\n }\n this._plugins.exec(\"spawn.before\", void 0, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n }\n });\n const spawned = spawn(command, args, spawnOptions);\n spawned.stdout.on(\n \"data\",\n onDataReceived(stdOut, \"stdOut\", logger, outputLogger.step(\"stdOut\"))\n );\n spawned.stderr.on(\n \"data\",\n onDataReceived(stdErr, \"stdErr\", logger, outputLogger.step(\"stdErr\"))\n );\n spawned.on(\"error\", onErrorReceived(stdErr, logger));\n if (outputHandler) {\n logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n outputHandler(command, spawned.stdout, spawned.stderr, [...args]);\n }\n this._plugins.exec(\"spawn.after\", void 0, {\n ...pluginContext(task, args),\n spawned,\n close(exitCode, reason) {\n done({\n stdOut,\n stdErr,\n exitCode,\n rejection: rejection || reason\n });\n },\n kill(reason) {\n if (spawned.killed) {\n return;\n }\n rejection = reason;\n spawned.kill(\"SIGINT\");\n }\n });\n });\n }\n _beforeSpawn(task, args) {\n let rejection;\n this._plugins.exec(\"spawn.before\", void 0, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n }\n });\n return rejection;\n }\n };\n }\n});\n\n// src/lib/runners/git-executor.ts\nvar git_executor_exports = {};\n__export(git_executor_exports, {\n GitExecutor: () => GitExecutor\n});\nvar GitExecutor;\nvar init_git_executor = __esm({\n \"src/lib/runners/git-executor.ts\"() {\n \"use strict\";\n init_git_executor_chain();\n GitExecutor = class {\n constructor(cwd, _scheduler, _plugins) {\n this.cwd = cwd;\n this._scheduler = _scheduler;\n this._plugins = _plugins;\n this._chain = new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n chain() {\n return new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n push(task) {\n return this._chain.push(task);\n }\n };\n }\n});\n\n// src/lib/task-callback.ts\nfunction taskCallback(task, response, callback = NOOP) {\n const onSuccess = (data) => {\n callback(null, data);\n };\n const onError2 = (err) => {\n if (err?.task === task) {\n callback(\n err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err,\n void 0\n );\n }\n };\n response.then(onSuccess, onError2);\n}\nfunction addDeprecationNoticeToError(err) {\n let log = (name) => {\n console.warn(\n `simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`\n );\n log = NOOP;\n };\n return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {}));\n function descriptorReducer(all, name) {\n if (name in err) {\n return all;\n }\n all[name] = {\n enumerable: false,\n configurable: false,\n get() {\n log(name);\n return err.git[name];\n }\n };\n return all;\n }\n}\nvar init_task_callback = __esm({\n \"src/lib/task-callback.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_utils();\n }\n});\n\n// src/lib/tasks/change-working-directory.ts\nfunction changeWorkingDirectoryTask(directory, root) {\n return adhocExecTask((instance) => {\n if (!folderExists(directory)) {\n throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n }\n return (root || instance).cwd = directory;\n });\n}\nvar init_change_working_directory = __esm({\n \"src/lib/tasks/change-working-directory.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/checkout.ts\nfunction checkoutTask(args) {\n const commands = [\"checkout\", ...args];\n if (commands[1] === \"-b\" && commands.includes(\"-B\")) {\n commands[1] = remove(commands, \"-B\");\n }\n return straightThroughStringTask(commands);\n}\nfunction checkout_default() {\n return {\n checkout() {\n return this._runTask(\n checkoutTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n },\n checkoutBranch(branchName, startPoint) {\n return this._runTask(\n checkoutTask([\"-b\", branchName, startPoint, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n checkoutLocalBranch(branchName) {\n return this._runTask(\n checkoutTask([\"-b\", branchName, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_checkout = __esm({\n \"src/lib/tasks/checkout.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/count-objects.ts\nfunction countObjectsResponse() {\n return {\n count: 0,\n garbage: 0,\n inPack: 0,\n packs: 0,\n prunePackable: 0,\n size: 0,\n sizeGarbage: 0,\n sizePack: 0\n };\n}\nfunction count_objects_default() {\n return {\n countObjects() {\n return this._runTask({\n commands: [\"count-objects\", \"--verbose\"],\n format: \"utf-8\",\n parser(stdOut) {\n return parseStringResponse(countObjectsResponse(), [parser2], stdOut);\n }\n });\n }\n };\n}\nvar parser2;\nvar init_count_objects = __esm({\n \"src/lib/tasks/count-objects.ts\"() {\n \"use strict\";\n init_utils();\n parser2 = new LineParser(\n /([a-z-]+): (\\d+)$/,\n (result, [key, value]) => {\n const property = asCamelCase(key);\n if (Object.hasOwn(result, property)) {\n result[property] = asNumber(value);\n }\n }\n );\n }\n});\n\n// src/lib/parsers/parse-commit.ts\nfunction parseCommitResult(stdOut) {\n const result = {\n author: null,\n branch: \"\",\n commit: \"\",\n root: false,\n summary: {\n changes: 0,\n insertions: 0,\n deletions: 0\n }\n };\n return parseStringResponse(result, parsers, stdOut);\n}\nvar parsers;\nvar init_parse_commit = __esm({\n \"src/lib/parsers/parse-commit.ts\"() {\n \"use strict\";\n init_utils();\n parsers = [\n new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n result.branch = branch;\n result.commit = commit;\n result.root = !!root;\n }),\n new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n const parts = author.split(\"<\");\n const email = parts.pop();\n if (!email || !email.includes(\"@\")) {\n return;\n }\n result.author = {\n email: email.substr(0, email.length - 1),\n name: parts.join(\"<\").trim()\n };\n }),\n new LineParser(\n /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n (result, [changes, insertions, deletions]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n result.summary.insertions = parseInt(insertions, 10) || 0;\n result.summary.deletions = parseInt(deletions, 10) || 0;\n }\n ),\n new LineParser(\n /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n (result, [changes, lines, direction]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n const count = parseInt(lines, 10) || 0;\n if (direction === \"-\") {\n result.summary.deletions = count;\n } else if (direction === \"+\") {\n result.summary.insertions = count;\n }\n }\n )\n ];\n }\n});\n\n// src/lib/tasks/commit.ts\nfunction commitTask(message, files, customArgs) {\n const commands = [\n \"-c\",\n \"core.abbrev=40\",\n \"commit\",\n ...prefixedArray(message, \"-m\"),\n ...files,\n ...customArgs\n ];\n return {\n commands,\n format: \"utf-8\",\n parser: parseCommitResult\n };\n}\nfunction commit_default() {\n return {\n commit(message, ...rest) {\n const next = trailingFunctionArgument(arguments);\n const task = rejectDeprecatedSignatures(message) || commitTask(\n asArray(message),\n asArray(filterType(rest[0], filterStringOrStringArray, [])),\n [\n ...asStringArray(filterType(rest[1], filterArray, [])),\n ...getTrailingOptions(arguments, 0, true)\n ]\n );\n return this._runTask(task, next);\n }\n };\n function rejectDeprecatedSignatures(message) {\n return !filterStringOrStringArray(message) && configurationErrorTask(\n `git.commit: requires the commit message to be supplied as a string/string[]`\n );\n }\n}\nvar init_commit = __esm({\n \"src/lib/tasks/commit.ts\"() {\n \"use strict\";\n init_parse_commit();\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/first-commit.ts\nfunction first_commit_default() {\n return {\n firstCommit() {\n return this._runTask(\n straightThroughStringTask([\"rev-list\", \"--max-parents=0\", \"HEAD\"], true),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_first_commit = __esm({\n \"src/lib/tasks/first-commit.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/hash-object.ts\nfunction hashObjectTask(filePath, write) {\n const commands = [\"hash-object\", filePath];\n if (write) {\n commands.push(\"-w\");\n }\n return straightThroughStringTask(commands, true);\n}\nvar init_hash_object = __esm({\n \"src/lib/tasks/hash-object.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/InitSummary.ts\nfunction parseInit(bare, path, text) {\n const response = String(text).trim();\n let result;\n if (result = initResponseRegex.exec(response)) {\n return new InitSummary(bare, path, false, result[1]);\n }\n if (result = reInitResponseRegex.exec(response)) {\n return new InitSummary(bare, path, true, result[1]);\n }\n let gitDir = \"\";\n const tokens = response.split(\" \");\n while (tokens.length) {\n const token = tokens.shift();\n if (token === \"in\") {\n gitDir = tokens.join(\" \");\n break;\n }\n }\n return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\nvar InitSummary, initResponseRegex, reInitResponseRegex;\nvar init_InitSummary = __esm({\n \"src/lib/responses/InitSummary.ts\"() {\n \"use strict\";\n InitSummary = class {\n constructor(bare, path, existing, gitDir) {\n this.bare = bare;\n this.path = path;\n this.existing = existing;\n this.gitDir = gitDir;\n }\n };\n initResponseRegex = /^Init.+ repository in (.+)$/;\n reInitResponseRegex = /^Rein.+ in (.+)$/;\n }\n});\n\n// src/lib/tasks/init.ts\nfunction hasBareCommand(command) {\n return command.includes(bareCommand);\n}\nfunction initTask(bare = false, path, customArgs) {\n const commands = [\"init\", ...customArgs];\n if (bare && !hasBareCommand(commands)) {\n commands.splice(1, 0, bareCommand);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return parseInit(commands.includes(\"--bare\"), path, text);\n }\n };\n}\nvar bareCommand;\nvar init_init = __esm({\n \"src/lib/tasks/init.ts\"() {\n \"use strict\";\n init_InitSummary();\n bareCommand = \"--bare\";\n }\n});\n\n// src/lib/args/log-format.ts\nfunction logFormatFromCommand(customArgs) {\n for (let i = 0; i < customArgs.length; i++) {\n const format = logFormatRegex.exec(customArgs[i]);\n if (format) {\n return `--${format[1]}`;\n }\n }\n return \"\" /* NONE */;\n}\nfunction isLogFormat(customArg) {\n return logFormatRegex.test(customArg);\n}\nvar logFormatRegex;\nvar init_log_format = __esm({\n \"src/lib/args/log-format.ts\"() {\n \"use strict\";\n logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n }\n});\n\n// src/lib/responses/DiffSummary.ts\nvar DiffSummary;\nvar init_DiffSummary = __esm({\n \"src/lib/responses/DiffSummary.ts\"() {\n \"use strict\";\n DiffSummary = class {\n constructor() {\n this.changed = 0;\n this.deletions = 0;\n this.insertions = 0;\n this.files = [];\n }\n };\n }\n});\n\n// src/lib/parsers/parse-diff-summary.ts\nfunction getDiffParser(format = \"\" /* NONE */) {\n const parser4 = diffSummaryParsers[format];\n return (stdOut) => parseStringResponse(new DiffSummary(), parser4, stdOut, false);\n}\nvar statParser, numStatParser, nameOnlyParser, nameStatusParser, diffSummaryParsers;\nvar init_parse_diff_summary = __esm({\n \"src/lib/parsers/parse-diff-summary.ts\"() {\n \"use strict\";\n init_log_format();\n init_DiffSummary();\n init_diff_name_status();\n init_utils();\n statParser = [\n new LineParser(\n /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n (result, [file, changes, alterations = \"\"]) => {\n result.files.push({\n file: file.trim(),\n changes: asNumber(changes),\n insertions: alterations.replace(/[^+]/g, \"\").length,\n deletions: alterations.replace(/[^-]/g, \"\").length,\n binary: false\n });\n }\n ),\n new LineParser(\n /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n (result, [file, before, after]) => {\n result.files.push({\n file: file.trim(),\n before: asNumber(before),\n after: asNumber(after),\n binary: true\n });\n }\n ),\n new LineParser(\n /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n (result, [changed, summary]) => {\n const inserted = /(\\d+) i/.exec(summary);\n const deleted = /(\\d+) d/.exec(summary);\n result.changed = asNumber(changed);\n result.insertions = asNumber(inserted?.[1]);\n result.deletions = asNumber(deleted?.[1]);\n }\n )\n ];\n numStatParser = [\n new LineParser(\n /(\\d+)\\t(\\d+)\\t(.+)$/,\n (result, [changesInsert, changesDelete, file]) => {\n const insertions = asNumber(changesInsert);\n const deletions = asNumber(changesDelete);\n result.changed++;\n result.insertions += insertions;\n result.deletions += deletions;\n result.files.push({\n file,\n changes: insertions + deletions,\n insertions,\n deletions,\n binary: false\n });\n }\n ),\n new LineParser(/-\\t-\\t(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n after: 0,\n before: 0,\n binary: true\n });\n })\n ];\n nameOnlyParser = [\n new LineParser(/(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false\n });\n })\n ];\n nameStatusParser = [\n new LineParser(\n /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n (result, [status, similarity, from, _to, to]) => {\n result.changed++;\n result.files.push({\n file: to ?? from,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n status: orVoid(isDiffNameStatus(status) && status),\n from: orVoid(!!to && from !== to && from),\n similarity: asNumber(similarity)\n });\n }\n )\n ];\n diffSummaryParsers = {\n [\"\" /* NONE */]: statParser,\n [\"--stat\" /* STAT */]: statParser,\n [\"--numstat\" /* NUM_STAT */]: numStatParser,\n [\"--name-status\" /* NAME_STATUS */]: nameStatusParser,\n [\"--name-only\" /* NAME_ONLY */]: nameOnlyParser\n };\n }\n});\n\n// src/lib/parsers/parse-list-log-summary.ts\nfunction lineBuilder(tokens, fields) {\n return fields.reduce(\n (line, field, index) => {\n line[field] = tokens[index] || \"\";\n return line;\n },\n /* @__PURE__ */ Object.create({ diff: null })\n );\n}\nfunction createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = \"\" /* NONE */) {\n const parseDiffResult = getDiffParser(logFormat);\n return function(stdOut) {\n const all = toLinesWithContent(\n stdOut.trim(),\n false,\n START_BOUNDARY\n ).map(function(item) {\n const lineDetail = item.split(COMMIT_BOUNDARY);\n const listLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n if (lineDetail.length > 1 && !!lineDetail[1].trim()) {\n listLogLine.diff = parseDiffResult(lineDetail[1]);\n }\n return listLogLine;\n });\n return {\n all,\n latest: all.length && all[0] || null,\n total: all.length\n };\n };\n}\nvar START_BOUNDARY, COMMIT_BOUNDARY, SPLITTER, defaultFieldNames;\nvar init_parse_list_log_summary = __esm({\n \"src/lib/parsers/parse-list-log-summary.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_diff_summary();\n init_log_format();\n START_BOUNDARY = \"\\xF2\\xF2\\xF2\\xF2\\xF2\\xF2 \";\n COMMIT_BOUNDARY = \" \\xF2\\xF2\";\n SPLITTER = \" \\xF2 \";\n defaultFieldNames = [\"hash\", \"date\", \"message\", \"refs\", \"author_name\", \"author_email\"];\n }\n});\n\n// src/lib/tasks/diff.ts\nvar diff_exports = {};\n__export(diff_exports, {\n diffSummaryTask: () => diffSummaryTask,\n validateLogFormatConfig: () => validateLogFormatConfig\n});\nfunction diffSummaryTask(customArgs) {\n let logFormat = logFormatFromCommand(customArgs);\n const commands = [\"diff\"];\n if (logFormat === \"\" /* NONE */) {\n logFormat = \"--stat\" /* STAT */;\n commands.push(\"--stat=4096\");\n }\n commands.push(...customArgs);\n return validateLogFormatConfig(commands) || {\n commands,\n format: \"utf-8\",\n parser: getDiffParser(logFormat)\n };\n}\nfunction validateLogFormatConfig(customArgs) {\n const flags = customArgs.filter(isLogFormat);\n if (flags.length > 1) {\n return configurationErrorTask(\n `Summary flags are mutually exclusive - pick one of ${flags.join(\",\")}`\n );\n }\n if (flags.length && customArgs.includes(\"-z\")) {\n return configurationErrorTask(\n `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n );\n }\n}\nvar init_diff = __esm({\n \"src/lib/tasks/diff.ts\"() {\n \"use strict\";\n init_log_format();\n init_parse_diff_summary();\n init_task();\n }\n});\n\n// src/lib/tasks/log.ts\nfunction prettyFormat(format, splitter) {\n const fields = [];\n const formatStr = [];\n Object.keys(format).forEach((field) => {\n fields.push(field);\n formatStr.push(String(format[field]));\n });\n return [fields, formatStr.join(splitter)];\n}\nfunction userOptions(input) {\n return Object.keys(input).reduce((out, key) => {\n if (!(key in excludeOptions)) {\n out[key] = input[key];\n }\n return out;\n }, {});\n}\nfunction parseLogOptions(opt = {}, customArgs = []) {\n const splitter = filterType(opt.splitter, filterString, SPLITTER);\n const format = filterPlainObject(opt.format) ? opt.format : {\n hash: \"%H\",\n date: opt.strictDate === false ? \"%ai\" : \"%aI\",\n message: \"%s\",\n refs: \"%D\",\n body: opt.multiLine ? \"%B\" : \"%b\",\n author_name: opt.mailMap !== false ? \"%aN\" : \"%an\",\n author_email: opt.mailMap !== false ? \"%aE\" : \"%ae\"\n };\n const [fields, formatStr] = prettyFormat(format, splitter);\n const suffix = [];\n const command = [\n `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n ...customArgs\n ];\n const maxCount = opt.n || opt[\"max-count\"] || opt.maxCount;\n if (maxCount) {\n command.push(`--max-count=${maxCount}`);\n }\n if (opt.from || opt.to) {\n const rangeOperator = opt.symmetric !== false ? \"...\" : \"..\";\n suffix.push(`${opt.from || \"\"}${rangeOperator}${opt.to || \"\"}`);\n }\n if (filterString(opt.file)) {\n command.push(\"--follow\", pathspec(opt.file));\n }\n appendTaskOptions(userOptions(opt), command);\n return {\n fields,\n splitter,\n commands: [...command, ...suffix]\n };\n}\nfunction logTask(splitter, fields, customArgs) {\n const parser4 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n return {\n commands: [\"log\", ...customArgs],\n format: \"utf-8\",\n parser: parser4\n };\n}\nfunction log_default() {\n return {\n log(...rest) {\n const next = trailingFunctionArgument(arguments);\n const options = parseLogOptions(\n trailingOptionsArgument(arguments),\n asStringArray(filterType(arguments[0], filterArray, []))\n );\n const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options);\n return this._runTask(task, next);\n }\n };\n function createLogTask(options) {\n return logTask(options.splitter, options.fields, options.commands);\n }\n function rejectDeprecatedSignatures(from, to) {\n return filterString(from) && filterString(to) && configurationErrorTask(\n `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n );\n }\n}\nvar excludeOptions;\nvar init_log = __esm({\n \"src/lib/tasks/log.ts\"() {\n \"use strict\";\n init_log_format();\n init_pathspec();\n init_parse_list_log_summary();\n init_utils();\n init_task();\n init_diff();\n excludeOptions = /* @__PURE__ */ ((excludeOptions2) => {\n excludeOptions2[excludeOptions2[\"--pretty\"] = 0] = \"--pretty\";\n excludeOptions2[excludeOptions2[\"max-count\"] = 1] = \"max-count\";\n excludeOptions2[excludeOptions2[\"maxCount\"] = 2] = \"maxCount\";\n excludeOptions2[excludeOptions2[\"n\"] = 3] = \"n\";\n excludeOptions2[excludeOptions2[\"file\"] = 4] = \"file\";\n excludeOptions2[excludeOptions2[\"format\"] = 5] = \"format\";\n excludeOptions2[excludeOptions2[\"from\"] = 6] = \"from\";\n excludeOptions2[excludeOptions2[\"to\"] = 7] = \"to\";\n excludeOptions2[excludeOptions2[\"splitter\"] = 8] = \"splitter\";\n excludeOptions2[excludeOptions2[\"symmetric\"] = 9] = \"symmetric\";\n excludeOptions2[excludeOptions2[\"mailMap\"] = 10] = \"mailMap\";\n excludeOptions2[excludeOptions2[\"multiLine\"] = 11] = \"multiLine\";\n excludeOptions2[excludeOptions2[\"strictDate\"] = 12] = \"strictDate\";\n return excludeOptions2;\n })(excludeOptions || {});\n }\n});\n\n// src/lib/responses/MergeSummary.ts\nvar MergeSummaryConflict, MergeSummaryDetail;\nvar init_MergeSummary = __esm({\n \"src/lib/responses/MergeSummary.ts\"() {\n \"use strict\";\n MergeSummaryConflict = class {\n constructor(reason, file = null, meta) {\n this.reason = reason;\n this.file = file;\n this.meta = meta;\n }\n toString() {\n return `${this.file}:${this.reason}`;\n }\n };\n MergeSummaryDetail = class {\n constructor() {\n this.conflicts = [];\n this.merges = [];\n this.result = \"success\";\n }\n get failed() {\n return this.conflicts.length > 0;\n }\n get reason() {\n return this.result;\n }\n toString() {\n if (this.conflicts.length) {\n return `CONFLICTS: ${this.conflicts.join(\", \")}`;\n }\n return \"OK\";\n }\n };\n }\n});\n\n// src/lib/responses/PullSummary.ts\nvar PullSummary, PullFailedSummary;\nvar init_PullSummary = __esm({\n \"src/lib/responses/PullSummary.ts\"() {\n \"use strict\";\n PullSummary = class {\n constructor() {\n this.remoteMessages = {\n all: []\n };\n this.created = [];\n this.deleted = [];\n this.files = [];\n this.deletions = {};\n this.insertions = {};\n this.summary = {\n changes: 0,\n deletions: 0,\n insertions: 0\n };\n }\n };\n PullFailedSummary = class {\n constructor() {\n this.remote = \"\";\n this.hash = {\n local: \"\",\n remote: \"\"\n };\n this.branch = {\n local: \"\",\n remote: \"\"\n };\n this.message = \"\";\n }\n toString() {\n return this.message;\n }\n };\n }\n});\n\n// src/lib/parsers/parse-remote-objects.ts\nfunction objectEnumerationResult(remoteMessages) {\n return remoteMessages.objects = remoteMessages.objects || {\n compressing: 0,\n counting: 0,\n enumerating: 0,\n packReused: 0,\n reused: { count: 0, delta: 0 },\n total: { count: 0, delta: 0 }\n };\n}\nfunction asObjectCount(source) {\n const count = /^\\s*(\\d+)/.exec(source);\n const delta = /delta (\\d+)/i.exec(source);\n return {\n count: asNumber(count && count[1] || \"0\"),\n delta: asNumber(delta && delta[1] || \"0\")\n };\n}\nvar remoteMessagesObjectParsers;\nvar init_parse_remote_objects = __esm({\n \"src/lib/parsers/parse-remote-objects.ts\"() {\n \"use strict\";\n init_utils();\n remoteMessagesObjectParsers = [\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n (result, [total, reused, packReused]) => {\n const objects = objectEnumerationResult(result.remoteMessages);\n objects.total = asObjectCount(total);\n objects.reused = asObjectCount(reused);\n objects.packReused = asNumber(packReused);\n }\n )\n ];\n }\n});\n\n// src/lib/parsers/parse-remote-messages.ts\nfunction parseRemoteMessages(_stdOut, stdErr) {\n return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr);\n}\nvar parsers2, RemoteMessageSummary;\nvar init_parse_remote_messages = __esm({\n \"src/lib/parsers/parse-remote-messages.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_remote_objects();\n parsers2 = [\n new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n result.remoteMessages.all.push(text.trim());\n return false;\n }),\n ...remoteMessagesObjectParsers,\n new RemoteLineParser(\n [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [pullRequestUrl]) => {\n result.remoteMessages.pullRequestUrl = pullRequestUrl;\n }\n ),\n new RemoteLineParser(\n [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [count, summary, url]) => {\n result.remoteMessages.vulnerabilities = {\n count: asNumber(count),\n summary,\n url\n };\n }\n )\n ];\n RemoteMessageSummary = class {\n constructor() {\n this.all = [];\n }\n };\n }\n});\n\n// src/lib/parsers/parse-pull.ts\nfunction parsePullErrorResult(stdOut, stdErr) {\n const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n return pullError.message && pullError;\n}\nvar FILE_UPDATE_REGEX, SUMMARY_REGEX, ACTION_REGEX, parsers3, errorParsers, parsePullDetail, parsePullResult;\nvar init_parse_pull = __esm({\n \"src/lib/parsers/parse-pull.ts\"() {\n \"use strict\";\n init_PullSummary();\n init_utils();\n init_parse_remote_messages();\n FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\n SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\n ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n parsers3 = [\n new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n result.files.push(file);\n if (insertions) {\n result.insertions[file] = insertions.length;\n }\n if (deletions) {\n result.deletions[file] = deletions.length;\n }\n }),\n new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n if (insertions !== void 0 || deletions !== void 0) {\n result.summary.changes = +changes || 0;\n result.summary.insertions = +insertions || 0;\n result.summary.deletions = +deletions || 0;\n return true;\n }\n return false;\n }),\n new LineParser(ACTION_REGEX, (result, [action, file]) => {\n append(result.files, file);\n append(action === \"create\" ? result.created : result.deleted, file);\n })\n ];\n errorParsers = [\n new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n new LineParser(\n /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n result.branch.local = branchLocal;\n result.hash.local = hashLocal;\n result.branch.remote = branchRemote;\n result.hash.remote = hashRemote;\n }\n )\n ];\n parsePullDetail = (stdOut, stdErr) => {\n return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]);\n };\n parsePullResult = (stdOut, stdErr) => {\n return Object.assign(\n new PullSummary(),\n parsePullDetail(stdOut, stdErr),\n parseRemoteMessages(stdOut, stdErr)\n );\n };\n }\n});\n\n// src/lib/parsers/parse-merge.ts\nvar parsers4, parseMergeResult, parseMergeDetail;\nvar init_parse_merge = __esm({\n \"src/lib/parsers/parse-merge.ts\"() {\n \"use strict\";\n init_MergeSummary();\n init_utils();\n init_parse_pull();\n parsers4 = [\n new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n summary.merges.push(autoMerge);\n }),\n new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file));\n }),\n new LineParser(\n /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n (summary, [reason, file, deleteRef]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n }\n ),\n new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, null));\n }),\n new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n summary.result = result;\n })\n ];\n parseMergeResult = (stdOut, stdErr) => {\n return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n };\n parseMergeDetail = (stdOut) => {\n return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut);\n };\n }\n});\n\n// src/lib/tasks/merge.ts\nfunction mergeTask(customArgs) {\n if (!customArgs.length) {\n return configurationErrorTask(\"Git.merge requires at least one option\");\n }\n return {\n commands: [\"merge\", ...customArgs],\n format: \"utf-8\",\n parser(stdOut, stdErr) {\n const merge = parseMergeResult(stdOut, stdErr);\n if (merge.failed) {\n throw new GitResponseError(merge);\n }\n return merge;\n }\n };\n}\nvar init_merge = __esm({\n \"src/lib/tasks/merge.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_merge();\n init_task();\n }\n});\n\n// src/lib/parsers/parse-push.ts\nfunction pushResultPushedItem(local, remote, status) {\n const deleted = status.includes(\"deleted\");\n const tag = status.includes(\"tag\") || /^refs\\/tags/.test(local);\n const alreadyUpdated = !status.includes(\"new\");\n return {\n deleted,\n tag,\n branch: !tag,\n new: !alreadyUpdated,\n alreadyUpdated,\n local,\n remote\n };\n}\nvar parsers5, parsePushResult, parsePushDetail;\nvar init_parse_push = __esm({\n \"src/lib/parsers/parse-push.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_remote_messages();\n parsers5 = [\n new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n result.repo = repo;\n }),\n new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n result.ref = {\n ...result.ref || {},\n local\n };\n }),\n new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n result.pushed.push(pushResultPushedItem(local, remote, type));\n }),\n new LineParser(\n /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n (result, [local, remote, remoteName]) => {\n result.branch = {\n ...result.branch || {},\n local,\n remote,\n remoteName\n };\n }\n ),\n new LineParser(\n /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n (result, [local, remote, from, to]) => {\n result.update = {\n head: {\n local,\n remote\n },\n hash: {\n from,\n to\n }\n };\n }\n )\n ];\n parsePushResult = (stdOut, stdErr) => {\n const pushDetail = parsePushDetail(stdOut, stdErr);\n const responseDetail = parseRemoteMessages(stdOut, stdErr);\n return {\n ...pushDetail,\n ...responseDetail\n };\n };\n parsePushDetail = (stdOut, stdErr) => {\n return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]);\n };\n }\n});\n\n// src/lib/tasks/push.ts\nvar push_exports = {};\n__export(push_exports, {\n pushTagsTask: () => pushTagsTask,\n pushTask: () => pushTask\n});\nfunction pushTagsTask(ref = {}, customArgs) {\n append(customArgs, \"--tags\");\n return pushTask(ref, customArgs);\n}\nfunction pushTask(ref = {}, customArgs) {\n const commands = [\"push\", ...customArgs];\n if (ref.branch) {\n commands.splice(1, 0, ref.branch);\n }\n if (ref.remote) {\n commands.splice(1, 0, ref.remote);\n }\n remove(commands, \"-v\");\n append(commands, \"--verbose\");\n append(commands, \"--porcelain\");\n return {\n commands,\n format: \"utf-8\",\n parser: parsePushResult\n };\n}\nvar init_push = __esm({\n \"src/lib/tasks/push.ts\"() {\n \"use strict\";\n init_parse_push();\n init_utils();\n }\n});\n\n// src/lib/tasks/show.ts\nfunction show_default() {\n return {\n showBuffer() {\n const commands = [\"show\", ...getTrailingOptions(arguments, 1)];\n if (!commands.includes(\"--binary\")) {\n commands.splice(1, 0, \"--binary\");\n }\n return this._runTask(\n straightThroughBufferTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n show() {\n const commands = [\"show\", ...getTrailingOptions(arguments, 1)];\n return this._runTask(\n straightThroughStringTask(commands),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_show = __esm({\n \"src/lib/tasks/show.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/responses/FileStatusSummary.ts\nvar fromPathRegex, FileStatusSummary;\nvar init_FileStatusSummary = __esm({\n \"src/lib/responses/FileStatusSummary.ts\"() {\n \"use strict\";\n fromPathRegex = /^(.+)\\0(.+)$/;\n FileStatusSummary = class {\n constructor(path, index, working_dir) {\n this.path = path;\n this.index = index;\n this.working_dir = working_dir;\n if (index === \"R\" || working_dir === \"R\") {\n const detail = fromPathRegex.exec(path) || [null, path, path];\n this.from = detail[2] || \"\";\n this.path = detail[1] || \"\";\n }\n }\n };\n }\n});\n\n// src/lib/responses/StatusSummary.ts\nfunction renamedFile(line) {\n const [to, from] = line.split(NULL);\n return {\n from: from || to,\n to\n };\n}\nfunction parser3(indexX, indexY, handler) {\n return [`${indexX}${indexY}`, handler];\n}\nfunction conflicts(indexX, ...indexY) {\n return indexY.map((y) => parser3(indexX, y, (result, file) => result.conflicted.push(file)));\n}\nfunction splitLine(result, lineStr) {\n const trimmed2 = lineStr.trim();\n switch (\" \") {\n case trimmed2.charAt(2):\n return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.slice(3));\n case trimmed2.charAt(1):\n return data(\" \" /* NONE */, trimmed2.charAt(0), trimmed2.slice(2));\n default:\n return;\n }\n function data(index, workingDir, path) {\n const raw = `${index}${workingDir}`;\n const handler = parsers6.get(raw);\n if (handler) {\n handler(result, path);\n }\n if (raw !== \"##\" && raw !== \"!!\") {\n result.files.push(new FileStatusSummary(path, index, workingDir));\n }\n }\n}\nvar StatusSummary, parsers6, parseStatusSummary;\nvar init_StatusSummary = __esm({\n \"src/lib/responses/StatusSummary.ts\"() {\n \"use strict\";\n init_utils();\n init_FileStatusSummary();\n StatusSummary = class {\n constructor() {\n this.not_added = [];\n this.conflicted = [];\n this.created = [];\n this.deleted = [];\n this.ignored = void 0;\n this.modified = [];\n this.renamed = [];\n this.files = [];\n this.staged = [];\n this.ahead = 0;\n this.behind = 0;\n this.current = null;\n this.tracking = null;\n this.detached = false;\n this.isClean = () => {\n return !this.files.length;\n };\n }\n };\n parsers6 = new Map([\n parser3(\n \" \" /* NONE */,\n \"A\" /* ADDED */,\n (result, file) => result.created.push(file)\n ),\n parser3(\n \" \" /* NONE */,\n \"D\" /* DELETED */,\n (result, file) => result.deleted.push(file)\n ),\n parser3(\n \" \" /* NONE */,\n \"M\" /* MODIFIED */,\n (result, file) => result.modified.push(file)\n ),\n parser3(\"A\" /* ADDED */, \" \" /* NONE */, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n }),\n parser3(\"A\" /* ADDED */, \"M\" /* MODIFIED */, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n result.modified.push(file);\n }),\n parser3(\"D\" /* DELETED */, \" \" /* NONE */, (result, file) => {\n result.deleted.push(file);\n result.staged.push(file);\n }),\n parser3(\"M\" /* MODIFIED */, \" \" /* NONE */, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n parser3(\"M\" /* MODIFIED */, \"M\" /* MODIFIED */, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n parser3(\"R\" /* RENAMED */, \" \" /* NONE */, (result, file) => {\n result.renamed.push(renamedFile(file));\n }),\n parser3(\"R\" /* RENAMED */, \"M\" /* MODIFIED */, (result, file) => {\n const renamed = renamedFile(file);\n result.renamed.push(renamed);\n result.modified.push(renamed.to);\n }),\n parser3(\"!\" /* IGNORED */, \"!\" /* IGNORED */, (_result, _file) => {\n (_result.ignored = _result.ignored || []).push(_file);\n }),\n parser3(\n \"?\" /* UNTRACKED */,\n \"?\" /* UNTRACKED */,\n (result, file) => result.not_added.push(file)\n ),\n ...conflicts(\"A\" /* ADDED */, \"A\" /* ADDED */, \"U\" /* UNMERGED */),\n ...conflicts(\n \"D\" /* DELETED */,\n \"D\" /* DELETED */,\n \"U\" /* UNMERGED */\n ),\n ...conflicts(\n \"U\" /* UNMERGED */,\n \"A\" /* ADDED */,\n \"D\" /* DELETED */,\n \"U\" /* UNMERGED */\n ),\n [\n \"##\",\n (result, line) => {\n const aheadReg = /ahead (\\d+)/;\n const behindReg = /behind (\\d+)/;\n const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n const trackingReg = /\\.{3}(\\S*)/;\n const onEmptyBranchReg = /\\son\\s(\\S+?)(?=\\.{3}|$)/;\n let regexResult = aheadReg.exec(line);\n result.ahead = regexResult && +regexResult[1] || 0;\n regexResult = behindReg.exec(line);\n result.behind = regexResult && +regexResult[1] || 0;\n regexResult = currentReg.exec(line);\n result.current = filterType(regexResult?.[1], filterString, null);\n regexResult = trackingReg.exec(line);\n result.tracking = filterType(regexResult?.[1], filterString, null);\n regexResult = onEmptyBranchReg.exec(line);\n if (regexResult) {\n result.current = filterType(regexResult?.[1], filterString, result.current);\n }\n result.detached = /\\(no branch\\)/.test(line);\n }\n ]\n ]);\n parseStatusSummary = function(text) {\n const lines = text.split(NULL);\n const status = new StatusSummary();\n for (let i = 0, l = lines.length; i < l; ) {\n let line = lines[i++].trim();\n if (!line) {\n continue;\n }\n if (line.charAt(0) === \"R\" /* RENAMED */) {\n line += NULL + (lines[i++] || \"\");\n }\n splitLine(status, line);\n }\n return status;\n };\n }\n});\n\n// src/lib/tasks/status.ts\nfunction statusTask(customArgs) {\n const commands = [\n \"status\",\n \"--porcelain\",\n \"-b\",\n \"-u\",\n \"--null\",\n ...customArgs.filter((arg) => !ignoredOptions.includes(arg))\n ];\n return {\n format: \"utf-8\",\n commands,\n parser(text) {\n return parseStatusSummary(text);\n }\n };\n}\nvar ignoredOptions;\nvar init_status = __esm({\n \"src/lib/tasks/status.ts\"() {\n \"use strict\";\n init_StatusSummary();\n ignoredOptions = [\"--null\", \"-z\"];\n }\n});\n\n// src/lib/tasks/version.ts\nfunction versionResponse(major = 0, minor = 0, patch = 0, agent = \"\", installed = true) {\n return Object.defineProperty(\n {\n major,\n minor,\n patch,\n agent,\n installed\n },\n \"toString\",\n {\n value() {\n return `${this.major}.${this.minor}.${this.patch}`;\n },\n configurable: false,\n enumerable: false\n }\n );\n}\nfunction notInstalledResponse() {\n return versionResponse(0, 0, 0, \"\", false);\n}\nfunction version_default() {\n return {\n version() {\n return this._runTask({\n commands: [\"--version\"],\n format: \"utf-8\",\n parser: versionParser,\n onError(result, error, done, fail) {\n if (result.exitCode === -2 /* NOT_FOUND */) {\n return done(Buffer.from(NOT_INSTALLED));\n }\n fail(error);\n }\n });\n }\n };\n}\nfunction versionParser(stdOut) {\n if (stdOut === NOT_INSTALLED) {\n return notInstalledResponse();\n }\n return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers7, stdOut);\n}\nvar NOT_INSTALLED, parsers7;\nvar init_version = __esm({\n \"src/lib/tasks/version.ts\"() {\n \"use strict\";\n init_utils();\n NOT_INSTALLED = \"installed=false\";\n parsers7 = [\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n (result, [major, minor, patch, agent = \"\"]) => {\n Object.assign(\n result,\n versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n );\n }\n ),\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n (result, [major, minor, patch, agent = \"\"]) => {\n Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n }\n )\n ];\n }\n});\n\n// src/lib/simple-git-api.ts\nvar simple_git_api_exports = {};\n__export(simple_git_api_exports, {\n SimpleGitApi: () => SimpleGitApi\n});\nvar SimpleGitApi;\nvar init_simple_git_api = __esm({\n \"src/lib/simple-git-api.ts\"() {\n \"use strict\";\n init_task_callback();\n init_change_working_directory();\n init_checkout();\n init_count_objects();\n init_commit();\n init_config();\n init_first_commit();\n init_grep();\n init_hash_object();\n init_init();\n init_log();\n init_merge();\n init_push();\n init_show();\n init_status();\n init_task();\n init_version();\n init_utils();\n SimpleGitApi = class {\n constructor(_executor) {\n this._executor = _executor;\n }\n _runTask(task, then) {\n const chain = this._executor.chain();\n const promise = chain.push(task);\n if (then) {\n taskCallback(task, promise, then);\n }\n return Object.create(this, {\n then: { value: promise.then.bind(promise) },\n catch: { value: promise.catch.bind(promise) },\n _executor: { value: chain }\n });\n }\n add(files) {\n return this._runTask(\n straightThroughStringTask([\"add\", ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n }\n cwd(directory) {\n const next = trailingFunctionArgument(arguments);\n if (typeof directory === \"string\") {\n return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n }\n if (typeof directory?.path === \"string\") {\n return this._runTask(\n changeWorkingDirectoryTask(\n directory.path,\n directory.root && this._executor || void 0\n ),\n next\n );\n }\n return this._runTask(\n configurationErrorTask(\"Git.cwd: workingDirectory must be supplied as a string\"),\n next\n );\n }\n hashObject(path, write) {\n return this._runTask(\n hashObjectTask(path, write === true),\n trailingFunctionArgument(arguments)\n );\n }\n init(bare) {\n return this._runTask(\n initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n merge() {\n return this._runTask(\n mergeTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n mergeFromTo(remote, branch) {\n if (!(filterString(remote) && filterString(branch))) {\n return this._runTask(\n configurationErrorTask(\n `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n )\n );\n }\n return this._runTask(\n mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments, false)\n );\n }\n outputHandler(handler) {\n this._executor.outputHandler = handler;\n return this;\n }\n push() {\n const task = pushTask(\n {\n remote: filterType(arguments[0], filterString),\n branch: filterType(arguments[1], filterString)\n },\n getTrailingOptions(arguments)\n );\n return this._runTask(task, trailingFunctionArgument(arguments));\n }\n stash() {\n return this._runTask(\n straightThroughStringTask([\"stash\", ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n status() {\n return this._runTask(\n statusTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n };\n Object.assign(\n SimpleGitApi.prototype,\n checkout_default(),\n commit_default(),\n config_default(),\n count_objects_default(),\n first_commit_default(),\n grep_default(),\n log_default(),\n show_default(),\n version_default()\n );\n }\n});\n\n// src/lib/runners/scheduler.ts\nvar scheduler_exports = {};\n__export(scheduler_exports, {\n Scheduler: () => Scheduler\n});\nimport { createDeferred } from \"@kwsites/promise-deferred\";\nvar createScheduledTask, Scheduler;\nvar init_scheduler = __esm({\n \"src/lib/runners/scheduler.ts\"() {\n \"use strict\";\n init_utils();\n init_git_logger();\n createScheduledTask = /* @__PURE__ */ (() => {\n let id = 0;\n return () => {\n id++;\n const { promise, done } = createDeferred();\n return {\n promise,\n done,\n id\n };\n };\n })();\n Scheduler = class {\n constructor(concurrency = 2) {\n this.concurrency = concurrency;\n this.logger = createLogger(\"\", \"scheduler\");\n this.pending = [];\n this.running = [];\n this.logger(`Constructed, concurrency=%s`, concurrency);\n }\n schedule() {\n if (!this.pending.length || this.running.length >= this.concurrency) {\n this.logger(\n `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n this.pending.length,\n this.running.length,\n this.concurrency\n );\n return;\n }\n const task = append(this.running, this.pending.shift());\n this.logger(`Attempting id=%s`, task.id);\n task.done(() => {\n this.logger(`Completing id=`, task.id);\n remove(this.running, task);\n this.schedule();\n });\n }\n next() {\n const { promise, id } = append(this.pending, createScheduledTask());\n this.logger(`Scheduling id=%s`, id);\n this.schedule();\n return promise;\n }\n };\n }\n});\n\n// src/lib/tasks/apply-patch.ts\nvar apply_patch_exports = {};\n__export(apply_patch_exports, {\n applyPatchTask: () => applyPatchTask\n});\nfunction applyPatchTask(patches, customArgs) {\n return straightThroughStringTask([\"apply\", ...customArgs, ...patches]);\n}\nvar init_apply_patch = __esm({\n \"src/lib/tasks/apply-patch.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/BranchDeleteSummary.ts\nfunction branchDeletionSuccess(branch, hash) {\n return {\n branch,\n hash,\n success: true\n };\n}\nfunction branchDeletionFailure(branch) {\n return {\n branch,\n hash: null,\n success: false\n };\n}\nvar BranchDeletionBatch;\nvar init_BranchDeleteSummary = __esm({\n \"src/lib/responses/BranchDeleteSummary.ts\"() {\n \"use strict\";\n BranchDeletionBatch = class {\n constructor() {\n this.all = [];\n this.branches = {};\n this.errors = [];\n }\n get success() {\n return !this.errors.length;\n }\n };\n }\n});\n\n// src/lib/parsers/parse-branch-delete.ts\nfunction hasBranchDeletionError(data, processExitCode) {\n return processExitCode === 1 /* ERROR */ && deleteErrorRegex.test(data);\n}\nvar deleteSuccessRegex, deleteErrorRegex, parsers8, parseBranchDeletions;\nvar init_parse_branch_delete = __esm({\n \"src/lib/parsers/parse-branch-delete.ts\"() {\n \"use strict\";\n init_BranchDeleteSummary();\n init_utils();\n deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\n deleteErrorRegex = /^error[^']+'([^']+)'/m;\n parsers8 = [\n new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n const deletion = branchDeletionSuccess(branch, hash);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n new LineParser(deleteErrorRegex, (result, [branch]) => {\n const deletion = branchDeletionFailure(branch);\n result.errors.push(deletion);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n })\n ];\n parseBranchDeletions = (stdOut, stdErr) => {\n return parseStringResponse(new BranchDeletionBatch(), parsers8, [stdOut, stdErr]);\n };\n }\n});\n\n// src/lib/responses/BranchSummary.ts\nvar BranchSummaryResult;\nvar init_BranchSummary = __esm({\n \"src/lib/responses/BranchSummary.ts\"() {\n \"use strict\";\n BranchSummaryResult = class {\n constructor() {\n this.all = [];\n this.branches = {};\n this.current = \"\";\n this.detached = false;\n }\n push(status, detached, name, commit, label) {\n if (status === \"*\" /* CURRENT */) {\n this.detached = detached;\n this.current = name;\n }\n this.all.push(name);\n this.branches[name] = {\n current: status === \"*\" /* CURRENT */,\n linkedWorkTree: status === \"+\" /* LINKED */,\n name,\n commit,\n label\n };\n }\n };\n }\n});\n\n// src/lib/parsers/parse-branch.ts\nfunction branchStatus(input) {\n return input ? input.charAt(0) : \"\";\n}\nfunction parseBranchSummary(stdOut, currentOnly = false) {\n return parseStringResponse(\n new BranchSummaryResult(),\n currentOnly ? [currentBranchParser] : parsers9,\n stdOut\n );\n}\nvar parsers9, currentBranchParser;\nvar init_parse_branch = __esm({\n \"src/lib/parsers/parse-branch.ts\"() {\n \"use strict\";\n init_BranchSummary();\n init_utils();\n parsers9 = [\n new LineParser(\n /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), true, name, commit, label);\n }\n ),\n new LineParser(\n /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), false, name, commit, label);\n }\n )\n ];\n currentBranchParser = new LineParser(/^(\\S+)$/s, (result, [name]) => {\n result.push(\"*\" /* CURRENT */, false, name, \"\", \"\");\n });\n }\n});\n\n// src/lib/tasks/branch.ts\nvar branch_exports = {};\n__export(branch_exports, {\n branchLocalTask: () => branchLocalTask,\n branchTask: () => branchTask,\n containsDeleteBranchCommand: () => containsDeleteBranchCommand,\n deleteBranchTask: () => deleteBranchTask,\n deleteBranchesTask: () => deleteBranchesTask\n});\nfunction containsDeleteBranchCommand(commands) {\n const deleteCommands = [\"-d\", \"-D\", \"--delete\"];\n return commands.some((command) => deleteCommands.includes(command));\n}\nfunction branchTask(customArgs) {\n const isDelete = containsDeleteBranchCommand(customArgs);\n const isCurrentOnly = customArgs.includes(\"--show-current\");\n const commands = [\"branch\", ...customArgs];\n if (commands.length === 1) {\n commands.push(\"-a\");\n }\n if (!commands.includes(\"-v\")) {\n commands.splice(1, 0, \"-v\");\n }\n return {\n format: \"utf-8\",\n commands,\n parser(stdOut, stdErr) {\n if (isDelete) {\n return parseBranchDeletions(stdOut, stdErr).all[0];\n }\n return parseBranchSummary(stdOut, isCurrentOnly);\n }\n };\n}\nfunction branchLocalTask() {\n return {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\"],\n parser(stdOut) {\n return parseBranchSummary(stdOut);\n }\n };\n}\nfunction deleteBranchesTask(branches, forceDelete = false) {\n return {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\", forceDelete ? \"-D\" : \"-d\", ...branches],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr);\n },\n onError({ exitCode, stdOut }, error, done, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n done(stdOut);\n }\n };\n}\nfunction deleteBranchTask(branch, forceDelete = false) {\n const task = {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\", forceDelete ? \"-D\" : \"-d\", branch],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr).branches[branch];\n },\n onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n throw new GitResponseError(\n task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n String(error)\n );\n }\n };\n return task;\n}\nvar init_branch = __esm({\n \"src/lib/tasks/branch.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_branch_delete();\n init_parse_branch();\n init_utils();\n }\n});\n\n// src/lib/responses/CheckIgnore.ts\nimport { normalize } from \"node:path\";\nfunction toPath(input) {\n const path = input.trim().replace(/^[\"']|[\"']$/g, \"\");\n return path && normalize(path);\n}\nvar parseCheckIgnore;\nvar init_CheckIgnore = __esm({\n \"src/lib/responses/CheckIgnore.ts\"() {\n \"use strict\";\n parseCheckIgnore = (text) => {\n return text.split(/\\n/g).map(toPath).filter(Boolean);\n };\n }\n});\n\n// src/lib/tasks/check-ignore.ts\nvar check_ignore_exports = {};\n__export(check_ignore_exports, {\n checkIgnoreTask: () => checkIgnoreTask\n});\nfunction checkIgnoreTask(paths) {\n return {\n commands: [\"check-ignore\", ...paths],\n format: \"utf-8\",\n parser: parseCheckIgnore\n };\n}\nvar init_check_ignore = __esm({\n \"src/lib/tasks/check-ignore.ts\"() {\n \"use strict\";\n init_CheckIgnore();\n }\n});\n\n// src/lib/tasks/clone.ts\nvar clone_exports = {};\n__export(clone_exports, {\n cloneMirrorTask: () => cloneMirrorTask,\n cloneTask: () => cloneTask\n});\nfunction disallowedCommand(command) {\n return /^--upload-pack(=|$)/.test(command);\n}\nfunction cloneTask(repo, directory, customArgs) {\n const commands = [\"clone\", ...customArgs];\n filterString(repo) && commands.push(repo);\n filterString(directory) && commands.push(directory);\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n return straightThroughStringTask(commands);\n}\nfunction cloneMirrorTask(repo, directory, customArgs) {\n append(customArgs, \"--mirror\");\n return cloneTask(repo, directory, customArgs);\n}\nvar init_clone = __esm({\n \"src/lib/tasks/clone.ts\"() {\n \"use strict\";\n init_task();\n init_utils();\n }\n});\n\n// src/lib/parsers/parse-fetch.ts\nfunction parseFetchResult(stdOut, stdErr) {\n const result = {\n raw: stdOut,\n remote: null,\n branches: [],\n tags: [],\n updated: [],\n deleted: []\n };\n return parseStringResponse(result, parsers10, [stdOut, stdErr]);\n}\nvar parsers10;\nvar init_parse_fetch = __esm({\n \"src/lib/parsers/parse-fetch.ts\"() {\n \"use strict\";\n init_utils();\n parsers10 = [\n new LineParser(/From (.+)$/, (result, [remote]) => {\n result.remote = remote;\n }),\n new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.branches.push({\n name,\n tracking\n });\n }),\n new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.tags.push({\n name,\n tracking\n });\n }),\n new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n result.deleted.push({\n tracking\n });\n }),\n new LineParser(\n /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n (result, [from, to, name, tracking]) => {\n result.updated.push({\n name,\n tracking,\n to,\n from\n });\n }\n )\n ];\n }\n});\n\n// src/lib/tasks/fetch.ts\nvar fetch_exports = {};\n__export(fetch_exports, {\n fetchTask: () => fetchTask\n});\nfunction disallowedCommand2(command) {\n return /^--upload-pack(=|$)/.test(command);\n}\nfunction fetchTask(remote, branch, customArgs) {\n const commands = [\"fetch\", ...customArgs];\n if (remote && branch) {\n commands.push(remote, branch);\n }\n const banned = commands.find(disallowedCommand2);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser: parseFetchResult\n };\n}\nvar init_fetch = __esm({\n \"src/lib/tasks/fetch.ts\"() {\n \"use strict\";\n init_parse_fetch();\n init_task();\n }\n});\n\n// src/lib/parsers/parse-move.ts\nfunction parseMoveResult(stdOut) {\n return parseStringResponse({ moves: [] }, parsers11, stdOut);\n}\nvar parsers11;\nvar init_parse_move = __esm({\n \"src/lib/parsers/parse-move.ts\"() {\n \"use strict\";\n init_utils();\n parsers11 = [\n new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n result.moves.push({ from, to });\n })\n ];\n }\n});\n\n// src/lib/tasks/move.ts\nvar move_exports = {};\n__export(move_exports, {\n moveTask: () => moveTask\n});\nfunction moveTask(from, to) {\n return {\n commands: [\"mv\", \"-v\", ...asArray(from), to],\n format: \"utf-8\",\n parser: parseMoveResult\n };\n}\nvar init_move = __esm({\n \"src/lib/tasks/move.ts\"() {\n \"use strict\";\n init_parse_move();\n init_utils();\n }\n});\n\n// src/lib/tasks/pull.ts\nvar pull_exports = {};\n__export(pull_exports, {\n pullTask: () => pullTask\n});\nfunction pullTask(remote, branch, customArgs) {\n const commands = [\"pull\", ...customArgs];\n if (remote && branch) {\n commands.splice(1, 0, remote, branch);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(stdOut, stdErr) {\n return parsePullResult(stdOut, stdErr);\n },\n onError(result, _error, _done, fail) {\n const pullError = parsePullErrorResult(\n bufferToString(result.stdOut),\n bufferToString(result.stdErr)\n );\n if (pullError) {\n return fail(new GitResponseError(pullError));\n }\n fail(_error);\n }\n };\n}\nvar init_pull = __esm({\n \"src/lib/tasks/pull.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_pull();\n init_utils();\n }\n});\n\n// src/lib/responses/GetRemoteSummary.ts\nfunction parseGetRemotes(text) {\n const remotes = {};\n forEach(text, ([name]) => remotes[name] = { name });\n return Object.values(remotes);\n}\nfunction parseGetRemotesVerbose(text) {\n const remotes = {};\n forEach(text, ([name, url, purpose]) => {\n if (!Object.hasOwn(remotes, name)) {\n remotes[name] = {\n name,\n refs: { fetch: \"\", push: \"\" }\n };\n }\n if (purpose && url) {\n remotes[name].refs[purpose.replace(/[^a-z]/g, \"\")] = url;\n }\n });\n return Object.values(remotes);\n}\nfunction forEach(text, handler) {\n forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\nvar init_GetRemoteSummary = __esm({\n \"src/lib/responses/GetRemoteSummary.ts\"() {\n \"use strict\";\n init_utils();\n }\n});\n\n// src/lib/tasks/remote.ts\nvar remote_exports = {};\n__export(remote_exports, {\n addRemoteTask: () => addRemoteTask,\n getRemotesTask: () => getRemotesTask,\n listRemotesTask: () => listRemotesTask,\n remoteTask: () => remoteTask,\n removeRemoteTask: () => removeRemoteTask\n});\nfunction addRemoteTask(remoteName, remoteRepo, customArgs) {\n return straightThroughStringTask([\"remote\", \"add\", ...customArgs, remoteName, remoteRepo]);\n}\nfunction getRemotesTask(verbose) {\n const commands = [\"remote\"];\n if (verbose) {\n commands.push(\"-v\");\n }\n return {\n commands,\n format: \"utf-8\",\n parser: verbose ? parseGetRemotesVerbose : parseGetRemotes\n };\n}\nfunction listRemotesTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"ls-remote\") {\n commands.unshift(\"ls-remote\");\n }\n return straightThroughStringTask(commands);\n}\nfunction remoteTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"remote\") {\n commands.unshift(\"remote\");\n }\n return straightThroughStringTask(commands);\n}\nfunction removeRemoteTask(remoteName) {\n return straightThroughStringTask([\"remote\", \"remove\", remoteName]);\n}\nvar init_remote = __esm({\n \"src/lib/tasks/remote.ts\"() {\n \"use strict\";\n init_GetRemoteSummary();\n init_task();\n }\n});\n\n// src/lib/tasks/stash-list.ts\nvar stash_list_exports = {};\n__export(stash_list_exports, {\n stashListTask: () => stashListTask\n});\nfunction stashListTask(opt = {}, customArgs) {\n const options = parseLogOptions(opt);\n const commands = [\"stash\", \"list\", ...options.commands, ...customArgs];\n const parser4 = createListLogSummaryParser(\n options.splitter,\n options.fields,\n logFormatFromCommand(commands)\n );\n return validateLogFormatConfig(commands) || {\n commands,\n format: \"utf-8\",\n parser: parser4\n };\n}\nvar init_stash_list = __esm({\n \"src/lib/tasks/stash-list.ts\"() {\n \"use strict\";\n init_log_format();\n init_parse_list_log_summary();\n init_diff();\n init_log();\n }\n});\n\n// src/lib/tasks/sub-module.ts\nvar sub_module_exports = {};\n__export(sub_module_exports, {\n addSubModuleTask: () => addSubModuleTask,\n initSubModuleTask: () => initSubModuleTask,\n subModuleTask: () => subModuleTask,\n updateSubModuleTask: () => updateSubModuleTask\n});\nfunction addSubModuleTask(repo, path) {\n return subModuleTask([\"add\", repo, path]);\n}\nfunction initSubModuleTask(customArgs) {\n return subModuleTask([\"init\", ...customArgs]);\n}\nfunction subModuleTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"submodule\") {\n commands.unshift(\"submodule\");\n }\n return straightThroughStringTask(commands);\n}\nfunction updateSubModuleTask(customArgs) {\n return subModuleTask([\"update\", ...customArgs]);\n}\nvar init_sub_module = __esm({\n \"src/lib/tasks/sub-module.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/TagList.ts\nfunction singleSorted(a, b) {\n const aIsNum = Number.isNaN(a);\n const bIsNum = Number.isNaN(b);\n if (aIsNum !== bIsNum) {\n return aIsNum ? 1 : -1;\n }\n return aIsNum ? sorted(a, b) : 0;\n}\nfunction sorted(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction trimmed(input) {\n return input.trim();\n}\nfunction toNumber(input) {\n if (typeof input === \"string\") {\n return parseInt(input.replace(/^\\D+/g, \"\"), 10) || 0;\n }\n return 0;\n}\nvar TagList, parseTagList;\nvar init_TagList = __esm({\n \"src/lib/responses/TagList.ts\"() {\n \"use strict\";\n TagList = class {\n constructor(all, latest) {\n this.all = all;\n this.latest = latest;\n }\n };\n parseTagList = function(data, customSort = false) {\n const tags = data.split(\"\\n\").map(trimmed).filter(Boolean);\n if (!customSort) {\n tags.sort(function(tagA, tagB) {\n const partsA = tagA.split(\".\");\n const partsB = tagB.split(\".\");\n if (partsA.length === 1 || partsB.length === 1) {\n return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n }\n for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n if (diff) {\n return diff;\n }\n }\n return 0;\n });\n }\n const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf(\".\") >= 0);\n return new TagList(tags, latest);\n };\n }\n});\n\n// src/lib/tasks/tag.ts\nvar tag_exports = {};\n__export(tag_exports, {\n addAnnotatedTagTask: () => addAnnotatedTagTask,\n addTagTask: () => addTagTask,\n tagListTask: () => tagListTask\n});\nfunction tagListTask(customArgs = []) {\n const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n return {\n format: \"utf-8\",\n commands: [\"tag\", \"-l\", ...customArgs],\n parser(text) {\n return parseTagList(text, hasCustomSort);\n }\n };\n}\nfunction addTagTask(name) {\n return {\n format: \"utf-8\",\n commands: [\"tag\", name],\n parser() {\n return { name };\n }\n };\n}\nfunction addAnnotatedTagTask(name, tagMessage) {\n return {\n format: \"utf-8\",\n commands: [\"tag\", \"-a\", \"-m\", tagMessage, name],\n parser() {\n return { name };\n }\n };\n}\nvar init_tag = __esm({\n \"src/lib/tasks/tag.ts\"() {\n \"use strict\";\n init_TagList();\n }\n});\n\n// src/git.js\nvar require_git = __commonJS({\n \"src/git.js\"(exports, module) {\n \"use strict\";\n var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS(git_executor_exports));\n var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS(simple_git_api_exports));\n var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS(scheduler_exports));\n var { adhocExecTask: adhocExecTask2, configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS(task_exports));\n var {\n asArray: asArray2,\n filterArray: filterArray2,\n filterPrimitives: filterPrimitives2,\n filterString: filterString2,\n filterStringOrStringArray: filterStringOrStringArray2,\n filterType: filterType2,\n getTrailingOptions: getTrailingOptions2,\n trailingFunctionArgument: trailingFunctionArgument2,\n trailingOptionsArgument: trailingOptionsArgument2\n } = (init_utils(), __toCommonJS(utils_exports));\n var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS(apply_patch_exports));\n var {\n branchTask: branchTask2,\n branchLocalTask: branchLocalTask2,\n deleteBranchesTask: deleteBranchesTask2,\n deleteBranchTask: deleteBranchTask2\n } = (init_branch(), __toCommonJS(branch_exports));\n var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS(check_ignore_exports));\n var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS(check_is_repo_exports));\n var { cloneTask: cloneTask2, cloneMirrorTask: cloneMirrorTask2 } = (init_clone(), __toCommonJS(clone_exports));\n var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS(clean_exports));\n var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS(diff_exports));\n var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS(fetch_exports));\n var { moveTask: moveTask2 } = (init_move(), __toCommonJS(move_exports));\n var { pullTask: pullTask2 } = (init_pull(), __toCommonJS(pull_exports));\n var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS(push_exports));\n var {\n addRemoteTask: addRemoteTask2,\n getRemotesTask: getRemotesTask2,\n listRemotesTask: listRemotesTask2,\n remoteTask: remoteTask2,\n removeRemoteTask: removeRemoteTask2\n } = (init_remote(), __toCommonJS(remote_exports));\n var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS(reset_exports));\n var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS(stash_list_exports));\n var {\n addSubModuleTask: addSubModuleTask2,\n initSubModuleTask: initSubModuleTask2,\n subModuleTask: subModuleTask2,\n updateSubModuleTask: updateSubModuleTask2\n } = (init_sub_module(), __toCommonJS(sub_module_exports));\n var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS(tag_exports));\n var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS(task_exports));\n function Git2(options, plugins) {\n this._plugins = plugins;\n this._executor = new GitExecutor2(\n options.baseDir,\n new Scheduler2(options.maxConcurrentProcesses),\n plugins\n );\n this._trimmed = options.trimmed;\n }\n (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2;\n Git2.prototype.customBinary = function(command) {\n this._plugins.reconfigure(\"binary\", command);\n return this;\n };\n Git2.prototype.env = function(name, value) {\n if (arguments.length === 1 && typeof name === \"object\") {\n this._executor.env = name;\n } else {\n (this._executor.env = this._executor.env || {})[name] = value;\n }\n return this;\n };\n Git2.prototype.stashList = function(options) {\n return this._runTask(\n stashListTask2(\n trailingOptionsArgument2(arguments) || {},\n filterArray2(options) && options || []\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n function createCloneTask(api, task, repoPath, localPath) {\n if (typeof repoPath !== \"string\") {\n return configurationErrorTask2(`git.${api}() requires a string 'repoPath'`);\n }\n return task(repoPath, filterType2(localPath, filterString2), getTrailingOptions2(arguments));\n }\n Git2.prototype.clone = function() {\n return this._runTask(\n createCloneTask(\"clone\", cloneTask2, ...arguments),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.mirror = function() {\n return this._runTask(\n createCloneTask(\"mirror\", cloneMirrorTask2, ...arguments),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.mv = function(from, to) {\n return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.checkoutLatestTag = function(then) {\n var git = this;\n return this.pull(function() {\n git.tags(function(err, tags) {\n git.checkout(tags.latest, then);\n });\n });\n };\n Git2.prototype.pull = function(remote, branch, options, then) {\n return this._runTask(\n pullTask2(\n filterType2(remote, filterString2),\n filterType2(branch, filterString2),\n getTrailingOptions2(arguments)\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.fetch = function(remote, branch) {\n return this._runTask(\n fetchTask2(\n filterType2(remote, filterString2),\n filterType2(branch, filterString2),\n getTrailingOptions2(arguments)\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.silent = function(silence) {\n return this._runTask(\n adhocExecTask2(\n () => console.warn(\n \"simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this method will be removed.\"\n )\n )\n );\n };\n Git2.prototype.tags = function(options, then) {\n return this._runTask(\n tagListTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.rebase = function() {\n return this._runTask(\n straightThroughStringTask2([\"rebase\", ...getTrailingOptions2(arguments)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.reset = function(mode) {\n return this._runTask(\n resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.revert = function(commit) {\n const next = trailingFunctionArgument2(arguments);\n if (typeof commit !== \"string\") {\n return this._runTask(configurationErrorTask2(\"Commit must be a string\"), next);\n }\n return this._runTask(\n straightThroughStringTask2([\"revert\", ...getTrailingOptions2(arguments, 0, true), commit]),\n next\n );\n };\n Git2.prototype.addTag = function(name) {\n const task = typeof name === \"string\" ? addTagTask2(name) : configurationErrorTask2(\"Git.addTag requires a tag name\");\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) {\n return this._runTask(\n addAnnotatedTagTask2(tagName, tagMessage),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) {\n return this._runTask(\n deleteBranchTask2(branchName, typeof forceDelete === \"boolean\" ? forceDelete : false),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) {\n return this._runTask(\n deleteBranchesTask2(branchNames, typeof forceDelete === \"boolean\" ? forceDelete : false),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.branch = function(options, then) {\n return this._runTask(\n branchTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.branchLocal = function(then) {\n return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.raw = function(commands) {\n const createRestCommands = !Array.isArray(commands);\n const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n for (let i = 0; i < command.length && createRestCommands; i++) {\n if (!filterPrimitives2(command[i])) {\n command.splice(i, command.length - i);\n break;\n }\n }\n command.push(...getTrailingOptions2(arguments, 0, true));\n var next = trailingFunctionArgument2(arguments);\n if (!command.length) {\n return this._runTask(\n configurationErrorTask2(\"Raw: must supply one or more command to execute\"),\n next\n );\n }\n return this._runTask(straightThroughStringTask2(command, this._trimmed), next);\n };\n Git2.prototype.submoduleAdd = function(repo, path, then) {\n return this._runTask(addSubModuleTask2(repo, path), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.submoduleUpdate = function(args, then) {\n return this._runTask(\n updateSubModuleTask2(getTrailingOptions2(arguments, true)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.submoduleInit = function(args, then) {\n return this._runTask(\n initSubModuleTask2(getTrailingOptions2(arguments, true)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.subModule = function(options, then) {\n return this._runTask(\n subModuleTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.listRemote = function() {\n return this._runTask(\n listRemotesTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.addRemote = function(remoteName, remoteRepo, then) {\n return this._runTask(\n addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.removeRemote = function(remoteName, then) {\n return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.getRemotes = function(verbose, then) {\n return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.remote = function(options, then) {\n return this._runTask(\n remoteTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.tag = function(options, then) {\n const command = getTrailingOptions2(arguments);\n if (command[0] !== \"tag\") {\n command.unshift(\"tag\");\n }\n return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.updateServerInfo = function(then) {\n return this._runTask(\n straightThroughStringTask2([\"update-server-info\"]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.pushTags = function(remote, then) {\n const task = pushTagsTask2(\n { remote: filterType2(remote, filterString2) },\n getTrailingOptions2(arguments)\n );\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.rm = function(files) {\n return this._runTask(\n straightThroughStringTask2([\"rm\", \"-f\", ...asArray2(files)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.rmKeepLocal = function(files) {\n return this._runTask(\n straightThroughStringTask2([\"rm\", \"--cached\", ...asArray2(files)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.catFile = function(options, then) {\n return this._catFile(\"utf-8\", arguments);\n };\n Git2.prototype.binaryCatFile = function() {\n return this._catFile(\"buffer\", arguments);\n };\n Git2.prototype._catFile = function(format, args) {\n var handler = trailingFunctionArgument2(args);\n var command = [\"cat-file\"];\n var options = args[0];\n if (typeof options === \"string\") {\n return this._runTask(\n configurationErrorTask2(\"Git.catFile: options must be supplied as an array of strings\"),\n handler\n );\n }\n if (Array.isArray(options)) {\n command.push.apply(command, options);\n }\n const task = format === \"buffer\" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command);\n return this._runTask(task, handler);\n };\n Git2.prototype.diff = function(options, then) {\n const task = filterString2(options) ? configurationErrorTask2(\n \"git.diff: supplying options as a single string is no longer supported, switch to an array of strings\"\n ) : straightThroughStringTask2([\"diff\", ...getTrailingOptions2(arguments)]);\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.diffSummary = function() {\n return this._runTask(\n diffSummaryTask2(getTrailingOptions2(arguments, 1)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.applyPatch = function(patches) {\n const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(\n `git.applyPatch requires one or more string patches as the first argument`\n ) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1)));\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.revparse = function() {\n const commands = [\"rev-parse\", ...getTrailingOptions2(arguments, true)];\n return this._runTask(\n straightThroughStringTask2(commands, true),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.clean = function(mode, options, then) {\n const usingCleanOptionsArray = isCleanOptionsArray2(mode);\n const cleanMode = usingCleanOptionsArray && mode.join(\"\") || filterType2(mode, filterString2) || \"\";\n const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n return this._runTask(\n cleanWithOptionsTask2(cleanMode, customArgs),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.exec = function(then) {\n const task = {\n commands: [],\n format: \"utf-8\",\n parser() {\n if (typeof then === \"function\") {\n then();\n }\n }\n };\n return this._runTask(task);\n };\n Git2.prototype.clearQueue = function() {\n return this._runTask(\n adhocExecTask2(\n () => console.warn(\n \"simple-git deprecation notice: clearQueue() is deprecated and will be removed, switch to using the abortPlugin instead.\"\n )\n )\n );\n };\n Git2.prototype.checkIgnore = function(pathnames, then) {\n return this._runTask(\n checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.checkIsRepo = function(checkType, then) {\n return this._runTask(\n checkIsRepoTask2(filterType2(checkType, filterString2)),\n trailingFunctionArgument2(arguments)\n );\n };\n module.exports = Git2;\n }\n});\n\n// src/lib/api.ts\ninit_pathspec();\n\n// src/lib/errors/git-construct-error.ts\ninit_git_error();\nvar GitConstructError = class extends GitError {\n constructor(config, message) {\n super(void 0, message);\n this.config = config;\n }\n};\n\n// src/lib/api.ts\ninit_git_error();\n\n// src/lib/errors/git-plugin-error.ts\ninit_git_error();\nvar GitPluginError = class extends GitError {\n constructor(task, plugin, message) {\n super(task, message);\n this.task = task;\n this.plugin = plugin;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\n\n// src/lib/api.ts\ninit_git_response_error();\ninit_task_configuration_error();\ninit_check_is_repo();\ninit_clean();\ninit_config();\ninit_diff_name_status();\ninit_grep();\ninit_reset();\n\n// src/lib/plugins/abort-plugin.ts\nfunction abortPlugin(signal) {\n if (!signal) {\n return;\n }\n const onSpawnAfter = {\n type: \"spawn.after\",\n action(_data, context) {\n function kill() {\n context.kill(new GitPluginError(void 0, \"abort\", \"Abort signal received\"));\n }\n signal.addEventListener(\"abort\", kill);\n context.spawned.on(\"close\", () => signal.removeEventListener(\"abort\", kill));\n }\n };\n const onSpawnBefore = {\n type: \"spawn.before\",\n action(_data, context) {\n if (signal.aborted) {\n context.kill(new GitPluginError(void 0, \"abort\", \"Abort already signaled\"));\n }\n }\n };\n return [onSpawnBefore, onSpawnAfter];\n}\n\n// src/lib/plugins/block-unsafe-operations-plugin.ts\nfunction isConfigSwitch(arg) {\n return typeof arg === \"string\" && arg.trim().toLowerCase() === \"-c\";\n}\nfunction isCloneSwitch(char, arg) {\n if (typeof arg !== \"string\" || !arg.includes(char)) {\n return false;\n }\n const token = arg.replace(/\\0g/, \"\").replace(/^(--no)?-{1,2}/, \"\");\n return /^[\\dlsqvnobucj]+\\b/.test(token);\n}\nfunction preventProtocolOverride(arg, next) {\n if (!isConfigSwitch(arg)) {\n return;\n }\n if (!/^\\s*protocol(.[a-z]+)?.allow/.test(next)) {\n return;\n }\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n \"Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol\"\n );\n}\nfunction preventUploadPack(arg, method) {\n if (/^\\s*--(upload|receive)-pack/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`\n );\n }\n if (method === \"clone\" && isCloneSwitch(\"u\", arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of clone with option -u is not permitted without enabling allowUnsafePack`\n );\n }\n if (method === \"push\" && /^\\s*--exec\\b/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of push with option --exec is not permitted without enabling allowUnsafePack`\n );\n }\n}\nfunction blockUnsafeOperationsPlugin({\n allowUnsafeProtocolOverride = false,\n allowUnsafePack = false\n} = {}) {\n return {\n type: \"spawn.args\",\n action(args, context) {\n args.forEach((current, index) => {\n const next = index < args.length ? args[index + 1] : \"\";\n allowUnsafeProtocolOverride || preventProtocolOverride(current, next);\n allowUnsafePack || preventUploadPack(current, context.method);\n });\n return args;\n }\n };\n}\n\n// src/lib/plugins/command-config-prefixing-plugin.ts\ninit_utils();\nfunction commandConfigPrefixingPlugin(configuration) {\n const prefix = prefixedArray(configuration, \"-c\");\n return {\n type: \"spawn.args\",\n action(data) {\n return [...prefix, ...data];\n }\n };\n}\n\n// src/lib/plugins/completion-detection.plugin.ts\ninit_utils();\nimport { deferred } from \"@kwsites/promise-deferred\";\nvar never = deferred().promise;\nfunction completionDetectionPlugin({\n onClose = true,\n onExit = 50\n} = {}) {\n function createEvents() {\n let exitCode = -1;\n const events = {\n close: deferred(),\n closeTimeout: deferred(),\n exit: deferred(),\n exitTimeout: deferred()\n };\n const result = Promise.race([\n onClose === false ? never : events.closeTimeout.promise,\n onExit === false ? never : events.exitTimeout.promise\n ]);\n configureTimeout(onClose, events.close, events.closeTimeout);\n configureTimeout(onExit, events.exit, events.exitTimeout);\n return {\n close(code) {\n exitCode = code;\n events.close.done();\n },\n exit(code) {\n exitCode = code;\n events.exit.done();\n },\n get exitCode() {\n return exitCode;\n },\n result\n };\n }\n function configureTimeout(flag, event, timeout) {\n if (flag === false) {\n return;\n }\n (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n }\n return {\n type: \"spawn.after\",\n async action(_data, { spawned, close }) {\n const events = createEvents();\n let deferClose = true;\n let quickClose = () => void (deferClose = false);\n spawned.stdout?.on(\"data\", quickClose);\n spawned.stderr?.on(\"data\", quickClose);\n spawned.on(\"error\", quickClose);\n spawned.on(\"close\", (code) => events.close(code));\n spawned.on(\"exit\", (code) => events.exit(code));\n try {\n await events.result;\n if (deferClose) {\n await delay(50);\n }\n close(events.exitCode);\n } catch (err) {\n close(events.exitCode, err);\n }\n }\n };\n}\n\n// src/lib/plugins/custom-binary.plugin.ts\ninit_utils();\nvar WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nvar WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\nfunction isBadArgument(arg) {\n return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_~-]+)$/i.test(arg);\n}\nfunction toBinaryConfig(input, allowUnsafe) {\n if (input.length < 1 || input.length > 2) {\n throw new GitPluginError(void 0, \"binary\", WRONG_NUMBER_ERR);\n }\n const isBad = input.some(isBadArgument);\n if (isBad) {\n if (allowUnsafe) {\n console.warn(WRONG_CHARS_ERR);\n } else {\n throw new GitPluginError(void 0, \"binary\", WRONG_CHARS_ERR);\n }\n }\n const [binary, prefix] = input;\n return {\n binary,\n prefix\n };\n}\nfunction customBinaryPlugin(plugins, input = [\"git\"], allowUnsafe = false) {\n let config = toBinaryConfig(asArray(input), allowUnsafe);\n plugins.on(\"binary\", (input2) => {\n config = toBinaryConfig(asArray(input2), allowUnsafe);\n });\n plugins.append(\"spawn.binary\", () => {\n return config.binary;\n });\n plugins.append(\"spawn.args\", (data) => {\n return config.prefix ? [config.prefix, ...data] : data;\n });\n}\n\n// src/lib/plugins/error-detection.plugin.ts\ninit_git_error();\nfunction isTaskError(result) {\n return !!(result.exitCode && result.stdErr.length);\n}\nfunction getErrorMessage(result) {\n return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\nfunction errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) {\n return (error, result) => {\n if (!overwrite && error || !isError(result)) {\n return error;\n }\n return errorMessage(result);\n };\n}\nfunction errorDetectionPlugin(config) {\n return {\n type: \"task.error\",\n action(data, context) {\n const error = config(data.error, {\n stdErr: context.stdErr,\n stdOut: context.stdOut,\n exitCode: context.exitCode\n });\n if (Buffer.isBuffer(error)) {\n return { error: new GitError(void 0, error.toString(\"utf-8\")) };\n }\n return {\n error\n };\n }\n };\n}\n\n// src/lib/plugins/plugin-store.ts\ninit_utils();\nimport { EventEmitter } from \"node:events\";\nvar PluginStore = class {\n constructor() {\n this.plugins = /* @__PURE__ */ new Set();\n this.events = new EventEmitter();\n }\n on(type, listener) {\n this.events.on(type, listener);\n }\n reconfigure(type, data) {\n this.events.emit(type, data);\n }\n append(type, action) {\n const plugin = append(this.plugins, { type, action });\n return () => this.plugins.delete(plugin);\n }\n add(plugin) {\n const plugins = [];\n asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2)));\n return () => {\n plugins.forEach((plugin2) => this.plugins.delete(plugin2));\n };\n }\n exec(type, data, context) {\n let output = data;\n const contextual = Object.freeze(Object.create(context));\n for (const plugin of this.plugins) {\n if (plugin.type === type) {\n output = plugin.action(output, contextual);\n }\n }\n return output;\n }\n};\n\n// src/lib/plugins/progress-monitor-plugin.ts\ninit_utils();\nfunction progressMonitorPlugin(progress) {\n const progressCommand = \"--progress\";\n const progressMethods = [\"checkout\", \"clone\", \"fetch\", \"pull\", \"push\"];\n const onProgress = {\n type: \"spawn.after\",\n action(_data, context) {\n if (!context.commands.includes(progressCommand)) {\n return;\n }\n context.spawned.stderr?.on(\"data\", (chunk) => {\n const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString(\"utf8\"));\n if (!message) {\n return;\n }\n progress({\n method: context.method,\n stage: progressEventStage(message[1]),\n progress: asNumber(message[2]),\n processed: asNumber(message[3]),\n total: asNumber(message[4])\n });\n });\n }\n };\n const onArgs = {\n type: \"spawn.args\",\n action(args, context) {\n if (!progressMethods.includes(context.method)) {\n return args;\n }\n return including(args, progressCommand);\n }\n };\n return [onArgs, onProgress];\n}\nfunction progressEventStage(input) {\n return String(input.toLowerCase().split(\" \", 1)) || \"unknown\";\n}\n\n// src/lib/plugins/spawn-options-plugin.ts\ninit_utils();\nfunction spawnOptionsPlugin(spawnOptions) {\n const options = pick(spawnOptions, [\"uid\", \"gid\"]);\n return {\n type: \"spawn.options\",\n action(data) {\n return { ...options, ...data };\n }\n };\n}\n\n// src/lib/plugins/timout-plugin.ts\nfunction timeoutPlugin({\n block,\n stdErr = true,\n stdOut = true\n}) {\n if (block > 0) {\n return {\n type: \"spawn.after\",\n action(_data, context) {\n let timeout;\n function wait() {\n timeout && clearTimeout(timeout);\n timeout = setTimeout(kill, block);\n }\n function stop() {\n context.spawned.stdout?.off(\"data\", wait);\n context.spawned.stderr?.off(\"data\", wait);\n context.spawned.off(\"exit\", stop);\n context.spawned.off(\"close\", stop);\n timeout && clearTimeout(timeout);\n }\n function kill() {\n stop();\n context.kill(new GitPluginError(void 0, \"timeout\", `block timeout reached`));\n }\n stdOut && context.spawned.stdout?.on(\"data\", wait);\n stdErr && context.spawned.stderr?.on(\"data\", wait);\n context.spawned.on(\"exit\", stop);\n context.spawned.on(\"close\", stop);\n wait();\n }\n };\n }\n}\n\n// src/lib/plugins/suffix-paths.plugin.ts\ninit_pathspec();\nfunction suffixPathsPlugin() {\n return {\n type: \"spawn.args\",\n action(data) {\n const prefix = [];\n let suffix;\n function append2(args) {\n (suffix = suffix || []).push(...args);\n }\n for (let i = 0; i < data.length; i++) {\n const param = data[i];\n if (isPathSpec(param)) {\n append2(toPaths(param));\n continue;\n }\n if (param === \"--\") {\n append2(\n data.slice(i + 1).flatMap((item) => isPathSpec(item) && toPaths(item) || item)\n );\n break;\n }\n prefix.push(param);\n }\n return !suffix ? prefix : [...prefix, \"--\", ...suffix.map(String)];\n }\n };\n}\n\n// src/lib/git-factory.ts\ninit_utils();\nvar Git = require_git();\nfunction gitInstanceFactory(baseDir, options) {\n const plugins = new PluginStore();\n const config = createInstanceConfig(\n baseDir && (typeof baseDir === \"string\" ? { baseDir } : baseDir) || {},\n options\n );\n if (!folderExists(config.baseDir)) {\n throw new GitConstructError(\n config,\n `Cannot use simple-git on a directory that does not exist`\n );\n }\n if (Array.isArray(config.config)) {\n plugins.add(commandConfigPrefixingPlugin(config.config));\n }\n plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n plugins.add(suffixPathsPlugin());\n plugins.add(completionDetectionPlugin(config.completion));\n config.abort && plugins.add(abortPlugin(config.abort));\n config.progress && plugins.add(progressMonitorPlugin(config.progress));\n config.timeout && plugins.add(timeoutPlugin(config.timeout));\n config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n config.errors && plugins.add(errorDetectionPlugin(config.errors));\n customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n return new Git(config, plugins);\n}\n\n// src/lib/runners/promise-wrapped.ts\ninit_git_response_error();\nvar functionNamesBuilderApi = [\"customBinary\", \"env\", \"outputHandler\", \"silent\"];\nvar functionNamesPromiseApi = [\n \"add\",\n \"addAnnotatedTag\",\n \"addConfig\",\n \"addRemote\",\n \"addTag\",\n \"applyPatch\",\n \"binaryCatFile\",\n \"branch\",\n \"branchLocal\",\n \"catFile\",\n \"checkIgnore\",\n \"checkIsRepo\",\n \"checkout\",\n \"checkoutBranch\",\n \"checkoutLatestTag\",\n \"checkoutLocalBranch\",\n \"clean\",\n \"clone\",\n \"commit\",\n \"cwd\",\n \"deleteLocalBranch\",\n \"deleteLocalBranches\",\n \"diff\",\n \"diffSummary\",\n \"exec\",\n \"fetch\",\n \"getRemotes\",\n \"init\",\n \"listConfig\",\n \"listRemote\",\n \"log\",\n \"merge\",\n \"mergeFromTo\",\n \"mirror\",\n \"mv\",\n \"pull\",\n \"push\",\n \"pushTags\",\n \"raw\",\n \"rebase\",\n \"remote\",\n \"removeRemote\",\n \"reset\",\n \"revert\",\n \"revparse\",\n \"rm\",\n \"rmKeepLocal\",\n \"show\",\n \"stash\",\n \"stashList\",\n \"status\",\n \"subModule\",\n \"submoduleAdd\",\n \"submoduleInit\",\n \"submoduleUpdate\",\n \"tag\",\n \"tags\",\n \"updateServerInfo\"\n];\nfunction gitP(...args) {\n let git;\n let chain = Promise.resolve();\n try {\n git = gitInstanceFactory(...args);\n } catch (e) {\n chain = Promise.reject(e);\n }\n function builderReturn() {\n return promiseApi;\n }\n function chainReturn() {\n return chain;\n }\n const promiseApi = [...functionNamesBuilderApi, ...functionNamesPromiseApi].reduce(\n (api, name) => {\n const isAsync = functionNamesPromiseApi.includes(name);\n const valid = isAsync ? asyncWrapper(name, git) : syncWrapper(name, git, api);\n const alternative = isAsync ? chainReturn : builderReturn;\n Object.defineProperty(api, name, {\n enumerable: false,\n configurable: false,\n value: git ? valid : alternative\n });\n return api;\n },\n {}\n );\n return promiseApi;\n function asyncWrapper(fn, git2) {\n return function(...args2) {\n if (typeof args2[args2.length] === \"function\") {\n throw new TypeError(\n \"Promise interface requires that handlers are not supplied inline, trailing function not allowed in call to \" + fn\n );\n }\n return chain.then(function() {\n return new Promise(function(resolve, reject) {\n const callback = (err, result) => {\n if (err) {\n return reject(toError(err));\n }\n resolve(result);\n };\n args2.push(callback);\n git2[fn].apply(git2, args2);\n });\n });\n };\n }\n function syncWrapper(fn, git2, api) {\n return (...args2) => {\n git2[fn](...args2);\n return api;\n };\n }\n}\nfunction toError(error) {\n if (error instanceof Error) {\n return error;\n }\n if (typeof error === \"string\") {\n return new Error(error);\n }\n return new GitResponseError(error);\n}\n\n// src/esm.mjs\nvar simpleGit = gitInstanceFactory;\nvar esm_default = gitInstanceFactory;\nexport {\n CheckRepoActions,\n CleanOptions,\n DiffNameStatus,\n GitConfigScope,\n GitConstructError,\n GitError,\n GitPluginError,\n GitResponseError,\n ResetMode,\n TaskConfigurationError,\n esm_default as default,\n gitP,\n grepQueryBuilder,\n pathspec,\n simpleGit\n};\n//# sourceMappingURL=index.js.map\n","\n;(function (name, root, factory) {\n if (typeof exports === 'object') {\n module.exports = factory()\n module.exports['default'] = factory()\n }\n /* istanbul ignore next */\n else if (typeof define === 'function' && define.amd) {\n define(factory)\n }\n else {\n root[name] = factory()\n }\n}('slugify', this, function () {\n var charMap = JSON.parse('{\"$\":\"dollar\",\"%\":\"percent\",\"&\":\"and\",\"<\":\"less\",\">\":\"greater\",\"|\":\"or\",\"¢\":\"cent\",\"£\":\"pound\",\"¤\":\"currency\",\"¥\":\"yen\",\"©\":\"(c)\",\"ª\":\"a\",\"®\":\"(r)\",\"º\":\"o\",\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"Æ\":\"AE\",\"Ç\":\"C\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"Ð\":\"D\",\"Ñ\":\"N\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"Ý\":\"Y\",\"Þ\":\"TH\",\"ß\":\"ss\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"æ\":\"ae\",\"ç\":\"c\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"ð\":\"d\",\"ñ\":\"n\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"ý\":\"y\",\"þ\":\"th\",\"ÿ\":\"y\",\"Ā\":\"A\",\"ā\":\"a\",\"Ă\":\"A\",\"ă\":\"a\",\"Ą\":\"A\",\"ą\":\"a\",\"Ć\":\"C\",\"ć\":\"c\",\"Č\":\"C\",\"č\":\"c\",\"Ď\":\"D\",\"ď\":\"d\",\"Đ\":\"DJ\",\"đ\":\"dj\",\"Ē\":\"E\",\"ē\":\"e\",\"Ė\":\"E\",\"ė\":\"e\",\"Ę\":\"e\",\"ę\":\"e\",\"Ě\":\"E\",\"ě\":\"e\",\"Ğ\":\"G\",\"ğ\":\"g\",\"Ģ\":\"G\",\"ģ\":\"g\",\"Ĩ\":\"I\",\"ĩ\":\"i\",\"Ī\":\"i\",\"ī\":\"i\",\"Į\":\"I\",\"į\":\"i\",\"İ\":\"I\",\"ı\":\"i\",\"Ķ\":\"k\",\"ķ\":\"k\",\"Ļ\":\"L\",\"ļ\":\"l\",\"Ľ\":\"L\",\"ľ\":\"l\",\"Ł\":\"L\",\"ł\":\"l\",\"Ń\":\"N\",\"ń\":\"n\",\"Ņ\":\"N\",\"ņ\":\"n\",\"Ň\":\"N\",\"ň\":\"n\",\"Ō\":\"O\",\"ō\":\"o\",\"Ő\":\"O\",\"ő\":\"o\",\"Œ\":\"OE\",\"œ\":\"oe\",\"Ŕ\":\"R\",\"ŕ\":\"r\",\"Ř\":\"R\",\"ř\":\"r\",\"Ś\":\"S\",\"ś\":\"s\",\"Ş\":\"S\",\"ş\":\"s\",\"Š\":\"S\",\"š\":\"s\",\"Ţ\":\"T\",\"ţ\":\"t\",\"Ť\":\"T\",\"ť\":\"t\",\"Ũ\":\"U\",\"ũ\":\"u\",\"Ū\":\"u\",\"ū\":\"u\",\"Ů\":\"U\",\"ů\":\"u\",\"Ű\":\"U\",\"ű\":\"u\",\"Ų\":\"U\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"ź\":\"z\",\"Ż\":\"Z\",\"ż\":\"z\",\"Ž\":\"Z\",\"ž\":\"z\",\"Ə\":\"E\",\"ƒ\":\"f\",\"Ơ\":\"O\",\"ơ\":\"o\",\"Ư\":\"U\",\"ư\":\"u\",\"Lj\":\"LJ\",\"lj\":\"lj\",\"Nj\":\"NJ\",\"nj\":\"nj\",\"Ș\":\"S\",\"ș\":\"s\",\"Ț\":\"T\",\"ț\":\"t\",\"ə\":\"e\",\"˚\":\"o\",\"Ά\":\"A\",\"Έ\":\"E\",\"Ή\":\"H\",\"Ί\":\"I\",\"Ό\":\"O\",\"Ύ\":\"Y\",\"Ώ\":\"W\",\"ΐ\":\"i\",\"Α\":\"A\",\"Β\":\"B\",\"Γ\":\"G\",\"Δ\":\"D\",\"Ε\":\"E\",\"Ζ\":\"Z\",\"Η\":\"H\",\"Θ\":\"8\",\"Ι\":\"I\",\"Κ\":\"K\",\"Λ\":\"L\",\"Μ\":\"M\",\"Ν\":\"N\",\"Ξ\":\"3\",\"Ο\":\"O\",\"Π\":\"P\",\"Ρ\":\"R\",\"Σ\":\"S\",\"Τ\":\"T\",\"Υ\":\"Y\",\"Φ\":\"F\",\"Χ\":\"X\",\"Ψ\":\"PS\",\"Ω\":\"W\",\"Ϊ\":\"I\",\"Ϋ\":\"Y\",\"ά\":\"a\",\"έ\":\"e\",\"ή\":\"h\",\"ί\":\"i\",\"ΰ\":\"y\",\"α\":\"a\",\"β\":\"b\",\"γ\":\"g\",\"δ\":\"d\",\"ε\":\"e\",\"ζ\":\"z\",\"η\":\"h\",\"θ\":\"8\",\"ι\":\"i\",\"κ\":\"k\",\"λ\":\"l\",\"μ\":\"m\",\"ν\":\"n\",\"ξ\":\"3\",\"ο\":\"o\",\"π\":\"p\",\"ρ\":\"r\",\"ς\":\"s\",\"σ\":\"s\",\"τ\":\"t\",\"υ\":\"y\",\"φ\":\"f\",\"χ\":\"x\",\"ψ\":\"ps\",\"ω\":\"w\",\"ϊ\":\"i\",\"ϋ\":\"y\",\"ό\":\"o\",\"ύ\":\"y\",\"ώ\":\"w\",\"Ё\":\"Yo\",\"Ђ\":\"DJ\",\"Є\":\"Ye\",\"І\":\"I\",\"Ї\":\"Yi\",\"Ј\":\"J\",\"Љ\":\"LJ\",\"Њ\":\"NJ\",\"Ћ\":\"C\",\"Џ\":\"DZ\",\"А\":\"A\",\"Б\":\"B\",\"В\":\"V\",\"Г\":\"G\",\"Д\":\"D\",\"Е\":\"E\",\"Ж\":\"Zh\",\"З\":\"Z\",\"И\":\"I\",\"Й\":\"J\",\"К\":\"K\",\"Л\":\"L\",\"М\":\"M\",\"Н\":\"N\",\"О\":\"O\",\"П\":\"P\",\"Р\":\"R\",\"С\":\"S\",\"Т\":\"T\",\"У\":\"U\",\"Ф\":\"F\",\"Х\":\"H\",\"Ц\":\"C\",\"Ч\":\"Ch\",\"Ш\":\"Sh\",\"Щ\":\"Sh\",\"Ъ\":\"U\",\"Ы\":\"Y\",\"Ь\":\"\",\"Э\":\"E\",\"Ю\":\"Yu\",\"Я\":\"Ya\",\"а\":\"a\",\"б\":\"b\",\"в\":\"v\",\"г\":\"g\",\"д\":\"d\",\"е\":\"e\",\"ж\":\"zh\",\"з\":\"z\",\"и\":\"i\",\"й\":\"j\",\"к\":\"k\",\"л\":\"l\",\"м\":\"m\",\"н\":\"n\",\"о\":\"o\",\"п\":\"p\",\"р\":\"r\",\"с\":\"s\",\"т\":\"t\",\"у\":\"u\",\"ф\":\"f\",\"х\":\"h\",\"ц\":\"c\",\"ч\":\"ch\",\"ш\":\"sh\",\"щ\":\"sh\",\"ъ\":\"u\",\"ы\":\"y\",\"ь\":\"\",\"э\":\"e\",\"ю\":\"yu\",\"я\":\"ya\",\"ё\":\"yo\",\"ђ\":\"dj\",\"є\":\"ye\",\"і\":\"i\",\"ї\":\"yi\",\"ј\":\"j\",\"љ\":\"lj\",\"њ\":\"nj\",\"ћ\":\"c\",\"ѝ\":\"u\",\"џ\":\"dz\",\"Ґ\":\"G\",\"ґ\":\"g\",\"Ғ\":\"GH\",\"ғ\":\"gh\",\"Қ\":\"KH\",\"қ\":\"kh\",\"Ң\":\"NG\",\"ң\":\"ng\",\"Ү\":\"UE\",\"ү\":\"ue\",\"Ұ\":\"U\",\"ұ\":\"u\",\"Һ\":\"H\",\"һ\":\"h\",\"Ә\":\"AE\",\"ә\":\"ae\",\"Ө\":\"OE\",\"ө\":\"oe\",\"Ա\":\"A\",\"Բ\":\"B\",\"Գ\":\"G\",\"Դ\":\"D\",\"Ե\":\"E\",\"Զ\":\"Z\",\"Է\":\"E\\'\",\"Ը\":\"Y\\'\",\"Թ\":\"T\\'\",\"Ժ\":\"JH\",\"Ի\":\"I\",\"Լ\":\"L\",\"Խ\":\"X\",\"Ծ\":\"C\\'\",\"Կ\":\"K\",\"Հ\":\"H\",\"Ձ\":\"D\\'\",\"Ղ\":\"GH\",\"Ճ\":\"TW\",\"Մ\":\"M\",\"Յ\":\"Y\",\"Ն\":\"N\",\"Շ\":\"SH\",\"Չ\":\"CH\",\"Պ\":\"P\",\"Ջ\":\"J\",\"Ռ\":\"R\\'\",\"Ս\":\"S\",\"Վ\":\"V\",\"Տ\":\"T\",\"Ր\":\"R\",\"Ց\":\"C\",\"Փ\":\"P\\'\",\"Ք\":\"Q\\'\",\"Օ\":\"O\\'\\'\",\"Ֆ\":\"F\",\"և\":\"EV\",\"ء\":\"a\",\"آ\":\"aa\",\"أ\":\"a\",\"ؤ\":\"u\",\"إ\":\"i\",\"ئ\":\"e\",\"ا\":\"a\",\"ب\":\"b\",\"ة\":\"h\",\"ت\":\"t\",\"ث\":\"th\",\"ج\":\"j\",\"ح\":\"h\",\"خ\":\"kh\",\"د\":\"d\",\"ذ\":\"th\",\"ر\":\"r\",\"ز\":\"z\",\"س\":\"s\",\"ش\":\"sh\",\"ص\":\"s\",\"ض\":\"dh\",\"ط\":\"t\",\"ظ\":\"z\",\"ع\":\"a\",\"غ\":\"gh\",\"ف\":\"f\",\"ق\":\"q\",\"ك\":\"k\",\"ل\":\"l\",\"م\":\"m\",\"ن\":\"n\",\"ه\":\"h\",\"و\":\"w\",\"ى\":\"a\",\"ي\":\"y\",\"ً\":\"an\",\"ٌ\":\"on\",\"ٍ\":\"en\",\"َ\":\"a\",\"ُ\":\"u\",\"ِ\":\"e\",\"ْ\":\"\",\"٠\":\"0\",\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"پ\":\"p\",\"چ\":\"ch\",\"ژ\":\"zh\",\"ک\":\"k\",\"گ\":\"g\",\"ی\":\"y\",\"۰\":\"0\",\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"฿\":\"baht\",\"ა\":\"a\",\"ბ\":\"b\",\"გ\":\"g\",\"დ\":\"d\",\"ე\":\"e\",\"ვ\":\"v\",\"ზ\":\"z\",\"თ\":\"t\",\"ი\":\"i\",\"კ\":\"k\",\"ლ\":\"l\",\"მ\":\"m\",\"ნ\":\"n\",\"ო\":\"o\",\"პ\":\"p\",\"ჟ\":\"zh\",\"რ\":\"r\",\"ს\":\"s\",\"ტ\":\"t\",\"უ\":\"u\",\"ფ\":\"f\",\"ქ\":\"k\",\"ღ\":\"gh\",\"ყ\":\"q\",\"შ\":\"sh\",\"ჩ\":\"ch\",\"ც\":\"ts\",\"ძ\":\"dz\",\"წ\":\"ts\",\"ჭ\":\"ch\",\"ხ\":\"kh\",\"ჯ\":\"j\",\"ჰ\":\"h\",\"Ṣ\":\"S\",\"ṣ\":\"s\",\"Ẁ\":\"W\",\"ẁ\":\"w\",\"Ẃ\":\"W\",\"ẃ\":\"w\",\"Ẅ\":\"W\",\"ẅ\":\"w\",\"ẞ\":\"SS\",\"Ạ\":\"A\",\"ạ\":\"a\",\"Ả\":\"A\",\"ả\":\"a\",\"Ấ\":\"A\",\"ấ\":\"a\",\"Ầ\":\"A\",\"ầ\":\"a\",\"Ẩ\":\"A\",\"ẩ\":\"a\",\"Ẫ\":\"A\",\"ẫ\":\"a\",\"Ậ\":\"A\",\"ậ\":\"a\",\"Ắ\":\"A\",\"ắ\":\"a\",\"Ằ\":\"A\",\"ằ\":\"a\",\"Ẳ\":\"A\",\"ẳ\":\"a\",\"Ẵ\":\"A\",\"ẵ\":\"a\",\"Ặ\":\"A\",\"ặ\":\"a\",\"Ẹ\":\"E\",\"ẹ\":\"e\",\"Ẻ\":\"E\",\"ẻ\":\"e\",\"Ẽ\":\"E\",\"ẽ\":\"e\",\"Ế\":\"E\",\"ế\":\"e\",\"Ề\":\"E\",\"ề\":\"e\",\"Ể\":\"E\",\"ể\":\"e\",\"Ễ\":\"E\",\"ễ\":\"e\",\"Ệ\":\"E\",\"ệ\":\"e\",\"Ỉ\":\"I\",\"ỉ\":\"i\",\"Ị\":\"I\",\"ị\":\"i\",\"Ọ\":\"O\",\"ọ\":\"o\",\"Ỏ\":\"O\",\"ỏ\":\"o\",\"Ố\":\"O\",\"ố\":\"o\",\"Ồ\":\"O\",\"ồ\":\"o\",\"Ổ\":\"O\",\"ổ\":\"o\",\"Ỗ\":\"O\",\"ỗ\":\"o\",\"Ộ\":\"O\",\"ộ\":\"o\",\"Ớ\":\"O\",\"ớ\":\"o\",\"Ờ\":\"O\",\"ờ\":\"o\",\"Ở\":\"O\",\"ở\":\"o\",\"Ỡ\":\"O\",\"ỡ\":\"o\",\"Ợ\":\"O\",\"ợ\":\"o\",\"Ụ\":\"U\",\"ụ\":\"u\",\"Ủ\":\"U\",\"ủ\":\"u\",\"Ứ\":\"U\",\"ứ\":\"u\",\"Ừ\":\"U\",\"ừ\":\"u\",\"Ử\":\"U\",\"ử\":\"u\",\"Ữ\":\"U\",\"ữ\":\"u\",\"Ự\":\"U\",\"ự\":\"u\",\"Ỳ\":\"Y\",\"ỳ\":\"y\",\"Ỵ\":\"Y\",\"ỵ\":\"y\",\"Ỷ\":\"Y\",\"ỷ\":\"y\",\"Ỹ\":\"Y\",\"ỹ\":\"y\",\"–\":\"-\",\"‘\":\"\\'\",\"’\":\"\\'\",\"“\":\"\\\\\\\"\",\"”\":\"\\\\\\\"\",\"„\":\"\\\\\\\"\",\"†\":\"+\",\"•\":\"*\",\"…\":\"...\",\"₠\":\"ecu\",\"₢\":\"cruzeiro\",\"₣\":\"french franc\",\"₤\":\"lira\",\"₥\":\"mill\",\"₦\":\"naira\",\"₧\":\"peseta\",\"₨\":\"rupee\",\"₩\":\"won\",\"₪\":\"new shequel\",\"₫\":\"dong\",\"€\":\"euro\",\"₭\":\"kip\",\"₮\":\"tugrik\",\"₯\":\"drachma\",\"₰\":\"penny\",\"₱\":\"peso\",\"₲\":\"guarani\",\"₳\":\"austral\",\"₴\":\"hryvnia\",\"₵\":\"cedi\",\"₸\":\"kazakhstani tenge\",\"₹\":\"indian rupee\",\"₺\":\"turkish lira\",\"₽\":\"russian ruble\",\"₿\":\"bitcoin\",\"℠\":\"sm\",\"™\":\"tm\",\"∂\":\"d\",\"∆\":\"delta\",\"∑\":\"sum\",\"∞\":\"infinity\",\"♥\":\"love\",\"元\":\"yuan\",\"円\":\"yen\",\"﷼\":\"rial\",\"ﻵ\":\"laa\",\"ﻷ\":\"laa\",\"ﻹ\":\"lai\",\"ﻻ\":\"la\"}')\n var locales = JSON.parse('{\"bg\":{\"Й\":\"Y\",\"Ц\":\"Ts\",\"Щ\":\"Sht\",\"Ъ\":\"A\",\"Ь\":\"Y\",\"й\":\"y\",\"ц\":\"ts\",\"щ\":\"sht\",\"ъ\":\"a\",\"ь\":\"y\"},\"de\":{\"Ä\":\"AE\",\"ä\":\"ae\",\"Ö\":\"OE\",\"ö\":\"oe\",\"Ü\":\"UE\",\"ü\":\"ue\",\"ß\":\"ss\",\"%\":\"prozent\",\"&\":\"und\",\"|\":\"oder\",\"∑\":\"summe\",\"∞\":\"unendlich\",\"♥\":\"liebe\"},\"es\":{\"%\":\"por ciento\",\"&\":\"y\",\"<\":\"menor que\",\">\":\"mayor que\",\"|\":\"o\",\"¢\":\"centavos\",\"£\":\"libras\",\"¤\":\"moneda\",\"₣\":\"francos\",\"∑\":\"suma\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"fr\":{\"%\":\"pourcent\",\"&\":\"et\",\"<\":\"plus petit\",\">\":\"plus grand\",\"|\":\"ou\",\"¢\":\"centime\",\"£\":\"livre\",\"¤\":\"devise\",\"₣\":\"franc\",\"∑\":\"somme\",\"∞\":\"infini\",\"♥\":\"amour\"},\"pt\":{\"%\":\"porcento\",\"&\":\"e\",\"<\":\"menor\",\">\":\"maior\",\"|\":\"ou\",\"¢\":\"centavo\",\"∑\":\"soma\",\"£\":\"libra\",\"∞\":\"infinito\",\"♥\":\"amor\"},\"uk\":{\"И\":\"Y\",\"и\":\"y\",\"Й\":\"Y\",\"й\":\"y\",\"Ц\":\"Ts\",\"ц\":\"ts\",\"Х\":\"Kh\",\"х\":\"kh\",\"Щ\":\"Shch\",\"щ\":\"shch\",\"Г\":\"H\",\"г\":\"h\"},\"vi\":{\"Đ\":\"D\",\"đ\":\"d\"},\"da\":{\"Ø\":\"OE\",\"ø\":\"oe\",\"Å\":\"AA\",\"å\":\"aa\",\"%\":\"procent\",\"&\":\"og\",\"|\":\"eller\",\"$\":\"dollar\",\"<\":\"mindre end\",\">\":\"større end\"},\"nb\":{\"&\":\"og\",\"Å\":\"AA\",\"Æ\":\"AE\",\"Ø\":\"OE\",\"å\":\"aa\",\"æ\":\"ae\",\"ø\":\"oe\"},\"it\":{\"&\":\"e\"},\"nl\":{\"&\":\"en\"},\"sv\":{\"&\":\"och\",\"Å\":\"AA\",\"Ä\":\"AE\",\"Ö\":\"OE\",\"å\":\"aa\",\"ä\":\"ae\",\"ö\":\"oe\"}}')\n\n function replace (string, options) {\n if (typeof string !== 'string') {\n throw new Error('slugify: string argument expected')\n }\n\n options = (typeof options === 'string')\n ? {replacement: options}\n : options || {}\n\n var locale = locales[options.locale] || {}\n\n var replacement = options.replacement === undefined ? '-' : options.replacement\n\n var trim = options.trim === undefined ? true : options.trim\n\n var slug = string.normalize().split('')\n // replace characters based on charMap\n .reduce(function (result, ch) {\n var appendChar = locale[ch];\n if (appendChar === undefined) appendChar = charMap[ch];\n if (appendChar === undefined) appendChar = ch;\n if (appendChar === replacement) appendChar = ' ';\n return result + appendChar\n // remove not allowed characters\n .replace(options.remove || /[^\\w\\s$*_+~.()'\"!\\-:@]+/g, '')\n }, '');\n\n if (options.strict) {\n slug = slug.replace(/[^A-Za-z0-9\\s]/g, '');\n }\n\n if (trim) {\n slug = slug.trim()\n }\n\n // Replace spaces with replacement character, treating multiple consecutive\n // spaces as a single space.\n slug = slug.replace(/\\s+/g, replacement);\n\n if (options.lower) {\n slug = slug.toLowerCase()\n }\n\n return slug\n }\n\n replace.extend = function (customMap) {\n Object.assign(charMap, customMap)\n }\n\n return replace\n}))\n","/**\n * Core — Shared utilities, constants, and internal helpers\n *\n * Ported from maxsim/bin/lib/core.cjs\n */\n\nimport { promises as fsp } from 'node:fs';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport { simpleGit } from 'simple-git';\nimport slugify from 'slugify';\n\nimport type {\n BranchingStrategy,\n ModelProfiles,\n ModelProfileName,\n ModelResolution,\n AgentType,\n PhaseSearchResult,\n RoadmapPhaseInfo,\n ArchivedPhaseDir,\n GitResult,\n MilestoneInfo,\n AppConfig,\n WorktreeMode,\n ReviewConfig,\n} from './types.js';\n\n// ─── Model Profile Table ─────────────────────────────────────────────────────\n\nexport const MODEL_PROFILES: ModelProfiles = {\n 'executor': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', tokenburner: 'opus' },\n 'planner': { quality: 'opus', balanced: 'opus', budget: 'sonnet', tokenburner: 'opus' },\n 'researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },\n 'verifier': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },\n 'debugger': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', tokenburner: 'opus' },\n};\n\n// ─── Output helpers ──────────────────────────────────────────────────────────\n// These throw CliOutput / CliError instead of calling process.exit() directly.\n// The CLI entry point (cli.ts) catches these and calls process.exit() there.\n\n/** Thrown by output() to signal successful command completion. */\nexport class CliOutput {\n readonly result: unknown;\n readonly raw: boolean;\n readonly rawValue: unknown;\n constructor(result: unknown, raw?: boolean, rawValue?: unknown) {\n this.result = result;\n this.raw = raw ?? false;\n this.rawValue = rawValue;\n }\n}\n\n/** Thrown by error() to signal a command error. */\nexport class CliError {\n readonly message: string;\n constructor(message: string) {\n this.message = message;\n }\n}\n\nexport function output(result: unknown, raw?: boolean, rawValue?: unknown): never {\n throw new CliOutput(result, raw, rawValue);\n}\n\nexport function error(message: string): never {\n throw new CliError(message);\n}\n\n/** Re-throw CliOutput/CliError signals so catch blocks don't intercept them */\nexport function rethrowCliSignals(e: unknown): void {\n if (e instanceof CliOutput || e instanceof CliError) throw e;\n}\n\n/**\n * Handle a CliOutput by writing to stdout. Extracted so cli.ts can use it.\n */\nexport function writeOutput(out: CliOutput): void {\n if (out.raw && out.rawValue !== undefined) {\n process.stdout.write(String(out.rawValue));\n } else {\n const json = JSON.stringify(out.result, null, 2);\n if (json.length > 50000) {\n const tmpPath = path.join(os.tmpdir(), `maxsim-${Date.now()}.json`);\n fs.writeFileSync(tmpPath, json, 'utf-8');\n process.stdout.write('@file:' + tmpPath);\n } else {\n process.stdout.write(json);\n }\n }\n}\n\n// ─── Shared micro-utilities ─────────────────────────────────────────────────\n\n/** Today's date as YYYY-MM-DD. */\nexport function todayISO(): string {\n return new Date().toISOString().split('T')[0];\n}\n\n/** Canonical .planning/ sub-paths. */\nexport function planningPath(cwd: string, ...segments: string[]): string {\n return path.join(cwd, '.planning', ...segments);\n}\nexport function statePath(cwd: string): string { return planningPath(cwd, 'STATE.md'); }\nexport function roadmapPath(cwd: string): string { return planningPath(cwd, 'ROADMAP.md'); }\nexport function configPath(cwd: string): string { return planningPath(cwd, 'config.json'); }\nexport function phasesPath(cwd: string): string { return planningPath(cwd, 'phases'); }\n\n/** @internal @deprecated Use GitHub Issues for plan/summary tracking. Retained for archived phase reading only. */\nexport const isPlanFile = (f: string): boolean => f.endsWith('-PLAN.md') || f === 'PLAN.md';\n/** @internal @deprecated Use GitHub Issues for plan/summary tracking. Retained for archived phase reading only. */\nexport const isSummaryFile = (f: string): boolean => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md';\n\n/** Strip suffix to get plan/summary ID. */\nexport const planId = (f: string): string => f.replace('-PLAN.md', '').replace('PLAN.md', '');\nexport const summaryId = (f: string): string => f.replace('-SUMMARY.md', '').replace('SUMMARY.md', '');\n\n/** List subdirectory names, optionally sorted by phase number. */\nexport async function listSubDirs(dir: string, sortByPhase = false): Promise<string[]> {\n const entries = await fsp.readdir(dir, { withFileTypes: true });\n const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);\n return sortByPhase ? dirs.sort((a, b) => comparePhaseNum(a, b)) : dirs;\n}\n\n/** Read a file, returning null if it doesn't exist or fails. */\nexport async function safeReadFile(filePath: string): Promise<string | null> {\n try {\n return await fsp.readFile(filePath, 'utf-8');\n } catch {\n return null;\n }\n}\n\n/** Extract a human-readable message from an unknown thrown value. */\nexport function errorMsg(e: unknown): string {\n return e instanceof Error ? e.message : String(e);\n}\n\n/** Log only when MAXSIM_DEBUG is set. Accepts an optional context label. */\nexport function debugLog(contextOrError: unknown, error?: unknown): void {\n if (!process.env.MAXSIM_DEBUG) return;\n if (error !== undefined) {\n console.error(`[maxsim:${contextOrError}]`, error);\n } else {\n console.error(contextOrError);\n }\n}\n\n/** Escape a phase number for use in regex. */\nexport function escapePhaseNum(phase: string | number): string {\n return String(phase).replace(/\\./g, '\\\\.');\n}\n\n// ─── File & Config utilities ─────────────────────────────────────────────────\n\nlet _configCache: { cwd: string; config: AppConfig } | null = null;\n\n\n// ─── Git utilities ───────────────────────────────────────────────────────────\n\nexport async function isGitIgnored(cwd: string, targetPath: string): Promise<boolean> {\n try {\n const git = simpleGit(cwd);\n const result = await git.checkIgnore(targetPath);\n return result.length > 0;\n } catch {\n return false;\n }\n}\n\nexport async function execGit(cwd: string, args: string[]): Promise<GitResult> {\n try {\n const git = simpleGit(cwd);\n const stdout = await git.raw(args);\n return { exitCode: 0, stdout: (stdout ?? '').trim(), stderr: '' };\n } catch (thrown: unknown) {\n // simple-git throws on non-zero exit — extract what we can\n const message = thrown instanceof Error ? thrown.message : String(thrown);\n debugLog('exec-git-failed', { args, error: message });\n return {\n exitCode: 1,\n stdout: '',\n stderr: message,\n };\n }\n}\n\n// ─── Phase utilities ─────────────────────────────────────────────────────────\n\nexport function normalizePhaseName(phase: string): string {\n const match = phase.match(/^(\\d+)([A-Z])?(\\.\\d+)?/i);\n if (!match) return phase;\n const padded = match[1].padStart(2, '0');\n const letter = match[2] ? match[2].toUpperCase() : '';\n const decimal = match[3] || '';\n return padded + letter + decimal;\n}\n\nexport function comparePhaseNum(a: string | number, b: string | number): number {\n const pa = String(a).match(/^(\\d+)([A-Z])?(\\.\\d+)?/i);\n const pb = String(b).match(/^(\\d+)([A-Z])?(\\.\\d+)?/i);\n if (!pa || !pb) return String(a).localeCompare(String(b));\n const intDiff = parseInt(pa[1], 10) - parseInt(pb[1], 10);\n if (intDiff !== 0) return intDiff;\n const la = (pa[2] || '').toUpperCase();\n const lb = (pb[2] || '').toUpperCase();\n if (la !== lb) {\n if (!la) return -1;\n if (!lb) return 1;\n return la < lb ? -1 : 1;\n }\n const da = pa[3] ? parseFloat(pa[3]) : -1;\n const db = pb[3] ? parseFloat(pb[3]) : -1;\n return da - db;\n}\n\n// ─── Phase regex helper ──────────────────────────────────────────────────────\n\n/**\n * Returns the canonical regex for matching Phase heading lines in ROADMAP.md.\n *\n * General form (no escapedPhaseNum):\n * Matches: ## Phase 03: Name Here\n * Group 1: phase number string (e.g. \"03\", \"3A\", \"2.1\")\n * Group 2: phase name string (e.g. \"Name Here\")\n *\n * Specific form (with escapedPhaseNum):\n * Matches: ## Phase 03: Name Here\n * Group 1: phase name string only\n *\n * @param escapedPhaseNum - regex-escaped phase number string to match a specific phase\n * @param flags - regex flags (default: 'gi')\n */\nexport function getPhasePattern(escapedPhaseNum?: string, flags = 'gim'): RegExp {\n if (escapedPhaseNum) {\n return new RegExp(\n `^#{2,4}\\\\s*Phase\\\\s+${escapedPhaseNum}:\\\\s*([^\\\\n]+)`,\n flags,\n );\n }\n return new RegExp(\n `^#{2,4}\\\\s*Phase\\\\s+(\\\\d+[A-Z]?(?:\\\\.\\\\d+)?)\\\\s*:\\\\s*([^\\\\n]+)`,\n flags,\n );\n}\n\n\n// ─── Roadmap & model utilities ───────────────────────────────────────────────\n\nexport async function resolveModelInternal(cwd: string, agentType: AgentType, config?: AppConfig): Promise<ModelResolution> {\n config = config ?? await loadConfig(cwd);\n\n const override = config.model_overrides?.[agentType];\n if (override) {\n return override === 'opus' ? 'inherit' : override;\n }\n\n const profile: ModelProfileName = config.model_profile || 'balanced';\n const agentModels = MODEL_PROFILES[agentType];\n if (!agentModels) return 'sonnet';\n const resolved = agentModels[profile] || agentModels['balanced'] || 'sonnet';\n return resolved === 'opus' ? 'inherit' : resolved;\n}\n\n// ─── Misc utilities ──────────────────────────────────────────────────────────\n\n\nexport function generateSlugInternal(text: string | null | undefined): string | null {\n if (!text) return null;\n return slugify(text, { lower: true, strict: true });\n}\n\n// ─── Async internal helpers ─────────────────────────────────────────────────\n\nexport async function pathExistsInternal(p: string): Promise<boolean> {\n try {\n await fsp.access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function loadConfig(cwd: string): Promise<AppConfig> {\n if (_configCache && _configCache.cwd === cwd) return _configCache.config;\n const cfgPath = configPath(cwd);\n const reviewDefaults: ReviewConfig = {\n spec_review: true,\n code_review: true,\n simplify_review: true,\n retry_limit: 3,\n };\n const defaults: AppConfig = {\n model_profile: 'balanced',\n commit_docs: true,\n search_gitignored: false,\n branching_strategy: 'none',\n phase_branch_template: 'maxsim/phase-{phase}-{slug}',\n milestone_branch_template: 'maxsim/{milestone}-{slug}',\n research: true,\n plan_checker: true,\n verifier: true,\n parallelization: true,\n brave_search: false,\n worktree_mode: 'auto',\n max_parallel_agents: 10,\n review: reviewDefaults,\n };\n\n try {\n const raw = await fsp.readFile(cfgPath, 'utf-8');\n const parsed: Record<string, unknown> = JSON.parse(raw) as Record<string, unknown>;\n\n const get = (key: string, nested?: { section: string; field: string }): unknown => {\n if (parsed[key] !== undefined) return parsed[key];\n if (nested) {\n const section = parsed[nested.section];\n if (section && typeof section === 'object' && section !== null && nested.field in section) {\n return (section as Record<string, unknown>)[nested.field];\n }\n }\n return undefined;\n };\n\n const parallelization = ((): boolean => {\n const val = get('parallelization');\n if (typeof val === 'boolean') return val;\n if (typeof val === 'object' && val !== null && 'enabled' in val) {\n return (val as { enabled: boolean }).enabled;\n }\n return defaults.parallelization;\n })();\n\n const result: AppConfig = {\n model_profile: (get('model_profile') as ModelProfileName | undefined) ?? defaults.model_profile,\n commit_docs: (get('commit_docs', { section: 'planning', field: 'commit_docs' }) as boolean | undefined) ?? defaults.commit_docs,\n search_gitignored: (get('search_gitignored', { section: 'planning', field: 'search_gitignored' }) as boolean | undefined) ?? defaults.search_gitignored,\n branching_strategy: (get('branching_strategy', { section: 'git', field: 'branching_strategy' }) as BranchingStrategy | undefined) ?? defaults.branching_strategy,\n phase_branch_template: (get('phase_branch_template', { section: 'git', field: 'phase_branch_template' }) as string | undefined) ?? defaults.phase_branch_template,\n milestone_branch_template: (get('milestone_branch_template', { section: 'git', field: 'milestone_branch_template' }) as string | undefined) ?? defaults.milestone_branch_template,\n research: (get('research', { section: 'workflow', field: 'research' }) as boolean | undefined) ?? defaults.research,\n plan_checker: ((get('plan_checker', { section: 'workflow', field: 'plan_checker' }) ?? get('plan_checker', { section: 'workflow', field: 'plan_check' })) as boolean | undefined) ?? defaults.plan_checker,\n verifier: (get('verifier', { section: 'workflow', field: 'verifier' }) as boolean | undefined) ?? defaults.verifier,\n parallelization,\n brave_search: (get('brave_search') as boolean | undefined) ?? defaults.brave_search,\n model_overrides: parsed['model_overrides'] as AppConfig['model_overrides'],\n worktree_mode: (get('worktree_mode') as WorktreeMode | undefined) ?? defaults.worktree_mode,\n max_parallel_agents: (get('max_parallel_agents') as number | undefined) ?? defaults.max_parallel_agents,\n review: (() => {\n const userReview = get('review') as Partial<ReviewConfig> | undefined;\n if (!userReview || typeof userReview !== 'object') return reviewDefaults;\n return { ...reviewDefaults, ...userReview };\n })(),\n };\n _configCache = { cwd, config: result };\n return result;\n } catch (e) {\n if (await pathExistsInternal(cfgPath)) {\n console.warn(`[maxsim] Warning: config.json exists but could not be parsed — using defaults.`);\n debugLog('config-load-failed', e);\n }\n _configCache = { cwd, config: defaults };\n return defaults;\n }\n}\n\nasync function searchPhaseInDir(baseDir: string, relBase: string, normalized: string): Promise<PhaseSearchResult | null> {\n try {\n const dirs = await listSubDirs(baseDir, true);\n const match = dirs.find(d => d.startsWith(normalized));\n if (!match) return null;\n\n const dirMatch = match.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)-?(.*)/i);\n const phaseNumber = dirMatch ? dirMatch[1] : normalized;\n const phaseName = dirMatch && dirMatch[2] ? dirMatch[2] : null;\n\n // Directory existence confirmed. Phase artifacts are tracked in GitHub Issues.\n return {\n found: true,\n directory: path.join(relBase, match),\n phase_number: phaseNumber,\n phase_name: phaseName,\n phase_slug: phaseName ? phaseName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') : null,\n plans: [],\n summaries: [],\n incomplete_plans: [],\n has_research: false,\n has_context: false,\n has_verification: false,\n };\n } catch (e) {\n debugLog('search-phase-in-dir-async-failed', { dir: baseDir, phase: normalized, error: errorMsg(e) });\n return null;\n }\n}\n\nexport async function findPhaseInternal(cwd: string, phase: string): Promise<PhaseSearchResult | null> {\n if (!phase) return null;\n\n const normalized = normalizePhaseName(phase);\n\n // Try GitHub first if mapping exists\n try {\n const { findPhaseFromGitHub } = await import('../github/sync.js');\n const ghResult = await findPhaseFromGitHub(cwd, normalized);\n if (ghResult) return ghResult;\n } catch {\n // GitHub not available — fall through to local\n debugLog('find-phase-github-fallback', 'GitHub lookup failed, falling back to local');\n }\n\n // Fall back to local filesystem scanning\n const pd = phasesPath(cwd);\n const current = await searchPhaseInDir(pd, path.join('.planning', 'phases'), normalized);\n if (current) {\n current.source = 'local';\n return current;\n }\n\n // Search archive location: .planning/archive/<milestone>/\n const archiveDir = planningPath(cwd, 'archive');\n if (await pathExistsInternal(archiveDir)) {\n try {\n const archiveEntries = await fsp.readdir(archiveDir, { withFileTypes: true });\n const versionDirs = archiveEntries\n .filter(e => e.isDirectory())\n .map(e => e.name)\n .sort()\n .reverse();\n\n for (const versionName of versionDirs) {\n const versionPath = path.join(archiveDir, versionName);\n const relBase = path.join('.planning', 'archive', versionName);\n const result = await searchPhaseInDir(versionPath, relBase, normalized);\n if (result) {\n result.archived = versionName;\n result.source = 'local';\n return result;\n }\n }\n } catch (e) {\n debugLog('find-phase-async-archive-search-failed', e);\n }\n }\n\n return null;\n}\n\nexport async function getArchivedPhaseDirs(cwd: string): Promise<ArchivedPhaseDir[]> {\n const results: ArchivedPhaseDir[] = [];\n\n // New archive location: .planning/archive/<milestone>/\n const archiveDir = planningPath(cwd, 'archive');\n try {\n const archiveEntries = await fsp.readdir(archiveDir, { withFileTypes: true });\n const versionDirs = archiveEntries\n .filter(e => e.isDirectory())\n .map(e => e.name)\n .sort()\n .reverse();\n\n for (const versionName of versionDirs) {\n const versionPath = path.join(archiveDir, versionName);\n const dirs = await listSubDirs(versionPath, true);\n\n for (const dir of dirs) {\n results.push({\n name: dir,\n milestone: versionName,\n basePath: path.join('.planning', 'archive', versionName),\n fullPath: path.join(versionPath, dir),\n });\n }\n }\n } catch (e) {\n debugLog('get-archived-phase-dirs-async-archive-failed', e);\n }\n\n return results;\n}\n\nexport async function getRoadmapPhaseInternal(cwd: string, phaseNum: string | number): Promise<RoadmapPhaseInfo | null> {\n if (!phaseNum) return null;\n const rp = roadmapPath(cwd);\n\n try {\n const content = await safeReadFile(rp);\n if (!content) return null;\n const escapedPhase = escapePhaseNum(phaseNum);\n const phasePattern = getPhasePattern(escapedPhase, 'i');\n const headerMatch = content.match(phasePattern);\n if (!headerMatch) return null;\n\n const phaseName = headerMatch[1].trim();\n const headerIndex = headerMatch.index!;\n const restOfContent = content.slice(headerIndex);\n const nextHeaderMatch = restOfContent.match(/\\n#{2,4}\\s+Phase\\s+\\d/i);\n const sectionEnd = nextHeaderMatch ? headerIndex + nextHeaderMatch.index! : content.length;\n const section = content.slice(headerIndex, sectionEnd).trim();\n\n const goalMatch = section.match(/\\*\\*Goal(?::\\*\\*|\\*\\*:)\\s*([^\\n]+)/i);\n const goal = goalMatch ? goalMatch[1].trim() : null;\n\n return {\n found: true,\n phase_number: phaseNum.toString(),\n phase_name: phaseName,\n goal,\n section,\n };\n } catch (e) {\n debugLog('get-roadmap-phase-async-failed', { phase: phaseNum, error: errorMsg(e) });\n return null;\n }\n}\n\nexport async function archivePath(cwd: string, milestone?: string): Promise<string> {\n const ms = milestone ?? (await getMilestoneInfo(cwd)).version;\n return planningPath(cwd, 'archive', ms);\n}\n\nexport async function getMilestoneInfo(cwd: string): Promise<MilestoneInfo> {\n try {\n const roadmap = await safeReadFile(roadmapPath(cwd));\n if (!roadmap) return { version: 'v1.0', name: 'milestone' };\n const versionMatch = roadmap.match(/v(\\d+\\.\\d+)/);\n const nameMatch = roadmap.match(/## .*v\\d+\\.\\d+[:\\s]+([^\\n(]+)/);\n return {\n version: versionMatch ? versionMatch[0] : 'v1.0',\n name: nameMatch ? nameMatch[1].trim() : 'milestone',\n };\n } catch {\n return { version: 'v1.0', name: 'milestone' };\n }\n}\n","/**\n * GitHub Issue Mapping — Local performance cache\n *\n * IMPORTANT: This file (.planning/github-issues.json) is a CACHE that can be\n * rebuilt from GitHub Issues at any time via rebuildMappingFromGitHub().\n * GitHub Issues are the single source of truth (ARCH-01).\n *\n * Manages the `.planning/github-issues.json` file that maps MAXSIM tasks/todos\n * to their corresponding GitHub issue numbers, internal IDs, and project item IDs.\n *\n * All file operations use synchronous fs (matching the pattern in existing core modules).\n * Uses planningPath() from core to construct file paths.\n *\n * CRITICAL: Never call process.exit() — throw or return null instead.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { createHash } from 'node:crypto';\n\nimport { planningPath } from '../core/core.js';\nimport type { GhResult, IssueMappingFile, PhaseMapping, TaskIssueMapping } from './types.js';\nimport { getOctokit, getRepoInfo, withGhResult } from './client.js';\n\n// ---- Constants -------------------------------------------------------------\n\nconst MAPPING_FILENAME = 'github-issues.json';\n\n// ---- Helpers ---------------------------------------------------------------\n\n/**\n * Get the absolute path to `.planning/github-issues.json` for a given cwd.\n */\nfunction mappingFilePath(cwd: string): string {\n return planningPath(cwd, MAPPING_FILENAME);\n}\n\n/**\n * Compute a SHA-256 hash of an issue body string.\n * Used for external edit detection (WIRE-06).\n */\nexport function hashBody(body: string): string {\n return createHash('sha256').update(body).digest('hex');\n}\n\n/**\n * Update the body_hash for a specific phase in the mapping cache.\n *\n * Load-modify-save pattern. Throws if mapping file does not exist.\n */\nexport function updatePhaseBodyHash(cwd: string, phaseNum: string, bodyHash: string): void {\n const mapping = loadMapping(cwd);\n if (!mapping) {\n throw new Error('github-issues.json does not exist. Run project setup first.');\n }\n\n if (!mapping.phases[phaseNum]) {\n throw new Error(`Phase ${phaseNum} not found in mapping file.`);\n }\n\n mapping.phases[phaseNum].body_hash = bodyHash;\n saveMapping(cwd, mapping);\n}\n\n// ---- Public API: Local file I/O --------------------------------------------\n\n/**\n * Load and parse the mapping file (local cache).\n *\n * Returns null if the file does not exist.\n * Throws on malformed JSON or invalid structure (missing required fields).\n */\nexport function loadMapping(cwd: string): IssueMappingFile | null {\n const filePath = mappingFilePath(cwd);\n\n try {\n fs.statSync(filePath);\n } catch {\n return null;\n }\n\n const raw = fs.readFileSync(filePath, 'utf-8');\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n\n // Validate basic structure — must have repo\n if (typeof parsed.repo !== 'string') {\n throw new Error(\n `Invalid github-issues.json: missing required field 'repo' (string)`,\n );\n }\n\n return parsed as unknown as IssueMappingFile;\n}\n\n/**\n * Write the mapping file to `.planning/github-issues.json`.\n *\n * Creates the `.planning/` directory if it does not exist.\n * Writes with 2-space indent for readability and diff-friendliness.\n */\nexport function saveMapping(cwd: string, mapping: IssueMappingFile): void {\n const filePath = mappingFilePath(cwd);\n const dir = path.dirname(filePath);\n\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(filePath, JSON.stringify(mapping, null, 2) + '\\n', 'utf-8');\n}\n\n/**\n * Update a specific task's issue mapping within a phase.\n *\n * Load-modify-save pattern. Creates phase entry if it does not exist.\n * Merges partial data with existing entry (if any).\n *\n * @throws If mapping file does not exist (must be initialized first via saveMapping)\n */\nexport function updateTaskMapping(\n cwd: string,\n phaseNum: string,\n taskId: string,\n data: Partial<TaskIssueMapping>,\n): void {\n const mapping = loadMapping(cwd);\n if (!mapping) {\n throw new Error('github-issues.json does not exist. Run project setup first.');\n }\n\n // Create phase entry if missing\n if (!mapping.phases[phaseNum]) {\n mapping.phases[phaseNum] = {\n tracking_issue: { number: 0, id: 0, node_id: '', item_id: '', status: 'To Do' },\n plan: '',\n tasks: {},\n } satisfies PhaseMapping;\n }\n\n // Merge with existing task data (if any)\n const existing = mapping.phases[phaseNum].tasks[taskId];\n const defaults: TaskIssueMapping = { number: 0, id: 0, node_id: '', item_id: '', status: 'To Do' };\n mapping.phases[phaseNum].tasks[taskId] = Object.assign(defaults, existing, data);\n\n saveMapping(cwd, mapping);\n}\n\n\n/**\n * Create a properly typed empty mapping object with sensible defaults.\n *\n * Used during initial project setup to create the mapping file.\n */\nexport function createEmptyMapping(repo: string): IssueMappingFile {\n return {\n project_number: 0,\n project_id: '',\n repo,\n status_field_id: '',\n status_options: {},\n estimate_field_id: '',\n milestone_id: 0,\n milestone_title: '',\n labels: {},\n phases: {},\n };\n}\n\n/**\n * Quick lookup: get the issue mapping for a specific task in a phase.\n *\n * Returns null if the mapping file, phase, or task does not exist.\n */\nexport function getIssueForTask(\n cwd: string,\n phaseNum: string,\n taskId: string,\n): TaskIssueMapping | null {\n const mapping = loadMapping(cwd);\n if (!mapping) return null;\n\n const phase = mapping.phases[phaseNum];\n if (!phase) return null;\n\n return phase.tasks[taskId] ?? null;\n}\n\n// ---- Rebuild from GitHub (cache rebuild) ------------------------------------\n\n/**\n * Rebuild the mapping cache from GitHub Issues.\n *\n * This function is the escape hatch: if the local cache is lost, stale, or\n * corrupted, it can always be rebuilt from GitHub (the single source of truth).\n *\n * Strategy:\n * 1. List all Issues with label 'phase' using Octokit pagination\n * 2. For each phase issue, list its sub-issues\n * 3. Reconstruct the mapping from GitHub state\n * 4. Save to disk and return\n *\n * @param cwd - The project root directory\n * @returns The rebuilt mapping file\n */\nexport async function rebuildMappingFromGitHub(\n cwd: string,\n): Promise<GhResult<IssueMappingFile>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n // Start with the existing mapping if available (to preserve project board info)\n // or create an empty one\n const existing = loadMapping(cwd);\n const mapping = existing ?? createEmptyMapping(`${owner}/${repo}`);\n\n // Clear existing phase mappings — we're rebuilding from scratch\n mapping.phases = {};\n mapping.repo = `${owner}/${repo}`;\n\n // List all issues with the 'phase' label using pagination\n const phaseIssues = await octokit.paginate(octokit.rest.issues.listForRepo, {\n owner,\n repo,\n labels: 'phase',\n state: 'all',\n per_page: 100,\n });\n\n for (const phaseIssue of phaseIssues) {\n // Extract phase number from title: \"[Phase XX] Name\"\n const titleMatch = phaseIssue.title.match(/^\\[Phase\\s+(\\S+)\\]/);\n if (!titleMatch) continue;\n\n const phaseNum = titleMatch[1];\n\n // Create phase mapping entry\n const phaseMapping: PhaseMapping = {\n tracking_issue: {\n number: phaseIssue.number,\n id: phaseIssue.id,\n node_id: phaseIssue.node_id ?? '',\n item_id: '',\n status: phaseIssue.state === 'closed' ? 'Done' : 'To Do',\n },\n plan: '',\n tasks: {},\n };\n\n // List sub-issues for this phase issue\n try {\n const subIssues = await (octokit.rest.issues as any).listSubIssues({\n owner,\n repo,\n issue_number: phaseIssue.number,\n });\n\n for (const subIssue of subIssues.data as any[]) {\n // Extract task ID from title: \"[PXX] Title\" — use the issue number as key\n const taskTitleMatch = (subIssue.title as string).match(/^\\[P\\S+\\]\\s/);\n const taskKey = taskTitleMatch\n ? `task-${subIssue.number}`\n : `issue-${subIssue.number}`;\n\n phaseMapping.tasks[taskKey] = {\n number: subIssue.number as number,\n id: subIssue.id as number,\n node_id: (subIssue.node_id as string) ?? '',\n item_id: '',\n status: (subIssue.state as string) === 'closed' ? 'Done' : 'To Do',\n };\n }\n } catch {\n // Sub-issues API may not be available — continue without sub-issues\n }\n\n mapping.phases[phaseNum] = phaseMapping;\n }\n\n // Save the rebuilt mapping to disk\n saveMapping(cwd, mapping);\n\n return mapping;\n });\n}\n","/**\n * GitHub Sync — State verification from GitHub Issues\n *\n * Reads phase state entirely from GitHub Issues (sub-issues API).\n * GitHub Issues is the source of truth — no local file reads for state.\n *\n * Key functions:\n * - checkPhaseProgress: counts open/closed sub-issues for a phase\n * - getPhaseState: derives lifecycle state from sub-issue counts\n * - detectInterruptedPhase: identifies interrupted executions via mixed state\n * - getAllPhasesProgress: overview of all phase issues with progress\n *\n * CRITICAL: No GraphQL anywhere in this file.\n * CRITICAL: All operations use client.ts (Octokit adapter) exclusively.\n * CRITICAL: Never call process.exit() — return GhResult instead.\n */\n\nimport { getOctokit, getRepoInfo, withGhResult } from './client.js';\nimport type { GhResult, IssueMappingFile } from './types.js';\nimport type { PhaseSearchResult } from '../core/types.js';\nimport { loadMapping } from './mapping.js';\n\n// ---- Types -----------------------------------------------------------------\n\nexport interface PhaseProgress {\n total: number;\n completed: number;\n inProgress: number;\n remaining: number;\n tasks: Array<{\n number: number;\n title: string;\n state: 'open' | 'closed';\n }>;\n}\n\n// ---- Check Phase Progress --------------------------------------------------\n\n/**\n * Get the progress of a phase by counting open/closed sub-issues.\n *\n * Uses `octokit.rest.issues.listSubIssues()` with pagination to get all\n * sub-issues of a phase tracking issue. Counts open vs closed to determine\n * progress.\n *\n * @param phaseIssueNumber - The issue number of the phase tracking issue\n */\nexport async function checkPhaseProgress(\n phaseIssueNumber: number,\n): Promise<GhResult<PhaseProgress>> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n // Fetch all sub-issues with pagination\n const tasks: PhaseProgress['tasks'] = [];\n let page = 1;\n let hasMore = true;\n\n while (hasMore) {\n const response = await octokit.rest.issues.listSubIssues({\n owner,\n repo,\n issue_number: phaseIssueNumber,\n per_page: 100,\n page,\n });\n\n for (const issue of response.data) {\n tasks.push({\n number: issue.number,\n title: issue.title,\n state: issue.state as 'open' | 'closed',\n });\n }\n\n // Check if there are more pages\n hasMore = response.data.length === 100;\n page++;\n }\n\n const completed = tasks.filter(t => t.state === 'closed').length;\n const remaining = tasks.filter(t => t.state === 'open').length;\n\n return {\n total: tasks.length,\n completed,\n inProgress: remaining, // open tasks are \"in progress\" or \"to do\"\n remaining,\n tasks,\n };\n });\n}\n\n// ---- Get Phase State -------------------------------------------------------\n\n/**\n * Derive the lifecycle state of a phase from its sub-issue counts.\n *\n * State derivation:\n * - If all sub-issues are closed -> 'done'\n * - If some sub-issues are closed and some open -> 'in-progress'\n * - If no sub-issues exist or all are open -> 'to-do'\n *\n * Note: 'in-review' is determined by the project board column, not sub-issue\n * state. This function provides a quick approximation from sub-issue counts.\n * For authoritative 'in-review' detection, check the project board.\n *\n * @param phaseIssueNumber - The issue number of the phase tracking issue\n */\nexport async function getPhaseState(\n phaseIssueNumber: number,\n): Promise<GhResult<'to-do' | 'in-progress' | 'in-review' | 'done'>> {\n const progressResult = await checkPhaseProgress(phaseIssueNumber);\n\n if (!progressResult.ok) {\n return progressResult;\n }\n\n const { total, completed } = progressResult.data;\n\n if (total === 0) {\n return { ok: true, data: 'to-do' };\n }\n\n if (completed === total) {\n return { ok: true, data: 'done' };\n }\n\n if (completed > 0) {\n return { ok: true, data: 'in-progress' };\n }\n\n return { ok: true, data: 'to-do' };\n}\n\n// ---- Detect Interrupted Phase ----------------------------------------------\n\n/**\n * Detect whether a phase was interrupted during execution.\n *\n * CONTEXT.md decision: \"Issue state is truth -- mix of open/closed sub-issues\n * indicates interrupted execution.\"\n *\n * A phase is considered interrupted if it has a mix of open and closed\n * sub-issues. This means some tasks completed but execution stopped before\n * all tasks finished.\n *\n * Returns the issue numbers of completed (closed) and remaining (open) tasks\n * for the resume logic (ARCH-05).\n *\n * @param phaseIssueNumber - The issue number of the phase tracking issue\n */\nexport async function detectInterruptedPhase(\n phaseIssueNumber: number,\n): Promise<GhResult<{ interrupted: boolean; completedTasks: number[]; remainingTasks: number[] }>> {\n const progressResult = await checkPhaseProgress(phaseIssueNumber);\n\n if (!progressResult.ok) {\n return progressResult;\n }\n\n const { tasks, completed, total } = progressResult.data;\n\n // Interrupted = some completed AND some remaining (mix of open/closed)\n const interrupted = completed > 0 && completed < total;\n\n const completedTasks = tasks\n .filter(t => t.state === 'closed')\n .map(t => t.number);\n\n const remainingTasks = tasks\n .filter(t => t.state === 'open')\n .map(t => t.number);\n\n return {\n ok: true,\n data: {\n interrupted,\n completedTasks,\n remainingTasks,\n },\n };\n}\n\n// ---- Get All Phases Progress -----------------------------------------------\n\n/**\n * Get progress for all phases by listing issues with the 'phase' label.\n *\n * Uses `octokit.paginate()` to list all issues with label 'phase', then\n * for each phase issue, fetches its sub-issue progress.\n *\n * Parses phase number from title pattern `[Phase XX]`.\n * Returns sorted by phase number.\n *\n * Note: Uses sequential API calls for sub-issue progress to avoid\n * rate limit issues with concurrent mutations (per plan constraint:\n * \"Do NOT use Promise.all for multiple API calls with mutations\").\n */\nexport async function getAllPhasesProgress(): Promise<\n GhResult<Array<{ phaseNumber: string; title: string; issueNumber: number; progress: PhaseProgress }>>\n> {\n return withGhResult(async () => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n // List all issues with the 'phase' label using pagination\n const phaseIssues = await octokit.paginate(\n octokit.rest.issues.listForRepo,\n {\n owner,\n repo,\n labels: 'phase',\n state: 'all',\n per_page: 100,\n },\n );\n\n // Parse phase number from title and build results\n const results: Array<{\n phaseNumber: string;\n title: string;\n issueNumber: number;\n progress: PhaseProgress;\n }> = [];\n\n // Sequential API calls for sub-issue progress (per plan constraint)\n for (const issue of phaseIssues) {\n // Parse phase number from title: \"[Phase 01] Phase Name\" -> \"01\"\n const phaseMatch = issue.title.match(/\\[Phase\\s+(\\w+)\\]/i);\n if (!phaseMatch) {\n continue; // Skip issues that don't match the phase title pattern\n }\n\n const phaseNumber = phaseMatch[1];\n const progressResult = await checkPhaseProgress(issue.number);\n\n if (progressResult.ok) {\n results.push({\n phaseNumber,\n title: issue.title,\n issueNumber: issue.number,\n progress: progressResult.data,\n });\n }\n }\n\n // Sort by phase number\n results.sort((a, b) => {\n const numA = parseInt(a.phaseNumber, 10);\n const numB = parseInt(b.phaseNumber, 10);\n if (!Number.isNaN(numA) && !Number.isNaN(numB)) {\n return numA - numB;\n }\n return a.phaseNumber.localeCompare(b.phaseNumber);\n });\n\n return results;\n });\n}\n\n// ---- Find Phase from GitHub ------------------------------------------------\n\n/**\n * Populate a PhaseSearchResult from GitHub Issues data.\n *\n * Looks up the phase in the local mapping cache, then queries GitHub for\n * sub-issue counts and comments to derive plans/summaries/research status.\n *\n * Returns null if:\n * - No mapping file exists\n * - Phase not found in mapping\n * - GitHub API call fails\n *\n * @param cwd - Project root directory\n * @param phaseNum - Normalized phase number (e.g., \"01\", \"02A\")\n */\nexport async function findPhaseFromGitHub(\n cwd: string,\n phaseNum: string,\n): Promise<PhaseSearchResult | null> {\n let mapping: IssueMappingFile | null;\n try {\n mapping = loadMapping(cwd);\n } catch {\n return null;\n }\n if (!mapping) return null;\n\n const phaseMapping = mapping.phases[phaseNum];\n if (!phaseMapping) return null;\n\n const issueNumber = phaseMapping.tracking_issue.number;\n if (!issueNumber) return null;\n\n // Get sub-issue progress from GitHub\n const progressResult = await checkPhaseProgress(issueNumber);\n if (!progressResult.ok) return null;\n\n const { tasks, completed, total } = progressResult.data;\n\n // Get issue details for the phase name\n let phaseName: string | null = null;\n let phaseSlug: string | null = null;\n try {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const issue = await octokit.rest.issues.get({\n owner,\n repo,\n issue_number: issueNumber,\n });\n const titleMatch = issue.data.title.match(/\\[Phase\\s+\\S+\\]\\s*(.*)/);\n if (titleMatch) {\n phaseName = titleMatch[1].trim();\n phaseSlug = phaseName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n }\n } catch {\n // Non-critical — we can still return without the name\n }\n\n // Derive plan-like and summary-like counts from sub-issues\n // Each sub-issue represents a task/plan. Closed = completed (has summary equivalent).\n const planNames = tasks.map(t => `task-${t.number}`);\n const summaryNames = tasks.filter(t => t.state === 'closed').map(t => `task-${t.number}`);\n const completedSet = new Set(summaryNames);\n const incompletePlans = planNames.filter(p => !completedSet.has(p));\n\n // Check for research/context/verification via issue comments\n let hasResearch = false;\n let hasContext = false;\n let hasVerification = false;\n try {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const comments = await octokit.rest.issues.listComments({\n owner,\n repo,\n issue_number: issueNumber,\n per_page: 100,\n });\n for (const comment of comments.data) {\n const body = comment.body ?? '';\n if (body.includes('<!-- maxsim:type=research -->') || body.includes('## Research') || body.startsWith('## Phase') && body.includes('Research')) {\n hasResearch = true;\n }\n if (body.includes('<!-- maxsim:type=context -->') || body.includes('## Context')) {\n hasContext = true;\n }\n if (body.includes('<!-- maxsim:type=verification -->') || body.includes('## Verification')) {\n hasVerification = true;\n }\n }\n } catch {\n // Non-critical — default to false\n }\n\n return {\n found: true,\n directory: `.planning/phases/${phaseNum}-${phaseSlug || 'unknown'}`,\n phase_number: phaseNum,\n phase_name: phaseName,\n phase_slug: phaseSlug,\n plans: planNames,\n summaries: summaryNames,\n incomplete_plans: incompletePlans,\n has_research: hasResearch,\n has_context: hasContext,\n has_verification: hasVerification,\n source: 'github',\n };\n}\n","/**\n * GitHub CLI Commands -- GitHub operations exposed as CLI tool commands\n *\n * Provides cmd* functions for all 27 GitHub CLI commands. Each function follows\n * the CmdResult pattern used throughout the codebase, wrapping the existing\n * adapter modules with auth checks and project root detection.\n *\n * Replaces the MCP server tools with direct CLI invocations.\n *\n * CRITICAL: Never call process.exit() -- return CmdResult instead.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { CmdResult } from '../core/index.js';\nimport {\n requireAuth,\n getOctokit,\n getRepoInfo,\n} from './client.js';\nimport { AuthError } from './types.js';\nimport type { IssueStatus, IssueMappingFile, TaskIssueMapping } from './types.js';\n\nimport {\n createPhaseIssue,\n createTaskSubIssue,\n postPlanComment,\n closeIssue,\n reopenIssue,\n getPhaseIssue,\n listPhaseSubIssues,\n postCompletionComment,\n postComment,\n} from './issues.js';\n\nimport {\n ensureProjectBoard,\n addItemToProject,\n moveItemToStatus,\n getProjectBoard,\n} from './projects.js';\n\nimport { ensureLabels } from './labels.js';\nimport { ensureMilestone } from './milestones.js';\nimport { installIssueTemplates } from './templates.js';\n\nimport {\n loadMapping,\n saveMapping,\n updateTaskMapping,\n hashBody,\n} from './mapping.js';\n\nimport {\n checkPhaseProgress,\n getAllPhasesProgress,\n detectInterruptedPhase,\n} from './sync.js';\n\n// ---- Helpers ----------------------------------------------------------------\n\n/**\n * Walk up from startDir to find a directory containing `.planning/`.\n * Returns the directory containing `.planning/` or null if not found.\n *\n * Copied from mcp/utils.ts to avoid depending on the MCP module.\n */\nfunction detectProjectRoot(startDir?: string): string | null {\n let dir = startDir || process.cwd();\n\n for (let i = 0; i < 100; i++) {\n const planningDir = path.join(dir, '.planning');\n try {\n const stat = fs.statSync(planningDir);\n if (stat.isDirectory()) {\n return dir;\n }\n } catch {\n // Not found here, walk up\n }\n\n const parent = path.dirname(dir);\n if (parent === dir) {\n return null;\n }\n dir = parent;\n }\n\n return null;\n}\n\n/**\n * Auth guard -- returns a CmdResult error if auth fails, otherwise null.\n */\nfunction checkAuth(): CmdResult | null {\n try {\n requireAuth();\n return null;\n } catch (e) {\n if (e instanceof AuthError) {\n return { ok: false, error: `GitHub auth required: ${e.message}` };\n }\n throw e;\n }\n}\n\n/**\n * Find an issue entry in the mapping file (searches phases and todos).\n * Used for status updates on close/bounce.\n */\nfunction updateLocalMappingStatus(\n mapping: IssueMappingFile,\n issueNumber: number,\n status: IssueStatus,\n): boolean {\n for (const phase of Object.values(mapping.phases)) {\n if (phase.tracking_issue.number === issueNumber) {\n phase.tracking_issue.status = status;\n return true;\n }\n for (const task of Object.values(phase.tasks)) {\n if (task.number === issueNumber) {\n task.status = status;\n return true;\n }\n }\n }\n return false;\n}\n\n// ---- 1. cmdGitHubSetup ------------------------------------------------------\n\n/**\n * Set up GitHub integration: create project board, labels, milestone, and issue templates.\n */\nexport async function cmdGitHubSetup(\n cwd: string,\n milestoneTitle?: string | null,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const root = detectProjectRoot(cwd);\n if (!root) {\n return { ok: false, error: 'No .planning/ directory found. Project not detected.' };\n }\n\n const boardTitle = 'MAXSIM Task Board';\n const boardResult = await ensureProjectBoard(boardTitle);\n if (!boardResult.ok) {\n return { ok: false, error: `Board setup failed: ${boardResult.error}` };\n }\n\n const labelsResult = await ensureLabels();\n if (!labelsResult.ok) {\n return { ok: false, error: `Label setup failed: ${labelsResult.error}` };\n }\n\n let milestoneData: { number: number } | null = null;\n if (milestoneTitle) {\n const msResult = await ensureMilestone(milestoneTitle);\n if (msResult.ok) {\n milestoneData = msResult.data;\n }\n }\n\n installIssueTemplates(root);\n\n const data = {\n board: {\n projectNumber: boardResult.data.projectNumber,\n projectId: boardResult.data.projectId,\n },\n labels_created: true,\n milestone: milestoneData\n ? { number: milestoneData.number, title: milestoneTitle }\n : null,\n templates_installed: true,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 2. cmdGitHubCreatePhase ------------------------------------------------\n\n/**\n * Create a GitHub Issue for a MAXSIM phase with auto-board placement.\n */\nexport async function cmdGitHubCreatePhase(\n cwd: string,\n phaseNumber: string,\n phaseName: string,\n goal: string,\n requirements?: string[],\n successCriteria?: string[],\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await createPhaseIssue(\n phaseNumber,\n phaseName,\n goal,\n requirements ?? [],\n successCriteria ?? [],\n );\n\n if (!result.ok) {\n return { ok: false, error: `Phase issue creation failed: ${result.error}` };\n }\n\n const data: Record<string, unknown> = {\n issue_number: result.data.number,\n issue_id: result.data.id,\n };\n\n // Auto-add to board and set status \"To Do\"\n const root = detectProjectRoot(cwd);\n if (root) {\n const mapping = loadMapping(root);\n if (mapping && mapping.project_number) {\n const addResult = await addItemToProject(mapping.project_number, result.data.number);\n if (addResult.ok) {\n data.item_id = addResult.data.itemId;\n data.project_number = mapping.project_number;\n\n const moveResult = await moveItemToStatus(\n mapping.project_number,\n addResult.data.itemId,\n 'To Do',\n );\n if (!moveResult.ok) {\n data.board_warning = `Added to board but could not set status: ${moveResult.error}`;\n }\n } else {\n data.board_warning = `Issue created but could not add to board: ${addResult.error}`;\n }\n }\n }\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 3. cmdGitHubCreateTask -------------------------------------------------\n\n/**\n * Create a task sub-issue and link it to a parent phase Issue.\n */\nexport async function cmdGitHubCreateTask(\n cwd: string,\n phaseNumber: string,\n taskId: string,\n title: string,\n body: string,\n parentIssueNumber: number,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await createTaskSubIssue(\n phaseNumber,\n taskId,\n title,\n body,\n parentIssueNumber,\n );\n\n if (!result.ok) {\n return { ok: false, error: `Task issue creation failed: ${result.error}` };\n }\n\n const data: Record<string, unknown> = {\n issue_number: result.data.number,\n issue_id: result.data.id,\n parent_issue_number: parentIssueNumber,\n };\n\n // Auto-update mapping cache\n const root = detectProjectRoot(cwd);\n if (root) {\n try {\n updateTaskMapping(root, phaseNumber, taskId, {\n number: result.data.number,\n id: result.data.id,\n node_id: '',\n item_id: '',\n status: 'To Do',\n });\n } catch (mappingErr) {\n data.mapping_warning = `Issue created but mapping update failed: ${(mappingErr as Error).message}`;\n }\n }\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 4. cmdGitHubBatchCreateTasks -------------------------------------------\n\n/**\n * Create multiple task sub-issues for a phase with automatic rollback on failure.\n */\nexport async function cmdGitHubBatchCreateTasks(\n cwd: string,\n phaseNumber: string,\n parentIssueNumber: number,\n tasksJson: Array<{ task_id: string; title: string; body: string }>,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const succeeded: Array<{ task_id: string; issue_number: number }> = [];\n const failed: Array<{ task_id: string; error: string }> = [];\n const created: Array<{ issueNumber: number; taskId: string }> = [];\n\n for (const task of tasksJson) {\n const result = await createTaskSubIssue(\n phaseNumber,\n task.task_id,\n task.title,\n task.body,\n parentIssueNumber,\n );\n\n if (result.ok) {\n created.push({ issueNumber: result.data.number, taskId: task.task_id });\n succeeded.push({ task_id: task.task_id, issue_number: result.data.number });\n\n // Update mapping cache (best-effort)\n const root = detectProjectRoot(cwd);\n if (root) {\n try {\n updateTaskMapping(root, phaseNumber, task.task_id, {\n number: result.data.number,\n id: result.data.id,\n node_id: '',\n item_id: '',\n status: 'To Do',\n });\n } catch {\n // Mapping update failure does not block batch\n }\n }\n } else {\n failed.push({ task_id: task.task_id, error: result.error });\n\n // Rollback: close all previously created issues with 'not_planned'\n const rolledBack: number[] = [];\n for (const c of [...created].reverse()) {\n const rollbackResult = await closeIssue(\n c.issueNumber,\n '[MAXSIM-ROLLBACK] Partial batch failure',\n 'not_planned',\n );\n if (rollbackResult.ok) {\n rolledBack.push(c.issueNumber);\n }\n }\n\n const data = {\n succeeded,\n failed,\n rolled_back: rolledBack,\n partial: true,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n }\n }\n\n const data = {\n succeeded,\n failed,\n rolled_back: [] as number[],\n partial: false,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 5. cmdGitHubPostPlanComment --------------------------------------------\n\n/**\n * Post a structured plan comment on a phase issue.\n */\nexport async function cmdGitHubPostPlanComment(\n phaseIssueNumber: number,\n planNumber: string,\n planContent: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await postPlanComment(phaseIssueNumber, planNumber, planContent);\n\n if (!result.ok) {\n return { ok: false, error: `Plan comment failed: ${result.error}` };\n }\n\n const data = {\n phase_issue_number: phaseIssueNumber,\n plan_number: planNumber,\n comment_id: result.data.commentId,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 6. cmdGitHubPostComment ------------------------------------------------\n\n/**\n * Post a comment on a GitHub issue with optional type marker.\n */\nexport async function cmdGitHubPostComment(\n issueNumber: number,\n body: string,\n type?: string | null,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n // Prefix body with type marker if provided\n const commentBody = type\n ? `<!-- maxsim:type=${type} -->\\n${body}`\n : body;\n\n const result = await postComment(issueNumber, commentBody);\n if (!result.ok) {\n return { ok: false, error: `Comment failed: ${result.error}` };\n }\n\n const data = {\n issue_number: issueNumber,\n comment_id: result.data.commentId,\n type: type ?? 'general',\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 7. cmdGitHubPostCompletion ---------------------------------------------\n\n/**\n * Post a structured completion comment on an issue.\n */\nexport async function cmdGitHubPostCompletion(\n issueNumber: number,\n commitSha: string,\n filesChanged: string[],\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await postCompletionComment(issueNumber, commitSha, filesChanged);\n if (!result.ok) {\n return { ok: false, error: `Completion comment failed: ${result.error}` };\n }\n\n const data = {\n issue_number: issueNumber,\n commit_sha: commitSha,\n comment_id: result.data.commentId,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 8. cmdGitHubGetIssue ---------------------------------------------------\n\n/**\n * Get details of a specific GitHub issue, optionally including comments.\n */\nexport async function cmdGitHubGetIssue(\n issueNumber: number,\n includeComments?: boolean,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await getPhaseIssue(issueNumber);\n if (!result.ok) {\n return { ok: false, error: `Fetch failed: ${result.error}` };\n }\n\n const issue = result.data;\n const data: Record<string, unknown> = {\n number: issue.number,\n id: issue.id,\n title: issue.title,\n state: issue.state,\n body: issue.body,\n updated_at: issue.updated_at,\n labels: issue.labels,\n comments_url: issue.comments_url,\n };\n\n // Optionally fetch comments\n if (includeComments) {\n try {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n const comments = await octokit.rest.issues.listComments({\n owner,\n repo,\n issue_number: issueNumber,\n per_page: 100,\n });\n data.comments = comments.data.map(c => ({\n id: c.id,\n body: c.body ?? '',\n created_at: c.created_at,\n user: c.user?.login ?? '',\n }));\n } catch {\n data.comments_warning = 'Failed to fetch comments';\n }\n }\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 9. cmdGitHubListSubIssues ----------------------------------------------\n\n/**\n * List all sub-issues of a phase issue.\n */\nexport async function cmdGitHubListSubIssues(\n phaseIssueNumber: number,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await listPhaseSubIssues(phaseIssueNumber);\n if (!result.ok) {\n return { ok: false, error: `List failed: ${result.error}` };\n }\n\n const data = {\n phase_issue_number: phaseIssueNumber,\n sub_issues: result.data,\n count: result.data.length,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 10. cmdGitHubCloseIssue ------------------------------------------------\n\n/**\n * Close a GitHub issue with optional reason comment and auto-mapping update.\n */\nexport async function cmdGitHubCloseIssue(\n issueNumber: number,\n reason?: string | null,\n stateReason?: string | null,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const sr = (stateReason === 'not_planned' ? 'not_planned' : 'completed') as 'completed' | 'not_planned';\n const result = await closeIssue(issueNumber, reason ?? undefined, sr);\n if (!result.ok) {\n return { ok: false, error: `Close failed: ${result.error}` };\n }\n\n const data = {\n issue_number: issueNumber,\n closed: true,\n state_reason: sr,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 11. cmdGitHubReopenIssue -----------------------------------------------\n\n/**\n * Reopen a closed GitHub issue.\n */\nexport async function cmdGitHubReopenIssue(\n issueNumber: number,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await reopenIssue(issueNumber);\n if (!result.ok) {\n return { ok: false, error: `Reopen failed: ${result.error}` };\n }\n\n const data = {\n issue_number: issueNumber,\n reopened: true,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 12. cmdGitHubBounceIssue -----------------------------------------------\n\n/**\n * Bounce a task from In Review to In Progress with a feedback comment.\n */\nexport async function cmdGitHubBounceIssue(\n cwd: string,\n issueNumber: number,\n reason: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n let commented = false;\n let githubWarning: string | undefined;\n\n // Post reviewer feedback comment\n const commentBody = `## Bounced Back to In Progress\\n\\n**Reason:** ${reason}\\n\\n---\\n*Review feedback posted by MAXSIM*`;\n const commentResult = await postComment(issueNumber, commentBody);\n commented = commentResult.ok;\n if (!commentResult.ok) {\n githubWarning = `Comment failed: ${commentResult.error}`;\n }\n\n // Update local mapping status (best-effort)\n const root = detectProjectRoot(cwd);\n if (root) {\n const mapping = loadMapping(root);\n if (mapping) {\n updateLocalMappingStatus(mapping, issueNumber, 'In Progress');\n saveMapping(root, mapping);\n }\n }\n\n const data: Record<string, unknown> = {\n issue_number: issueNumber,\n status: 'In Progress',\n commented,\n reason,\n };\n if (githubWarning) data.github_warning = githubWarning;\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 13. cmdGitHubMoveIssue -------------------------------------------------\n\n/**\n * Move a GitHub issue to a new status column on the project board.\n *\n * Resolves `project_number` and `item_id` from the local mapping file\n * (`.planning/github-issues.json`) using the human-readable issue number.\n */\nexport async function cmdGitHubMoveIssue(\n cwd: string,\n issueNumber: number,\n status: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n if (!issueNumber) {\n return { ok: false, error: 'Missing --issue-number' };\n }\n if (!status) {\n return { ok: false, error: 'Missing --status' };\n }\n\n try {\n // Load the mapping file to resolve project_number and item_id\n const mapping = loadMapping(cwd);\n if (!mapping) {\n return { ok: false, error: 'github-issues.json not found. Run project setup first.' };\n }\n\n const projectNumber = mapping.project_number;\n if (!projectNumber) {\n return { ok: false, error: 'project_number not set in github-issues.json.' };\n }\n\n // Search through phases for a matching issue number\n let itemId: string | null = null;\n\n for (const phase of Object.values(mapping.phases)) {\n // Check tracking issue\n if (phase.tracking_issue?.number === issueNumber) {\n itemId = phase.tracking_issue.item_id;\n break;\n }\n // Check task sub-issues\n for (const task of Object.values(phase.tasks)) {\n if (task.number === issueNumber) {\n itemId = task.item_id;\n break;\n }\n }\n if (itemId) break;\n }\n\n // Also check todos\n if (!itemId && mapping.todos) {\n for (const todo of Object.values(mapping.todos)) {\n if (todo.number === issueNumber) {\n itemId = todo.item_id;\n break;\n }\n }\n }\n\n if (!itemId) {\n return { ok: false, error: `Issue #${issueNumber} not found in github-issues.json mapping.` };\n }\n\n const result = await moveItemToStatus(\n projectNumber,\n itemId,\n status as IssueStatus,\n );\n\n if (!result.ok) {\n return { ok: false, error: `Move failed: ${result.error}` };\n }\n\n const data = {\n project_number: projectNumber,\n item_id: itemId,\n issue_number: issueNumber,\n status,\n moved: true,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 14. cmdGitHubDetectExternalEdits ---------------------------------------\n\n/**\n * Check if a phase issue body was modified outside MAXSIM.\n */\nexport async function cmdGitHubDetectExternalEdits(\n cwd: string,\n phaseNumber: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const root = detectProjectRoot(cwd);\n if (!root) {\n return { ok: false, error: 'No .planning/ directory found. Project not detected.' };\n }\n\n const mapping = loadMapping(root);\n if (!mapping) {\n return { ok: false, error: 'github-issues.json not found. Run project setup first.' };\n }\n\n const phaseMapping = mapping.phases[phaseNumber];\n if (!phaseMapping) {\n return { ok: false, error: `Phase ${phaseNumber} not found in mapping` };\n }\n\n const storedHash = phaseMapping.body_hash;\n const issueNumber = phaseMapping.tracking_issue.number;\n\n const issueResult = await getPhaseIssue(issueNumber);\n if (!issueResult.ok) {\n return { ok: false, error: `Failed to fetch issue #${issueNumber}: ${issueResult.error}` };\n }\n\n const liveHash = hashBody(issueResult.data.body);\n\n if (!storedHash) {\n const data = {\n modified: false,\n phase_number: phaseNumber,\n issue_number: issueNumber,\n note: 'No stored hash -- baseline not yet established',\n };\n return { ok: true, result: JSON.stringify(data, null, 2), rawValue: data };\n }\n\n const modified = liveHash !== storedHash;\n const data = {\n modified,\n phase_number: phaseNumber,\n issue_number: issueNumber,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 15. cmdGitHubQueryBoard ------------------------------------------------\n\n/**\n * Query the GitHub project board. Returns items with their status and issue details.\n */\nexport async function cmdGitHubQueryBoard(\n projectNumber: number,\n status?: string | null,\n phase?: string | null,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await getProjectBoard(projectNumber);\n if (!result.ok) {\n return { ok: false, error: `Board query failed: ${result.error}` };\n }\n\n let items = result.data.items;\n\n if (status) {\n items = items.filter(item => item.status === status);\n }\n\n // Phase filtering would need issue title lookup -- skip for now\n // (same as MCP implementation)\n\n const data = {\n items: items.map(item => ({\n item_id: item.id,\n issue_number: item.issueNumber,\n status: item.status,\n })),\n count: items.length,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 16. cmdGitHubAddToBoard ------------------------------------------------\n\n/**\n * Add a GitHub issue to the project board.\n */\nexport async function cmdGitHubAddToBoard(\n projectNumber: number,\n issueNumber: number,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await addItemToProject(projectNumber, issueNumber);\n if (!result.ok) {\n return { ok: false, error: `Add to board failed: ${result.error}` };\n }\n\n const data = {\n project_number: projectNumber,\n issue_number: issueNumber,\n item_id: result.data.itemId,\n added: true,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 17. cmdGitHubSearchIssues ----------------------------------------------\n\n/**\n * Search GitHub issues by label, state, or text query.\n */\nexport async function cmdGitHubSearchIssues(\n labels?: string[] | null,\n state?: string | null,\n query?: string | null,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoInfo();\n\n const issueState = (state === 'closed' ? 'closed' : state === 'all' ? 'all' : 'open') as 'open' | 'closed' | 'all';\n\n const issues = await octokit.paginate(\n octokit.rest.issues.listForRepo,\n {\n owner,\n repo,\n state: issueState,\n labels: labels ? labels.join(',') : undefined,\n per_page: 100,\n },\n );\n\n let filtered = issues.map(issue => ({\n number: issue.number,\n title: issue.title,\n state: issue.state,\n labels: issue.labels\n .map(l => (typeof l === 'string' ? l : l.name ?? ''))\n .filter(Boolean),\n }));\n\n // Text query filter on title\n if (query) {\n const q = query.toLowerCase();\n filtered = filtered.filter(issue =>\n issue.title.toLowerCase().includes(q),\n );\n }\n\n const data = { issues: filtered, count: filtered.length };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 18. cmdGitHubSyncCheck -------------------------------------------------\n\n/**\n * Verify local github-issues.json mapping is in sync with live GitHub state.\n */\nexport async function cmdGitHubSyncCheck(\n cwd: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const root = detectProjectRoot(cwd);\n if (!root) {\n return { ok: false, error: 'No .planning/ directory found. Project not detected.' };\n }\n\n const mapping = loadMapping(root);\n if (!mapping) {\n return { ok: false, error: 'github-issues.json not found. Run project setup first.' };\n }\n\n const mismatches: Array<{\n phase_number: string;\n issue_number: number;\n local_state: string;\n remote_state: string;\n }> = [];\n const missing_remote: Array<{ phase_number: string; issue_number: number }> = [];\n\n for (const [phaseNum, phaseMapping] of Object.entries(mapping.phases)) {\n const issueNumber = phaseMapping.tracking_issue.number;\n if (!issueNumber) continue;\n\n const issueResult = await getPhaseIssue(issueNumber);\n if (!issueResult.ok) {\n if (issueResult.error.includes('NOT_FOUND') || issueResult.error.includes('404')) {\n missing_remote.push({ phase_number: phaseNum, issue_number: issueNumber });\n }\n continue;\n }\n\n const localStatus = phaseMapping.tracking_issue.status;\n const remoteState = issueResult.data.state;\n\n if (remoteState === 'closed' && localStatus !== 'Done') {\n mismatches.push({\n phase_number: phaseNum,\n issue_number: issueNumber,\n local_state: localStatus,\n remote_state: remoteState,\n });\n } else if (remoteState === 'open' && localStatus === 'Done') {\n mismatches.push({\n phase_number: phaseNum,\n issue_number: issueNumber,\n local_state: localStatus,\n remote_state: remoteState,\n });\n }\n }\n\n const in_sync = mismatches.length === 0 && missing_remote.length === 0;\n\n const data = {\n in_sync,\n mismatches,\n missing_local: [] as unknown[],\n missing_remote,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 19. cmdGitHubPhaseProgress ---------------------------------------------\n\n/**\n * Get progress of a phase by counting open/closed sub-issues on GitHub.\n */\nexport async function cmdGitHubPhaseProgress(\n phaseIssueNumber: number,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await checkPhaseProgress(phaseIssueNumber);\n if (!result.ok) {\n return { ok: false, error: `Progress check failed: ${result.error}` };\n }\n\n const progress = result.data;\n const data = {\n phase_issue_number: phaseIssueNumber,\n total: progress.total,\n completed: progress.completed,\n in_progress: progress.inProgress,\n remaining: progress.remaining,\n tasks: progress.tasks,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 20. cmdGitHubAllProgress -----------------------------------------------\n\n/**\n * Get progress overview for all phases from GitHub Issues.\n */\nexport async function cmdGitHubAllProgress(): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await getAllPhasesProgress();\n if (!result.ok) {\n return { ok: false, error: `All progress check failed: ${result.error}` };\n }\n\n const phases = result.data;\n const data = {\n phases: phases.map(p => ({\n phase_number: p.phaseNumber,\n title: p.title,\n issue_number: p.issueNumber,\n total: p.progress.total,\n completed: p.progress.completed,\n remaining: p.progress.remaining,\n })),\n count: phases.length,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 21. cmdGitHubDetectInterrupted -----------------------------------------\n\n/**\n * Detect whether a phase was interrupted (mix of open/closed sub-issues).\n */\nexport async function cmdGitHubDetectInterrupted(\n phaseIssueNumber: number,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const result = await detectInterruptedPhase(phaseIssueNumber);\n if (!result.ok) {\n return { ok: false, error: `Interruption check failed: ${result.error}` };\n }\n\n const d = result.data;\n const data = {\n phase_issue_number: phaseIssueNumber,\n interrupted: d.interrupted,\n completed_tasks: d.completedTasks,\n remaining_tasks: d.remainingTasks,\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 22. cmdGitHubStatus ----------------------------------------------------\n\n/**\n * Combined status: all-progress + detect-interrupted + board overview.\n */\nexport async function cmdGitHubStatus(\n cwd: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const data: Record<string, unknown> = {};\n\n // All phases progress\n const progressResult = await getAllPhasesProgress();\n if (progressResult.ok) {\n data.phases = progressResult.data.map(p => ({\n phase_number: p.phaseNumber,\n title: p.title,\n issue_number: p.issueNumber,\n total: p.progress.total,\n completed: p.progress.completed,\n remaining: p.progress.remaining,\n }));\n\n // Check for interrupted phases\n const interrupted: Array<Record<string, unknown>> = [];\n for (const p of progressResult.data) {\n if (p.progress.completed > 0 && p.progress.completed < p.progress.total) {\n interrupted.push({\n phase_number: p.phaseNumber,\n issue_number: p.issueNumber,\n completed: p.progress.completed,\n remaining: p.progress.remaining,\n });\n }\n }\n data.interrupted_phases = interrupted;\n } else {\n data.progress_error = progressResult.error;\n }\n\n // Board overview from mapping\n const root = detectProjectRoot(cwd);\n if (root) {\n const mapping = loadMapping(root);\n if (mapping && mapping.project_number) {\n const boardResult = await getProjectBoard(mapping.project_number);\n if (boardResult.ok) {\n const grouped: Record<string, number> = {\n 'To Do': 0,\n 'In Progress': 0,\n 'In Review': 0,\n 'Done': 0,\n };\n for (const item of boardResult.data.items) {\n grouped[item.status] = (grouped[item.status] || 0) + 1;\n }\n data.board = {\n project_number: mapping.project_number,\n columns: grouped,\n total_items: boardResult.data.items.length,\n };\n }\n }\n }\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n\n// ---- 26. cmdGitHubSync ------------------------------------------------------\n\n/**\n * Sync check + report issues. Convenience wrapper around sync-check.\n */\nexport async function cmdGitHubSync(\n cwd: string,\n): Promise<CmdResult> {\n return cmdGitHubSyncCheck(cwd);\n}\n\n// ---- 27. cmdGitHubOverview --------------------------------------------------\n\n/**\n * Board summary grouped by column.\n */\nexport async function cmdGitHubOverview(\n cwd: string,\n): Promise<CmdResult> {\n const authErr = checkAuth();\n if (authErr) return authErr;\n\n try {\n const root = detectProjectRoot(cwd);\n if (!root) {\n return { ok: false, error: 'No .planning/ directory found. Project not detected.' };\n }\n\n const mapping = loadMapping(root);\n if (!mapping || !mapping.project_number) {\n return { ok: false, error: 'No project board configured. Run github setup first.' };\n }\n\n const boardResult = await getProjectBoard(mapping.project_number);\n if (!boardResult.ok) {\n return { ok: false, error: `Board query failed: ${boardResult.error}` };\n }\n\n // Group items by status\n const columns: Record<string, Array<{ item_id: string; issue_number: number }>> = {\n 'To Do': [],\n 'In Progress': [],\n 'In Review': [],\n 'Done': [],\n };\n\n for (const item of boardResult.data.items) {\n const col = columns[item.status];\n if (col) {\n col.push({ item_id: item.id, issue_number: item.issueNumber });\n }\n }\n\n const data = {\n project_number: mapping.project_number,\n columns,\n summary: {\n todo: columns['To Do'].length,\n in_progress: columns['In Progress'].length,\n in_review: columns['In Review'].length,\n done: columns['Done'].length,\n total: boardResult.data.items.length,\n },\n };\n\n return {\n ok: true,\n result: JSON.stringify(data, null, 2),\n rawValue: data,\n };\n } catch (e) {\n return { ok: false, error: (e as Error).message };\n }\n}\n","/**\n * @maxsim/core — Shared type definitions\n */\n\n// ─── Brand utility ───────────────────────────────────────────────────────────\n\ndeclare const __brand: unique symbol;\ntype Brand<T, B extends string> = T & { readonly [__brand]: B };\n\n// ─── Branded types ───────────────────────────────────────────────────────────\n\nexport type PhaseNumber = Brand<string, 'PhaseNumber'>;\nexport type PhasePath = Brand<string, 'PhasePath'>;\nexport type PhaseSlug = Brand<string, 'PhaseSlug'>;\n\nexport function phaseNumber(value: string): PhaseNumber {\n const match = value.match(/^\\d+[A-Z]?(\\.\\d+)?$/i);\n if (!match) {\n throw new Error(`Invalid phase number: ${value}`);\n }\n return value as PhaseNumber;\n}\n\nexport function phasePath(value: string): PhasePath {\n if (!value || typeof value !== 'string') {\n throw new Error(`Invalid phase path: ${value}`);\n }\n return value as PhasePath;\n}\n\nexport function phaseSlug(value: string): PhaseSlug {\n if (!value || typeof value !== 'string') {\n throw new Error(`Invalid phase slug: ${value}`);\n }\n return value as PhaseSlug;\n}\n\n// ─── Result type ─────────────────────────────────────────────────────────────\n\nexport type Result<T> =\n | { success: true; data: T }\n | { success: false; error: string };\n\nexport function ok<T>(data: T): Result<T> {\n return { success: true, data };\n}\n\nexport function err<T = never>(error: string): Result<T> {\n return { success: false, error };\n}\n\n// ─── Command result type ─────────────────────────────────────────────────────\n// Typed return for cmd* functions that previously called output()/error() directly.\n// `result` and `rawValue` mirror the arguments to `output(result, raw, rawValue)`.\n\nexport type CmdResult =\n | { ok: true; result: unknown; rawValue?: unknown }\n | { ok: false; error: string };\n\nexport function cmdOk(result: unknown, rawValue?: unknown): CmdResult {\n return { ok: true, result, rawValue };\n}\n\nexport function cmdErr(error: string): CmdResult {\n return { ok: false, error };\n}\n\n// ─── Core interfaces ─────────────────────────────────────────────────────────\n\nexport type BranchingStrategy = 'none' | 'phase' | 'milestone';\n\nexport type ModelTier = 'opus' | 'sonnet' | 'haiku';\nexport type ModelProfileName = 'quality' | 'balanced' | 'budget' | 'tokenburner';\nexport type ModelResolution = 'inherit' | ModelTier;\n\nexport interface ModelProfileEntry {\n quality: ModelTier;\n balanced: ModelTier;\n budget: ModelTier;\n tokenburner: ModelTier;\n}\n\nexport type AgentType =\n | 'executor'\n | 'planner'\n | 'researcher'\n | 'verifier'\n | 'debugger';\n\nexport type ModelProfiles = Record<AgentType, ModelProfileEntry>;\n\nexport interface PhaseSearchResult {\n found: true;\n directory: string;\n phase_number: string;\n phase_name: string | null;\n phase_slug: string | null;\n plans: string[];\n summaries: string[];\n incomplete_plans: string[];\n has_research: boolean;\n has_context: boolean;\n has_verification: boolean;\n archived?: string;\n /** Whether data was sourced from GitHub Issues or local filesystem. */\n source?: 'github' | 'local';\n}\n\nexport interface RoadmapPhaseInfo {\n found: true;\n phase_number: string;\n phase_name: string;\n goal: string | null;\n section: string;\n}\n\nexport interface ArchivedPhaseDir {\n name: string;\n milestone: string;\n basePath: string;\n fullPath: string;\n}\n\nexport interface GitResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\nexport interface MilestoneInfo {\n version: string;\n name: string;\n}\n\nexport interface AppConfig {\n model_profile: ModelProfileName;\n commit_docs: boolean;\n search_gitignored: boolean;\n branching_strategy: BranchingStrategy;\n phase_branch_template: string;\n milestone_branch_template: string;\n research: boolean;\n plan_checker: boolean;\n verifier: boolean;\n parallelization: boolean;\n brave_search: boolean;\n model_overrides?: Partial<Record<AgentType, ModelTier>>;\n worktree_mode?: WorktreeMode;\n max_parallel_agents?: number;\n review?: Partial<ReviewConfig>;\n}\n\n// ─── Frontmatter interfaces ────────────────────────────────────────────────\n\nexport type FrontmatterData = Record<string, FrontmatterValue>;\n\nexport type FrontmatterValue =\n | string\n | number\n | boolean\n | null\n | FrontmatterValue[]\n | { [key: string]: FrontmatterValue };\n\nexport interface FrontmatterParseResult {\n frontmatter: FrontmatterData;\n body: string;\n hasFrontmatter: boolean;\n}\n\nexport interface FrontmatterValidationResult {\n valid: boolean;\n missing: string[];\n present: string[];\n schema: string;\n}\n\nexport interface FrontmatterSchema {\n required: string[];\n}\n\n// ─── Config interfaces ──────────────────────────────────────────────────────\n\nexport interface PlanningConfig {\n model_profile: ModelProfileName;\n commit_docs: boolean;\n search_gitignored: boolean;\n branching_strategy: BranchingStrategy;\n phase_branch_template: string;\n milestone_branch_template: string;\n workflow: WorkflowConfig;\n parallelization: boolean;\n brave_search: boolean;\n worktree_mode: WorktreeMode;\n max_parallel_agents: number;\n review: ReviewConfig;\n [key: string]: unknown;\n}\n\nexport interface WorkflowConfig {\n research: boolean;\n plan_checker: boolean;\n verifier: boolean;\n [key: string]: boolean;\n}\n\nexport const PLANNING_CONFIG_DEFAULTS: PlanningConfig = {\n model_profile: 'balanced',\n commit_docs: true,\n search_gitignored: false,\n branching_strategy: 'none',\n phase_branch_template: 'maxsim/phase-{phase}-{slug}',\n milestone_branch_template: 'maxsim/{milestone}-{slug}',\n workflow: {\n research: true,\n plan_checker: true,\n verifier: true,\n },\n parallelization: true,\n brave_search: false,\n worktree_mode: 'auto',\n max_parallel_agents: 10,\n review: {\n spec_review: true,\n code_review: true,\n simplify_review: true,\n retry_limit: 3,\n },\n};\n\n// ─── State interfaces ────────────────────────────────────────────────────────\n\nexport interface StateSection {\n header: string;\n body: string;\n}\n\nexport interface Decision {\n phase: string;\n summary: string;\n rationale: string;\n}\n\nexport interface Blocker {\n text: string;\n resolved: boolean;\n}\n\nexport interface PerformanceMetric {\n phase: string;\n plan: string;\n duration: string;\n tasks: string;\n files: string;\n}\n\nexport interface StateData {\n content: string;\n fields: Record<string, string>;\n decisions: Decision[];\n blockers: Blocker[];\n metrics: PerformanceMetric[];\n}\n\nexport interface StatePatchResult {\n updated: string[];\n failed: string[];\n}\n\nexport interface StateSessionOptions {\n stopped_at?: string;\n resume_file?: string;\n}\n\nexport interface StateMetricOptions {\n phase: string;\n plan: string;\n duration: string;\n tasks?: string;\n files?: string;\n}\n\nexport interface StateDecisionOptions {\n phase?: string;\n summary?: string;\n summary_file?: string;\n rationale?: string;\n rationale_file?: string;\n}\n\nexport interface StateBlockerOptions {\n text?: string;\n text_file?: string;\n}\n\nexport interface StateSnapshot {\n current_phase: string | null;\n current_phase_name: string | null;\n total_phases: number | null;\n current_plan: string | null;\n total_plans_in_phase: number | null;\n status: string | null;\n progress_percent: number | null;\n last_activity: string | null;\n last_activity_desc: string | null;\n decisions: Decision[];\n blockers: string[];\n paused_at: string | null;\n session: {\n last_date: string | null;\n stopped_at: string | null;\n resume_file: string | null;\n };\n}\n\n// ─── Roadmap interfaces ─────────────────────────────────────────────────────\n\nexport type PhaseStatus = 'no_directory' | 'empty' | 'discussed' | 'researched' | 'planned' | 'partial' | 'complete';\n\nexport interface RoadmapPhase {\n number: string;\n name: string;\n goal: string | null;\n depends_on: string | null;\n plan_count: number;\n summary_count: number;\n has_context: boolean;\n has_research: boolean;\n disk_status: PhaseStatus;\n roadmap_complete: boolean;\n}\n\nexport interface RoadmapMilestone {\n heading: string;\n version: string;\n}\n\nexport interface RoadmapAnalysis {\n milestones: RoadmapMilestone[];\n phases: RoadmapPhase[];\n phase_count: number;\n completed_phases: number;\n total_plans: number;\n total_summaries: number;\n progress_percent: number;\n current_phase: string | null;\n next_phase: string | null;\n missing_phase_details: string[] | null;\n}\n\nexport interface RoadmapPhaseDetail {\n found: true;\n phase_number: string;\n phase_name: string;\n goal: string | null;\n success_criteria: string[];\n section: string;\n}\n\nexport interface RoadmapPhaseNotFound {\n found: false;\n phase_number: string;\n phase_name?: string;\n error?: string;\n message?: string;\n}\n\nexport type RoadmapGetPhaseResult = RoadmapPhaseDetail | RoadmapPhaseNotFound;\n\n// ─── Milestone interfaces ────────────────────────────────────────────────────\n\nexport interface MilestoneCompleteOptions {\n name?: string;\n archivePhases?: boolean;\n}\n\nexport interface MilestoneResult {\n version: string;\n name: string;\n date: string;\n phases: number;\n plans: number;\n tasks: number;\n accomplishments: string[];\n archived: {\n roadmap: boolean;\n requirements: boolean;\n audit: boolean;\n phases: boolean;\n state_snapshot?: boolean;\n roadmap_snapshot?: boolean;\n };\n milestones_updated: boolean;\n state_updated: boolean;\n state_reset?: boolean;\n}\n\nexport interface ArchiveResult {\n updated: boolean;\n marked_complete: string[];\n not_found: string[];\n total: number;\n}\n\n// ─── Commands interfaces ────────────────────────────────────────────────────\n\nexport interface TodoItem {\n github_issue: number;\n created: string;\n title: string;\n area: string;\n}\n\nexport interface HistoryPhaseDigest {\n name: string;\n provides: string[];\n affects: string[];\n patterns: string[];\n}\n\nexport interface HistoryDigest {\n phases: Record<string, HistoryPhaseDigest>;\n decisions: Array<{ phase: string; decision: string }>;\n tech_stack: string[];\n}\n\nexport interface SlugResult {\n slug: string;\n}\n\nexport interface WebSearchOptions {\n limit?: number;\n freshness?: string | null;\n}\n\nexport interface WebSearchResult {\n title: string;\n url: string;\n description: string;\n age: string | null;\n}\n\nexport interface ScaffoldOptions {\n phase: string | null;\n name: string | null;\n}\n\nexport type TimestampFormat = 'full' | 'date' | 'filename';\n\n// ─── Phase lifecycle interfaces ─────────────────────────────────────────────\n\nexport interface PhaseAddResult {\n phase_number: number;\n padded: string;\n name: string;\n slug: string | null;\n directory: string;\n}\n\nexport interface PhaseInsertResult {\n phase_number: string;\n after_phase: string;\n name: string;\n slug: string | null;\n directory: string;\n}\n\nexport interface PhaseRemoveResult {\n removed: string;\n directory_deleted: string | null;\n renamed_directories: Array<{ from: string; to: string }>;\n renamed_files: Array<{ from: string; to: string }>;\n roadmap_updated: boolean;\n state_updated: boolean;\n}\n\nexport interface PhaseCompleteResult {\n completed_phase: string;\n phase_name: string | null;\n plans_executed: string;\n next_phase: string | null;\n next_phase_name: string | null;\n is_last_phase: boolean;\n date: string;\n roadmap_updated: boolean;\n state_updated: boolean;\n}\n\nexport interface PhasePlanIndexResult {\n phase: string;\n plans: Array<{\n id: string;\n wave: number;\n autonomous: boolean;\n objective: string | null;\n files_modified: string[];\n task_count: number;\n has_summary: boolean;\n }>;\n waves: Record<string, string[]>;\n incomplete: string[];\n has_checkpoints: boolean;\n}\n\n// ─── Worktree & Parallel Execution types ─────────────────────────────────────\n\nexport type WorktreeState = 'active' | 'completed' | 'failed' | 'cleanup';\nexport type WorktreeMode = 'auto' | 'always' | 'never';\nexport type ExecutionMode = 'batch' | 'standard';\n\nexport interface WorktreeInfo {\n id: string;\n path: string;\n branch: string;\n wave: number;\n plan_id: string;\n status: WorktreeState;\n created_at: string;\n}\n\nexport interface WorktreeAssignment {\n plan_id: string;\n worktree: WorktreeInfo;\n wave: number;\n}\n\nexport interface ParallelExecutionConfig {\n enabled: boolean;\n max_worktrees: number;\n worktree_mode: WorktreeMode;\n review: ReviewConfig;\n}\n\nexport interface ReviewConfig {\n spec_review: boolean;\n code_review: boolean;\n simplify_review: boolean;\n retry_limit: number;\n}\n\nexport interface ReviewGateResult {\n stage: string;\n passed: boolean;\n attempt: number;\n max_attempts: number;\n findings: string[];\n evidence: string[];\n}\n\nexport interface WaveExecutionResult {\n wave_num: number;\n mode: ExecutionMode;\n completed_plans: string[];\n failed_plans: string[];\n review_results: Record<string, ReviewGateResult[]>;\n worktrees_used: string[];\n duration_sec: number;\n}\n\nexport interface PhasesListOptions {\n type: string | null;\n phase: string | null;\n includeArchived: boolean;\n offset?: number;\n limit?: number;\n}\n\n// ─── Archive interfaces ─────────────────────────────────────────────────────\n\nexport interface ArchivePreview {\n phase_dir: string;\n archive_dir: string;\n decisions_to_prune: string[];\n blockers_to_prune: string[];\n roadmap_section_to_collapse: string;\n collapsed_line: string;\n}\n\n// ─── Agent-level init context interfaces ─────────────────────────────────────\n\nexport interface ExecutorAgentContext {\n executor_model: string;\n verifier_model: string;\n commit_docs: boolean;\n parallelization: boolean;\n branching_strategy: string;\n phase_branch_template: string;\n milestone_branch_template: string;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n state_path: string;\n conventions_path?: string;\n codebase_docs: string[];\n}\n\n// Note: some context interfaces use legacy role-named model fields that intentionally map\n// to AgentType values for model resolution. The mappings are:\n// checker_model → resolves via 'planner' AgentType\n// synthesizer_model → resolves via 'researcher' AgentType (defined in init.ts contexts)\n// roadmapper_model → resolves via 'planner' AgentType (defined in init.ts contexts)\n// mapper_model → resolves via 'researcher' AgentType (defined in init.ts contexts)\n// These are deliberate design decisions, not omissions.\nexport interface PlannerAgentContext {\n planner_model: string;\n checker_model: ModelResolution;\n commit_docs: boolean;\n research_enabled: boolean;\n plan_checker_enabled: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n phase_req_ids: string | null;\n has_research: boolean;\n has_context: boolean;\n has_plans: boolean;\n plan_count: number;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n conventions_path?: string;\n context_path?: string;\n research_path?: string;\n codebase_docs: string[];\n}\n\nexport interface ResearcherAgentContext {\n researcher_model: string;\n commit_docs: boolean;\n brave_search: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n padded_phase: string | null;\n phase_req_ids: string | null;\n has_research: boolean;\n has_context: boolean;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n conventions_path?: string;\n context_path?: string;\n codebase_docs: string[];\n}\n\nexport interface VerifierAgentContext {\n verifier_model: string;\n commit_docs: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n phase_req_ids: string | null;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n codebase_docs: string[];\n}\n\nexport interface DebuggerAgentContext {\n debugger_model: string;\n commit_docs: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n state_path: string;\n conventions_path?: string;\n codebase_docs: string[];\n}\n\n// ─── Drift detection types ──────────────────────────────────────────────────\n\nexport type DriftStatus = 'drift' | 'aligned';\nexport type DriftSeverity = 'critical' | 'warning' | 'info';\nexport type DriftDirection = 'spec_ahead' | 'code_ahead' | 'undocumented';\nexport type DriftItemStatus = 'NEW' | 'RESOLVED' | 'UNCHANGED';\n\nexport interface DriftReportFrontmatter {\n status: DriftStatus;\n checked: string;\n previous_hash: string | null;\n previous_report_date: string | null;\n total_items: number;\n aligned_count: number;\n critical_count: number;\n warning_count: number;\n info_count: number;\n undocumented_count: number;\n spec_files_checked: string[];\n}\n\nexport interface CheckDriftContext {\n drift_model: string;\n commit_docs: boolean;\n has_planning: boolean;\n has_requirements: boolean;\n has_roadmap: boolean;\n has_nogos: boolean;\n has_conventions: boolean;\n has_previous_report: boolean;\n previous_report_path: string | null;\n spec_files: string[];\n phase_dirs: string[];\n archived_milestone_dirs: string[];\n state_path: string;\n requirements_path: string;\n roadmap_path: string;\n nogos_path: string | null;\n conventions_path: string | null;\n codebase_docs: string[];\n}\n\nexport interface RealignContext {\n commit_docs: boolean;\n direction: string | null;\n has_report: boolean;\n report_path: string;\n has_planning: boolean;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n phase_dirs: string[];\n codebase_docs: string[];\n}\n\n","'use strict';\n\nconst ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case MAP:\n case SEQ:\n return true;\n }\n return false;\n}\nfunction isNode(node) {\n if (node && typeof node === 'object')\n switch (node[NODE_TYPE]) {\n case ALIAS:\n case MAP:\n case SCALAR:\n case SEQ:\n return true;\n }\n return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexports.ALIAS = ALIAS;\nexports.DOC = DOC;\nexports.MAP = MAP;\nexports.NODE_TYPE = NODE_TYPE;\nexports.PAIR = PAIR;\nexports.SCALAR = SCALAR;\nexports.SEQ = SEQ;\nexports.hasAnchor = hasAnchor;\nexports.isAlias = isAlias;\nexports.isCollection = isCollection;\nexports.isDocument = isDocument;\nexports.isMap = isMap;\nexports.isNode = isNode;\nexports.isPair = isPair;\nexports.isScalar = isScalar;\nexports.isSeq = isSeq;\n","'use strict';\n\nvar identity = require('./nodes/identity.js');\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n const ctrl = callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visit_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = visit_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = visit_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = visit_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n * - `key`: For sequence values and map `Pair`, the node's index in the\n * collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n * `null` for the root node.\n * - `node`: The current node.\n * - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `Promise`: Must resolve to one of the following values\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this node, continue with next\n * sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current node, then continue with the next one\n * - `Node`: Replace the current node, then continue by visiting it\n * - `number`: While iterating the items of a sequence or map, set the index\n * of the next step. This is useful especially if the index of the current\n * node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n const visitor_ = initVisitor(visitor);\n if (identity.isDocument(node)) {\n const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n if (cd === REMOVE)\n node.contents = null;\n }\n else\n await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n const ctrl = await callVisitor(key, node, visitor, path);\n if (identity.isNode(ctrl) || identity.isPair(ctrl)) {\n replaceNode(key, path, ctrl);\n return visitAsync_(key, ctrl, visitor, path);\n }\n if (typeof ctrl !== 'symbol') {\n if (identity.isCollection(node)) {\n path = Object.freeze(path.concat(node));\n for (let i = 0; i < node.items.length; ++i) {\n const ci = await visitAsync_(i, node.items[i], visitor, path);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n node.items.splice(i, 1);\n i -= 1;\n }\n }\n }\n else if (identity.isPair(node)) {\n path = Object.freeze(path.concat(node));\n const ck = await visitAsync_('key', node.key, visitor, path);\n if (ck === BREAK)\n return BREAK;\n else if (ck === REMOVE)\n node.key = null;\n const cv = await visitAsync_('value', node.value, visitor, path);\n if (cv === BREAK)\n return BREAK;\n else if (cv === REMOVE)\n node.value = null;\n }\n }\n return ctrl;\n}\nfunction initVisitor(visitor) {\n if (typeof visitor === 'object' &&\n (visitor.Collection || visitor.Node || visitor.Value)) {\n return Object.assign({\n Alias: visitor.Node,\n Map: visitor.Node,\n Scalar: visitor.Node,\n Seq: visitor.Node\n }, visitor.Value && {\n Map: visitor.Value,\n Scalar: visitor.Value,\n Seq: visitor.Value\n }, visitor.Collection && {\n Map: visitor.Collection,\n Seq: visitor.Collection\n }, visitor);\n }\n return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n if (typeof visitor === 'function')\n return visitor(key, node, path);\n if (identity.isMap(node))\n return visitor.Map?.(key, node, path);\n if (identity.isSeq(node))\n return visitor.Seq?.(key, node, path);\n if (identity.isPair(node))\n return visitor.Pair?.(key, node, path);\n if (identity.isScalar(node))\n return visitor.Scalar?.(key, node, path);\n if (identity.isAlias(node))\n return visitor.Alias?.(key, node, path);\n return undefined;\n}\nfunction replaceNode(key, path, node) {\n const parent = path[path.length - 1];\n if (identity.isCollection(parent)) {\n parent.items[key] = node;\n }\n else if (identity.isPair(parent)) {\n if (key === 'key')\n parent.key = node;\n else\n parent.value = node;\n }\n else if (identity.isDocument(parent)) {\n parent.contents = node;\n }\n else {\n const pt = identity.isAlias(parent) ? 'alias' : 'scalar';\n throw new Error(`Cannot replace node with ${pt} parent`);\n }\n}\n\nexports.visit = visit;\nexports.visitAsync = visitAsync;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\nconst escapeChars = {\n '!': '%21',\n ',': '%2C',\n '[': '%5B',\n ']': '%5D',\n '{': '%7B',\n '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n constructor(yaml, tags) {\n /**\n * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n * included in the document's stringified representation.\n */\n this.docStart = null;\n /** The doc-end marker `...`. */\n this.docEnd = false;\n this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n this.tags = Object.assign({}, Directives.defaultTags, tags);\n }\n clone() {\n const copy = new Directives(this.yaml, this.tags);\n copy.docStart = this.docStart;\n return copy;\n }\n /**\n * During parsing, get a Directives instance for the current document and\n * update the stream state according to the current version's spec.\n */\n atDocument() {\n const res = new Directives(this.yaml, this.tags);\n switch (this.yaml.version) {\n case '1.1':\n this.atNextDocument = true;\n break;\n case '1.2':\n this.atNextDocument = false;\n this.yaml = {\n explicit: Directives.defaultYaml.explicit,\n version: '1.2'\n };\n this.tags = Object.assign({}, Directives.defaultTags);\n break;\n }\n return res;\n }\n /**\n * @param onError - May be called even if the action was successful\n * @returns `true` on success\n */\n add(line, onError) {\n if (this.atNextDocument) {\n this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n this.tags = Object.assign({}, Directives.defaultTags);\n this.atNextDocument = false;\n }\n const parts = line.trim().split(/[ \\t]+/);\n const name = parts.shift();\n switch (name) {\n case '%TAG': {\n if (parts.length !== 2) {\n onError(0, '%TAG directive should contain exactly two parts');\n if (parts.length < 2)\n return false;\n }\n const [handle, prefix] = parts;\n this.tags[handle] = prefix;\n return true;\n }\n case '%YAML': {\n this.yaml.explicit = true;\n if (parts.length !== 1) {\n onError(0, '%YAML directive should contain exactly one part');\n return false;\n }\n const [version] = parts;\n if (version === '1.1' || version === '1.2') {\n this.yaml.version = version;\n return true;\n }\n else {\n const isValid = /^\\d+\\.\\d+$/.test(version);\n onError(6, `Unsupported YAML version ${version}`, isValid);\n return false;\n }\n }\n default:\n onError(0, `Unknown directive ${name}`, true);\n return false;\n }\n }\n /**\n * Resolves a tag, matching handles to those defined in %TAG directives.\n *\n * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n * `'!local'` tag, or `null` if unresolvable.\n */\n tagName(source, onError) {\n if (source === '!')\n return '!'; // non-specific tag\n if (source[0] !== '!') {\n onError(`Not a valid tag: ${source}`);\n return null;\n }\n if (source[1] === '<') {\n const verbatim = source.slice(2, -1);\n if (verbatim === '!' || verbatim === '!!') {\n onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n return null;\n }\n if (source[source.length - 1] !== '>')\n onError('Verbatim tags must end with a >');\n return verbatim;\n }\n const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n if (!suffix)\n onError(`The ${source} tag has no suffix`);\n const prefix = this.tags[handle];\n if (prefix) {\n try {\n return prefix + decodeURIComponent(suffix);\n }\n catch (error) {\n onError(String(error));\n return null;\n }\n }\n if (handle === '!')\n return source; // local tag\n onError(`Could not resolve tag: ${source}`);\n return null;\n }\n /**\n * Given a fully resolved tag, returns its printable string form,\n * taking into account current tag prefixes and defaults.\n */\n tagString(tag) {\n for (const [handle, prefix] of Object.entries(this.tags)) {\n if (tag.startsWith(prefix))\n return handle + escapeTagName(tag.substring(prefix.length));\n }\n return tag[0] === '!' ? tag : `!<${tag}>`;\n }\n toString(doc) {\n const lines = this.yaml.explicit\n ? [`%YAML ${this.yaml.version || '1.2'}`]\n : [];\n const tagEntries = Object.entries(this.tags);\n let tagNames;\n if (doc && tagEntries.length > 0 && identity.isNode(doc.contents)) {\n const tags = {};\n visit.visit(doc.contents, (_key, node) => {\n if (identity.isNode(node) && node.tag)\n tags[node.tag] = true;\n });\n tagNames = Object.keys(tags);\n }\n else\n tagNames = [];\n for (const [handle, prefix] of tagEntries) {\n if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n continue;\n if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n lines.push(`%TAG ${handle} ${prefix}`);\n }\n return lines.join('\\n');\n }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexports.Directives = Directives;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar visit = require('../visit.js');\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n const sa = JSON.stringify(anchor);\n const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n throw new Error(msg);\n }\n return true;\n}\nfunction anchorNames(root) {\n const anchors = new Set();\n visit.visit(root, {\n Value(_key, node) {\n if (node.anchor)\n anchors.add(node.anchor);\n }\n });\n return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n for (let i = 1; true; ++i) {\n const name = `${prefix}${i}`;\n if (!exclude.has(name))\n return name;\n }\n}\nfunction createNodeAnchors(doc, prefix) {\n const aliasObjects = [];\n const sourceObjects = new Map();\n let prevAnchors = null;\n return {\n onAnchor: (source) => {\n aliasObjects.push(source);\n prevAnchors ?? (prevAnchors = anchorNames(doc));\n const anchor = findNewAnchor(prefix, prevAnchors);\n prevAnchors.add(anchor);\n return anchor;\n },\n /**\n * With circular references, the source node is only resolved after all\n * of its child nodes are. This is why anchors are set only after all of\n * the nodes have been created.\n */\n setAnchors: () => {\n for (const source of aliasObjects) {\n const ref = sourceObjects.get(source);\n if (typeof ref === 'object' &&\n ref.anchor &&\n (identity.isScalar(ref.node) || identity.isCollection(ref.node))) {\n ref.node.anchor = ref.anchor;\n }\n else {\n const error = new Error('Failed to resolve repeated object (this should not happen)');\n error.source = source;\n throw error;\n }\n }\n },\n sourceObjects\n };\n}\n\nexports.anchorIsValid = anchorIsValid;\nexports.anchorNames = anchorNames;\nexports.createNodeAnchors = createNodeAnchors;\nexports.findNewAnchor = findNewAnchor;\n","'use strict';\n\n/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n if (val && typeof val === 'object') {\n if (Array.isArray(val)) {\n for (let i = 0, len = val.length; i < len; ++i) {\n const v0 = val[i];\n const v1 = applyReviver(reviver, val, String(i), v0);\n // eslint-disable-next-line @typescript-eslint/no-array-delete\n if (v1 === undefined)\n delete val[i];\n else if (v1 !== v0)\n val[i] = v1;\n }\n }\n else if (val instanceof Map) {\n for (const k of Array.from(val.keys())) {\n const v0 = val.get(k);\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n val.delete(k);\n else if (v1 !== v0)\n val.set(k, v1);\n }\n }\n else if (val instanceof Set) {\n for (const v0 of Array.from(val)) {\n const v1 = applyReviver(reviver, val, v0, v0);\n if (v1 === undefined)\n val.delete(v0);\n else if (v1 !== v0) {\n val.delete(v0);\n val.add(v1);\n }\n }\n }\n else {\n for (const [k, v0] of Object.entries(val)) {\n const v1 = applyReviver(reviver, val, k, v0);\n if (v1 === undefined)\n delete val[k];\n else if (v1 !== v0)\n val[k] = v1;\n }\n }\n }\n return reviver.call(obj, key, val);\n}\n\nexports.applyReviver = applyReviver;\n","'use strict';\n\nvar identity = require('./identity.js');\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n * as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n * `{ keep: true }` is not set, output should be suitable for JSON\n * stringification.\n */\nfunction toJS(value, arg, ctx) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n if (Array.isArray(value))\n return value.map((v, i) => toJS(v, String(i), ctx));\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (!ctx || !identity.hasAnchor(value))\n return value.toJSON(arg, ctx);\n const data = { aliasCount: 0, count: 1, res: undefined };\n ctx.anchors.set(value, data);\n ctx.onCreate = res => {\n data.res = res;\n delete ctx.onCreate;\n };\n const res = value.toJSON(arg, ctx);\n if (ctx.onCreate)\n ctx.onCreate(res);\n return res;\n }\n if (typeof value === 'bigint' && !ctx?.keep)\n return Number(value);\n return value;\n}\n\nexports.toJS = toJS;\n","'use strict';\n\nvar applyReviver = require('../doc/applyReviver.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nclass NodeBase {\n constructor(type) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: type });\n }\n /** Create a copy of this node. */\n clone() {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** A plain JavaScript representation of this node. */\n toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n if (!identity.isDocument(doc))\n throw new TypeError('A document argument is required');\n const ctx = {\n anchors: new Map(),\n doc,\n keep: true,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this, '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n}\n\nexports.NodeBase = NodeBase;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar visit = require('../visit.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nclass Alias extends Node.NodeBase {\n constructor(source) {\n super(identity.ALIAS);\n this.source = source;\n Object.defineProperty(this, 'tag', {\n set() {\n throw new Error('Alias nodes cannot have tags');\n }\n });\n }\n /**\n * Resolve the value of this alias within `doc`, finding the last\n * instance of the `source` anchor before this node.\n */\n resolve(doc, ctx) {\n let nodes;\n if (ctx?.aliasResolveCache) {\n nodes = ctx.aliasResolveCache;\n }\n else {\n nodes = [];\n visit.visit(doc, {\n Node: (_key, node) => {\n if (identity.isAlias(node) || identity.hasAnchor(node))\n nodes.push(node);\n }\n });\n if (ctx)\n ctx.aliasResolveCache = nodes;\n }\n let found = undefined;\n for (const node of nodes) {\n if (node === this)\n break;\n if (node.anchor === this.source)\n found = node;\n }\n return found;\n }\n toJSON(_arg, ctx) {\n if (!ctx)\n return { source: this.source };\n const { anchors, doc, maxAliasCount } = ctx;\n const source = this.resolve(doc, ctx);\n if (!source) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new ReferenceError(msg);\n }\n let data = anchors.get(source);\n if (!data) {\n // Resolve anchors for Node.prototype.toJS()\n toJS.toJS(source, null, ctx);\n data = anchors.get(source);\n }\n /* istanbul ignore if */\n if (data?.res === undefined) {\n const msg = 'This should not happen: Alias anchor was not resolved?';\n throw new ReferenceError(msg);\n }\n if (maxAliasCount >= 0) {\n data.count += 1;\n if (data.aliasCount === 0)\n data.aliasCount = getAliasCount(doc, source, anchors);\n if (data.count * data.aliasCount > maxAliasCount) {\n const msg = 'Excessive alias count indicates a resource exhaustion attack';\n throw new ReferenceError(msg);\n }\n }\n return data.res;\n }\n toString(ctx, _onComment, _onChompKeep) {\n const src = `*${this.source}`;\n if (ctx) {\n anchors.anchorIsValid(this.source);\n if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n throw new Error(msg);\n }\n if (ctx.implicitKey)\n return `${src} `;\n }\n return src;\n }\n}\nfunction getAliasCount(doc, node, anchors) {\n if (identity.isAlias(node)) {\n const source = node.resolve(doc);\n const anchor = anchors && source && anchors.get(source);\n return anchor ? anchor.count * anchor.aliasCount : 0;\n }\n else if (identity.isCollection(node)) {\n let count = 0;\n for (const item of node.items) {\n const c = getAliasCount(doc, item, anchors);\n if (c > count)\n count = c;\n }\n return count;\n }\n else if (identity.isPair(node)) {\n const kc = getAliasCount(doc, node.key, anchors);\n const vc = getAliasCount(doc, node.value, anchors);\n return Math.max(kc, vc);\n }\n return 1;\n}\n\nexports.Alias = Alias;\n","'use strict';\n\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\nvar toJS = require('./toJS.js');\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends Node.NodeBase {\n constructor(value) {\n super(identity.SCALAR);\n this.value = value;\n }\n toJSON(arg, ctx) {\n return ctx?.keep ? this.value : toJS.toJS(this.value, arg, ctx);\n }\n toString() {\n return String(this.value);\n }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexports.Scalar = Scalar;\nexports.isScalarValue = isScalarValue;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n if (tagName) {\n const match = tags.filter(t => t.tag === tagName);\n const tagObj = match.find(t => !t.format) ?? match[0];\n if (!tagObj)\n throw new Error(`Tag ${tagName} not found`);\n return tagObj;\n }\n return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n if (identity.isDocument(value))\n value = value.contents;\n if (identity.isNode(value))\n return value;\n if (identity.isPair(value)) {\n const map = ctx.schema[identity.MAP].createNode?.(ctx.schema, null, ctx);\n map.items.push(value);\n return map;\n }\n if (value instanceof String ||\n value instanceof Number ||\n value instanceof Boolean ||\n (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n ) {\n // https://tc39.es/ecma262/#sec-serializejsonproperty\n value = value.valueOf();\n }\n const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n // Detect duplicate references to the same object & use Alias nodes for all\n // after first. The `ref` wrapper allows for circular references to resolve.\n let ref = undefined;\n if (aliasDuplicateObjects && value && typeof value === 'object') {\n ref = sourceObjects.get(value);\n if (ref) {\n ref.anchor ?? (ref.anchor = onAnchor(value));\n return new Alias.Alias(ref.anchor);\n }\n else {\n ref = { anchor: null, node: null };\n sourceObjects.set(value, ref);\n }\n }\n if (tagName?.startsWith('!!'))\n tagName = defaultTagPrefix + tagName.slice(2);\n let tagObj = findTagObject(value, tagName, schema.tags);\n if (!tagObj) {\n if (value && typeof value.toJSON === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n value = value.toJSON();\n }\n if (!value || typeof value !== 'object') {\n const node = new Scalar.Scalar(value);\n if (ref)\n ref.node = node;\n return node;\n }\n tagObj =\n value instanceof Map\n ? schema[identity.MAP]\n : Symbol.iterator in Object(value)\n ? schema[identity.SEQ]\n : schema[identity.MAP];\n }\n if (onTagObj) {\n onTagObj(tagObj);\n delete ctx.onTagObj;\n }\n const node = tagObj?.createNode\n ? tagObj.createNode(ctx.schema, value, ctx)\n : typeof tagObj?.nodeClass?.from === 'function'\n ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n : new Scalar.Scalar(value);\n if (tagName)\n node.tag = tagName;\n else if (!tagObj.default)\n node.tag = tagObj.tag;\n if (ref)\n ref.node = node;\n return node;\n}\n\nexports.createNode = createNode;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar identity = require('./identity.js');\nvar Node = require('./Node.js');\n\nfunction collectionFromPath(schema, path, value) {\n let v = value;\n for (let i = path.length - 1; i >= 0; --i) {\n const k = path[i];\n if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n const a = [];\n a[k] = v;\n v = a;\n }\n else {\n v = new Map([[k, v]]);\n }\n }\n return createNode.createNode(v, undefined, {\n aliasDuplicateObjects: false,\n keepUndefined: false,\n onAnchor: () => {\n throw new Error('This should not happen, please report a bug.');\n },\n schema,\n sourceObjects: new Map()\n });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends Node.NodeBase {\n constructor(type, schema) {\n super(type);\n Object.defineProperty(this, 'schema', {\n value: schema,\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n /**\n * Create a copy of this collection.\n *\n * @param schema - If defined, overwrites the original's schema\n */\n clone(schema) {\n const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n if (schema)\n copy.schema = schema;\n copy.items = copy.items.map(it => identity.isNode(it) || identity.isPair(it) ? it.clone(schema) : it);\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /**\n * Adds a value to the collection. For `!!map` and `!!omap` the value must\n * be a Pair instance or a `{ key, value }` object, which may not have a key\n * that already exists in the map.\n */\n addIn(path, value) {\n if (isEmptyPath(path))\n this.add(value);\n else {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.addIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n /**\n * Removes a value from the collection.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.delete(key);\n const node = this.get(key, true);\n if (identity.isCollection(node))\n return node.deleteIn(rest);\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n const [key, ...rest] = path;\n const node = this.get(key, true);\n if (rest.length === 0)\n return !keepScalar && identity.isScalar(node) ? node.value : node;\n else\n return identity.isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n }\n hasAllNullValues(allowScalar) {\n return this.items.every(node => {\n if (!identity.isPair(node))\n return false;\n const n = node.value;\n return (n == null ||\n (allowScalar &&\n identity.isScalar(n) &&\n n.value == null &&\n !n.commentBefore &&\n !n.comment &&\n !n.tag));\n });\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n */\n hasIn(path) {\n const [key, ...rest] = path;\n if (rest.length === 0)\n return this.has(key);\n const node = this.get(key, true);\n return identity.isCollection(node) ? node.hasIn(rest) : false;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n const [key, ...rest] = path;\n if (rest.length === 0) {\n this.set(key, value);\n }\n else {\n const node = this.get(key, true);\n if (identity.isCollection(node))\n node.setIn(rest, value);\n else if (node === undefined && this.schema)\n this.set(key, collectionFromPath(this.schema, rest, value));\n else\n throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n }\n }\n}\n\nexports.Collection = Collection;\nexports.collectionFromPath = collectionFromPath;\nexports.isEmptyPath = isEmptyPath;\n","'use strict';\n\n/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n if (/^\\n+$/.test(comment))\n return comment.substring(1);\n return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n ? indentComment(comment, indent)\n : comment.includes('\\n')\n ? '\\n' + indentComment(comment, indent)\n : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexports.indentComment = indentComment;\nexports.lineComment = lineComment;\nexports.stringifyComment = stringifyComment;\n","'use strict';\n\nconst FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n if (!lineWidth || lineWidth < 0)\n return text;\n if (lineWidth < minContentWidth)\n minContentWidth = 0;\n const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n if (text.length <= endStep)\n return text;\n const folds = [];\n const escapedFolds = {};\n let end = lineWidth - indent.length;\n if (typeof indentAtStart === 'number') {\n if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n folds.push(0);\n else\n end = lineWidth - indentAtStart;\n }\n let split = undefined;\n let prev = undefined;\n let overflow = false;\n let i = -1;\n let escStart = -1;\n let escEnd = -1;\n if (mode === FOLD_BLOCK) {\n i = consumeMoreIndentedLines(text, i, indent.length);\n if (i !== -1)\n end = i + endStep;\n }\n for (let ch; (ch = text[(i += 1)]);) {\n if (mode === FOLD_QUOTED && ch === '\\\\') {\n escStart = i;\n switch (text[i + 1]) {\n case 'x':\n i += 3;\n break;\n case 'u':\n i += 5;\n break;\n case 'U':\n i += 9;\n break;\n default:\n i += 1;\n }\n escEnd = i;\n }\n if (ch === '\\n') {\n if (mode === FOLD_BLOCK)\n i = consumeMoreIndentedLines(text, i, indent.length);\n end = i + indent.length + endStep;\n split = undefined;\n }\n else {\n if (ch === ' ' &&\n prev &&\n prev !== ' ' &&\n prev !== '\\n' &&\n prev !== '\\t') {\n // space surrounded by non-space can be replaced with newline + indent\n const next = text[i + 1];\n if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n split = i;\n }\n if (i >= end) {\n if (split) {\n folds.push(split);\n end = split + endStep;\n split = undefined;\n }\n else if (mode === FOLD_QUOTED) {\n // white-space collected at end may stretch past lineWidth\n while (prev === ' ' || prev === '\\t') {\n prev = ch;\n ch = text[(i += 1)];\n overflow = true;\n }\n // Account for newline escape, but don't break preceding escape\n const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n // Bail out if lineWidth & minContentWidth are shorter than an escape string\n if (escapedFolds[j])\n return text;\n folds.push(j);\n escapedFolds[j] = true;\n end = j + endStep;\n split = undefined;\n }\n else {\n overflow = true;\n }\n }\n }\n prev = ch;\n }\n if (overflow && onOverflow)\n onOverflow();\n if (folds.length === 0)\n return text;\n if (onFold)\n onFold();\n let res = text.slice(0, folds[0]);\n for (let i = 0; i < folds.length; ++i) {\n const fold = folds[i];\n const end = folds[i + 1] || text.length;\n if (fold === 0)\n res = `\\n${indent}${text.slice(0, end)}`;\n else {\n if (mode === FOLD_QUOTED && escapedFolds[fold])\n res += `${text[fold]}\\\\`;\n res += `\\n${indent}${text.slice(fold + 1, end)}`;\n }\n }\n return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n let end = i;\n let start = i + 1;\n let ch = text[start];\n while (ch === ' ' || ch === '\\t') {\n if (i < start + indent) {\n ch = text[++i];\n }\n else {\n do {\n ch = text[++i];\n } while (ch && ch !== '\\n');\n end = i;\n start = i + 1;\n ch = text[start];\n }\n }\n return end;\n}\n\nexports.FOLD_BLOCK = FOLD_BLOCK;\nexports.FOLD_FLOW = FOLD_FLOW;\nexports.FOLD_QUOTED = FOLD_QUOTED;\nexports.foldFlowLines = foldFlowLines;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar foldFlowLines = require('./foldFlowLines.js');\n\nconst getFoldOptions = (ctx, isBlock) => ({\n indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n lineWidth: ctx.options.lineWidth,\n minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n if (!lineWidth || lineWidth < 0)\n return false;\n const limit = lineWidth - indentLength;\n const strLen = str.length;\n if (strLen <= limit)\n return false;\n for (let i = 0, start = 0; i < strLen; ++i) {\n if (str[i] === '\\n') {\n if (i - start > limit)\n return true;\n start = i + 1;\n if (strLen - start <= limit)\n return false;\n }\n }\n return true;\n}\nfunction doubleQuotedString(value, ctx) {\n const json = JSON.stringify(value);\n if (ctx.options.doubleQuotedAsJSON)\n return json;\n const { implicitKey } = ctx;\n const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n let str = '';\n let start = 0;\n for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n // space before newline needs to be escaped to not be folded\n str += json.slice(start, i) + '\\\\ ';\n i += 1;\n start = i;\n ch = '\\\\';\n }\n if (ch === '\\\\')\n switch (json[i + 1]) {\n case 'u':\n {\n str += json.slice(start, i);\n const code = json.substr(i + 2, 4);\n switch (code) {\n case '0000':\n str += '\\\\0';\n break;\n case '0007':\n str += '\\\\a';\n break;\n case '000b':\n str += '\\\\v';\n break;\n case '001b':\n str += '\\\\e';\n break;\n case '0085':\n str += '\\\\N';\n break;\n case '00a0':\n str += '\\\\_';\n break;\n case '2028':\n str += '\\\\L';\n break;\n case '2029':\n str += '\\\\P';\n break;\n default:\n if (code.substr(0, 2) === '00')\n str += '\\\\x' + code.substr(2);\n else\n str += json.substr(i, 6);\n }\n i += 5;\n start = i + 1;\n }\n break;\n case 'n':\n if (implicitKey ||\n json[i + 2] === '\"' ||\n json.length < minMultiLineLength) {\n i += 1;\n }\n else {\n // folding will eat first newline\n str += json.slice(start, i) + '\\n\\n';\n while (json[i + 2] === '\\\\' &&\n json[i + 3] === 'n' &&\n json[i + 4] !== '\"') {\n str += '\\n';\n i += 2;\n }\n str += indent;\n // space after newline needs to be escaped to not be folded\n if (json[i + 2] === ' ')\n str += '\\\\';\n i += 1;\n start = i + 1;\n }\n break;\n default:\n i += 1;\n }\n }\n str = start ? str + json.slice(start) : json;\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n if (ctx.options.singleQuote === false ||\n (ctx.implicitKey && value.includes('\\n')) ||\n /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n )\n return doubleQuotedString(value, ctx);\n const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : '');\n const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n return ctx.implicitKey\n ? res\n : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n const { singleQuote } = ctx.options;\n let qs;\n if (singleQuote === false)\n qs = doubleQuotedString;\n else {\n const hasDouble = value.includes('\"');\n const hasSingle = value.includes(\"'\");\n if (hasDouble && !hasSingle)\n qs = singleQuotedString;\n else if (hasSingle && !hasDouble)\n qs = doubleQuotedString;\n else\n qs = singleQuote ? singleQuotedString : doubleQuotedString;\n }\n return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n const { blockQuote, commentString, lineWidth } = ctx.options;\n // 1. Block can't end in whitespace unless the last line is non-empty.\n // 2. Strings consisting of only whitespace are best rendered explicitly.\n if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n return quotedString(value, ctx);\n }\n const indent = ctx.indent ||\n (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');\n const literal = blockQuote === 'literal'\n ? true\n : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED\n ? false\n : type === Scalar.Scalar.BLOCK_LITERAL\n ? true\n : !lineLengthOverLimit(value, lineWidth, indent.length);\n if (!value)\n return literal ? '|\\n' : '>\\n';\n // determine chomping from whitespace at value end\n let chomp;\n let endStart;\n for (endStart = value.length; endStart > 0; --endStart) {\n const ch = value[endStart - 1];\n if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n break;\n }\n let end = value.substring(endStart);\n const endNlPos = end.indexOf('\\n');\n if (endNlPos === -1) {\n chomp = '-'; // strip\n }\n else if (value === end || endNlPos !== end.length - 1) {\n chomp = '+'; // keep\n if (onChompKeep)\n onChompKeep();\n }\n else {\n chomp = ''; // clip\n }\n if (end) {\n value = value.slice(0, -end.length);\n if (end[end.length - 1] === '\\n')\n end = end.slice(0, -1);\n end = end.replace(blockEndNewlines, `$&${indent}`);\n }\n // determine indent indicator from whitespace at value start\n let startWithSpace = false;\n let startEnd;\n let startNlPos = -1;\n for (startEnd = 0; startEnd < value.length; ++startEnd) {\n const ch = value[startEnd];\n if (ch === ' ')\n startWithSpace = true;\n else if (ch === '\\n')\n startNlPos = startEnd;\n else\n break;\n }\n let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n if (start) {\n value = value.substring(start.length);\n start = start.replace(/\\n+/g, `$&${indent}`);\n }\n const indentSize = indent ? '2' : '1'; // root is at -1\n // Leading | or > is added later\n let header = (startWithSpace ? indentSize : '') + chomp;\n if (comment) {\n header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n if (onComment)\n onComment();\n }\n if (!literal) {\n const foldedValue = value\n .replace(/\\n+/g, '\\n$&')\n .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent\n .replace(/\\n+/g, `$&${indent}`);\n let literalFallback = false;\n const foldOptions = getFoldOptions(ctx, true);\n if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) {\n foldOptions.onOverflow = () => {\n literalFallback = true;\n };\n }\n const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions);\n if (!literalFallback)\n return `>${header}\\n${indent}${body}`;\n }\n value = value.replace(/\\n+/g, `$&${indent}`);\n return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n const { type, value } = item;\n const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n if ((implicitKey && value.includes('\\n')) ||\n (inFlow && /[[\\]{},]/.test(value))) {\n return quotedString(value, ctx);\n }\n if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n // not allowed:\n // - '-' or '?'\n // - start with an indicator character (except [?:-]) or /[?-] /\n // - '\\n ', ': ' or ' \\n' anywhere\n // - '#' not preceded by a non-space char\n // - end with ' ' or ':'\n return implicitKey || inFlow || !value.includes('\\n')\n ? quotedString(value, ctx)\n : blockString(item, ctx, onComment, onChompKeep);\n }\n if (!implicitKey &&\n !inFlow &&\n type !== Scalar.Scalar.PLAIN &&\n value.includes('\\n')) {\n // Where allowed & type not set explicitly, prefer block style for multiline strings\n return blockString(item, ctx, onComment, onChompKeep);\n }\n if (containsDocumentMarker(value)) {\n if (indent === '') {\n ctx.forceBlockIndent = true;\n return blockString(item, ctx, onComment, onChompKeep);\n }\n else if (implicitKey && indent === indentStep) {\n return quotedString(value, ctx);\n }\n }\n const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n // Verify that output will be parsed as a string, as e.g. plain numbers and\n // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n // and others in v1.1.\n if (actualString) {\n const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n const { compat, tags } = ctx.doc.schema;\n if (tags.some(test) || compat?.some(test))\n return quotedString(value, ctx);\n }\n return implicitKey\n ? str\n : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n const { implicitKey, inFlow } = ctx;\n const ss = typeof item.value === 'string'\n ? item\n : Object.assign({}, item, { value: String(item.value) });\n let { type } = item;\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n // force double quotes on control characters & unpaired surrogates\n if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n type = Scalar.Scalar.QUOTE_DOUBLE;\n }\n const _stringify = (_type) => {\n switch (_type) {\n case Scalar.Scalar.BLOCK_FOLDED:\n case Scalar.Scalar.BLOCK_LITERAL:\n return implicitKey || inFlow\n ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n : blockString(ss, ctx, onComment, onChompKeep);\n case Scalar.Scalar.QUOTE_DOUBLE:\n return doubleQuotedString(ss.value, ctx);\n case Scalar.Scalar.QUOTE_SINGLE:\n return singleQuotedString(ss.value, ctx);\n case Scalar.Scalar.PLAIN:\n return plainString(ss, ctx, onComment, onChompKeep);\n default:\n return null;\n }\n };\n let res = _stringify(type);\n if (res === null) {\n const { defaultKeyType, defaultStringType } = ctx.options;\n const t = (implicitKey && defaultKeyType) || defaultStringType;\n res = _stringify(t);\n if (res === null)\n throw new Error(`Unsupported default string type ${t}`);\n }\n return res;\n}\n\nexports.stringifyString = stringifyString;\n","'use strict';\n\nvar anchors = require('../doc/anchors.js');\nvar identity = require('../nodes/identity.js');\nvar stringifyComment = require('./stringifyComment.js');\nvar stringifyString = require('./stringifyString.js');\n\nfunction createStringifyContext(doc, options) {\n const opt = Object.assign({\n blockQuote: true,\n commentString: stringifyComment.stringifyComment,\n defaultKeyType: null,\n defaultStringType: 'PLAIN',\n directives: null,\n doubleQuotedAsJSON: false,\n doubleQuotedMinMultiLineLength: 40,\n falseStr: 'false',\n flowCollectionPadding: true,\n indentSeq: true,\n lineWidth: 80,\n minContentWidth: 20,\n nullStr: 'null',\n simpleKeys: false,\n singleQuote: null,\n trueStr: 'true',\n verifyAliasOrder: true\n }, doc.schema.toStringOptions, options);\n let inFlow;\n switch (opt.collectionStyle) {\n case 'block':\n inFlow = false;\n break;\n case 'flow':\n inFlow = true;\n break;\n default:\n inFlow = null;\n }\n return {\n anchors: new Set(),\n doc,\n flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n indent: '',\n indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',\n inFlow,\n options: opt\n };\n}\nfunction getTagObject(tags, item) {\n if (item.tag) {\n const match = tags.filter(t => t.tag === item.tag);\n if (match.length > 0)\n return match.find(t => t.format === item.format) ?? match[0];\n }\n let tagObj = undefined;\n let obj;\n if (identity.isScalar(item)) {\n obj = item.value;\n let match = tags.filter(t => t.identify?.(obj));\n if (match.length > 1) {\n const testMatch = match.filter(t => t.test);\n if (testMatch.length > 0)\n match = testMatch;\n }\n tagObj =\n match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n }\n else {\n obj = item;\n tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n }\n if (!tagObj) {\n const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n throw new Error(`Tag not resolved for ${name} value`);\n }\n return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {\n if (!doc.directives)\n return '';\n const props = [];\n const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor;\n if (anchor && anchors.anchorIsValid(anchor)) {\n anchors$1.add(anchor);\n props.push(`&${anchor}`);\n }\n const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n if (tag)\n props.push(doc.directives.tagString(tag));\n return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n if (identity.isPair(item))\n return item.toString(ctx, onComment, onChompKeep);\n if (identity.isAlias(item)) {\n if (ctx.doc.directives)\n return item.toString(ctx);\n if (ctx.resolvedAliases?.has(item)) {\n throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n }\n else {\n if (ctx.resolvedAliases)\n ctx.resolvedAliases.add(item);\n else\n ctx.resolvedAliases = new Set([item]);\n item = item.resolve(ctx.doc);\n }\n }\n let tagObj = undefined;\n const node = identity.isNode(item)\n ? item\n : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n const props = stringifyProps(node, tagObj, ctx);\n if (props.length > 0)\n ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n const str = typeof tagObj.stringify === 'function'\n ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n : identity.isScalar(node)\n ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep)\n : node.toString(ctx, onComment, onChompKeep);\n if (!props)\n return str;\n return identity.isScalar(node) || str[0] === '{' || str[0] === '['\n ? `${props} ${str}`\n : `${props}\\n${ctx.indent}${str}`;\n}\n\nexports.createStringifyContext = createStringifyContext;\nexports.stringify = stringify;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n let keyComment = (identity.isNode(key) && key.comment) || null;\n if (simpleKeys) {\n if (keyComment) {\n throw new Error('With simple keys, key nodes cannot have comments');\n }\n if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) {\n const msg = 'With simple keys, collection cannot be used as a key value';\n throw new Error(msg);\n }\n }\n let explicitKey = !simpleKeys &&\n (!key ||\n (keyComment && value == null && !ctx.inFlow) ||\n identity.isCollection(key) ||\n (identity.isScalar(key)\n ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL\n : typeof key === 'object'));\n ctx = Object.assign({}, ctx, {\n allNullValues: false,\n implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n indent: indent + indentStep\n });\n let keyCommentDone = false;\n let chompKeep = false;\n let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n if (simpleKeys)\n throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n explicitKey = true;\n }\n if (ctx.inFlow) {\n if (allNullValues || value == null) {\n if (keyCommentDone && onComment)\n onComment();\n return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n }\n }\n else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n str = `? ${str}`;\n if (keyComment && !keyCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n }\n if (keyCommentDone)\n keyComment = null;\n if (explicitKey) {\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n str = `? ${str}\\n${indent}:`;\n }\n else {\n str = `${str}:`;\n if (keyComment)\n str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));\n }\n let vsb, vcb, valueComment;\n if (identity.isNode(value)) {\n vsb = !!value.spaceBefore;\n vcb = value.commentBefore;\n valueComment = value.comment;\n }\n else {\n vsb = false;\n vcb = null;\n valueComment = null;\n if (value && typeof value === 'object')\n value = doc.createNode(value);\n }\n ctx.implicitKey = false;\n if (!explicitKey && !keyComment && identity.isScalar(value))\n ctx.indentAtStart = str.length + 1;\n chompKeep = false;\n if (!indentSeq &&\n indentStep.length >= 2 &&\n !ctx.inFlow &&\n !explicitKey &&\n identity.isSeq(value) &&\n !value.flow &&\n !value.tag &&\n !value.anchor) {\n // If indentSeq === false, consider '- ' as part of indentation where possible\n ctx.indent = ctx.indent.substring(2);\n }\n let valueCommentDone = false;\n const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n let ws = ' ';\n if (keyComment || vsb || vcb) {\n ws = vsb ? '\\n' : '';\n if (vcb) {\n const cs = commentString(vcb);\n ws += `\\n${stringifyComment.indentComment(cs, ctx.indent)}`;\n }\n if (valueStr === '' && !ctx.inFlow) {\n if (ws === '\\n' && valueComment)\n ws = '\\n\\n';\n }\n else {\n ws += `\\n${ctx.indent}`;\n }\n }\n else if (!explicitKey && identity.isCollection(value)) {\n const vs0 = valueStr[0];\n const nl0 = valueStr.indexOf('\\n');\n const hasNewline = nl0 !== -1;\n const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n if (hasNewline || !flow) {\n let hasPropsLine = false;\n if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n let sp0 = valueStr.indexOf(' ');\n if (vs0 === '&' &&\n sp0 !== -1 &&\n sp0 < nl0 &&\n valueStr[sp0 + 1] === '!') {\n sp0 = valueStr.indexOf(' ', sp0 + 1);\n }\n if (sp0 === -1 || nl0 < sp0)\n hasPropsLine = true;\n }\n if (!hasPropsLine)\n ws = `\\n${ctx.indent}`;\n }\n }\n else if (valueStr === '' || valueStr[0] === '\\n') {\n ws = '';\n }\n str += ws + valueStr;\n if (ctx.inFlow) {\n if (valueCommentDone && onComment)\n onComment();\n }\n else if (valueComment && !valueCommentDone) {\n str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));\n }\n else if (chompKeep && onChompKeep) {\n onChompKeep();\n }\n return str;\n}\n\nexports.stringifyPair = stringifyPair;\n","'use strict';\n\nvar node_process = require('process');\n\nfunction debug(logLevel, ...messages) {\n if (logLevel === 'debug')\n console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n if (logLevel === 'debug' || logLevel === 'warn') {\n if (typeof node_process.emitWarning === 'function')\n node_process.emitWarning(warning);\n else\n console.warn(warning);\n }\n}\n\nexports.debug = debug;\nexports.warn = warn;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Scalar = require('../../nodes/Scalar.js');\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n identify: value => value === MERGE_KEY ||\n (typeof value === 'symbol' && value.description === MERGE_KEY),\n default: 'key',\n tag: 'tag:yaml.org,2002:merge',\n test: /^<<$/,\n resolve: () => Object.assign(new Scalar.Scalar(Symbol(MERGE_KEY)), {\n addToJSMap: addMergeToJSMap\n }),\n stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n (identity.isScalar(key) &&\n (!key.type || key.type === Scalar.Scalar.PLAIN) &&\n merge.identify(key.value))) &&\n ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n value = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (identity.isSeq(value))\n for (const it of value.items)\n mergeValue(ctx, map, it);\n else if (Array.isArray(value))\n for (const it of value)\n mergeValue(ctx, map, it);\n else\n mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n const source = ctx && identity.isAlias(value) ? value.resolve(ctx.doc) : value;\n if (!identity.isMap(source))\n throw new Error('Merge sources must be maps or map aliases');\n const srcMap = source.toJSON(null, ctx, Map);\n for (const [key, value] of srcMap) {\n if (map instanceof Map) {\n if (!map.has(key))\n map.set(key, value);\n }\n else if (map instanceof Set) {\n map.add(key);\n }\n else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n Object.defineProperty(map, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true\n });\n }\n }\n return map;\n}\n\nexports.addMergeToJSMap = addMergeToJSMap;\nexports.isMergeKey = isMergeKey;\nexports.merge = merge;\n","'use strict';\n\nvar log = require('../log.js');\nvar merge = require('../schema/yaml-1.1/merge.js');\nvar stringify = require('../stringify/stringify.js');\nvar identity = require('./identity.js');\nvar toJS = require('./toJS.js');\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n if (identity.isNode(key) && key.addToJSMap)\n key.addToJSMap(ctx, map, value);\n // TODO: Should drop this special case for bare << handling\n else if (merge.isMergeKey(ctx, key))\n merge.addMergeToJSMap(ctx, map, value);\n else {\n const jsKey = toJS.toJS(key, '', ctx);\n if (map instanceof Map) {\n map.set(jsKey, toJS.toJS(value, jsKey, ctx));\n }\n else if (map instanceof Set) {\n map.add(jsKey);\n }\n else {\n const stringKey = stringifyKey(key, jsKey, ctx);\n const jsValue = toJS.toJS(value, stringKey, ctx);\n if (stringKey in map)\n Object.defineProperty(map, stringKey, {\n value: jsValue,\n writable: true,\n enumerable: true,\n configurable: true\n });\n else\n map[stringKey] = jsValue;\n }\n }\n return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n if (jsKey === null)\n return '';\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n if (typeof jsKey !== 'object')\n return String(jsKey);\n if (identity.isNode(key) && ctx?.doc) {\n const strCtx = stringify.createStringifyContext(ctx.doc, {});\n strCtx.anchors = new Set();\n for (const node of ctx.anchors.keys())\n strCtx.anchors.add(node.anchor);\n strCtx.inFlow = true;\n strCtx.inStringifyKey = true;\n const strKey = key.toString(strCtx);\n if (!ctx.mapKeyWarned) {\n let jsonStr = JSON.stringify(strKey);\n if (jsonStr.length > 40)\n jsonStr = jsonStr.substring(0, 36) + '...\"';\n log.warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n ctx.mapKeyWarned = true;\n }\n return strKey;\n }\n return JSON.stringify(jsKey);\n}\n\nexports.addPairToJSMap = addPairToJSMap;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyPair = require('../stringify/stringifyPair.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar identity = require('./identity.js');\n\nfunction createPair(key, value, ctx) {\n const k = createNode.createNode(key, undefined, ctx);\n const v = createNode.createNode(value, undefined, ctx);\n return new Pair(k, v);\n}\nclass Pair {\n constructor(key, value = null) {\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.PAIR });\n this.key = key;\n this.value = value;\n }\n clone(schema) {\n let { key, value } = this;\n if (identity.isNode(key))\n key = key.clone(schema);\n if (identity.isNode(value))\n value = value.clone(schema);\n return new Pair(key, value);\n }\n toJSON(_, ctx) {\n const pair = ctx?.mapAsMap ? new Map() : {};\n return addPairToJSMap.addPairToJSMap(ctx, pair, this);\n }\n toString(ctx, onComment, onChompKeep) {\n return ctx?.doc\n ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)\n : JSON.stringify(this);\n }\n}\n\nexports.Pair = Pair;\nexports.createPair = createPair;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyCollection(collection, ctx, options) {\n const flow = ctx.inFlow ?? collection.flow;\n const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n const { indent, options: { commentString } } = ctx;\n const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n let chompKeep = false; // flag for the preceding node's status\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (!chompKeep && item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (!chompKeep && ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n }\n }\n chompKeep = false;\n let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (chompKeep && comment)\n chompKeep = false;\n lines.push(blockItemPrefix + str);\n }\n let str;\n if (lines.length === 0) {\n str = flowChars.start + flowChars.end;\n }\n else {\n str = lines[0];\n for (let i = 1; i < lines.length; ++i) {\n const line = lines[i];\n str += line ? `\\n${indent}${line}` : '\\n';\n }\n }\n if (comment) {\n str += '\\n' + stringifyComment.indentComment(commentString(comment), indent);\n if (onComment)\n onComment();\n }\n else if (chompKeep && onChompKeep)\n onChompKeep();\n return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n itemIndent += indentStep;\n const itemCtx = Object.assign({}, ctx, {\n indent: itemIndent,\n inFlow: true,\n type: null\n });\n let reqNewline = false;\n let linesAtValue = 0;\n const lines = [];\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n let comment = null;\n if (identity.isNode(item)) {\n if (item.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, item.commentBefore, false);\n if (item.comment)\n comment = item.comment;\n }\n else if (identity.isPair(item)) {\n const ik = identity.isNode(item.key) ? item.key : null;\n if (ik) {\n if (ik.spaceBefore)\n lines.push('');\n addCommentBefore(ctx, lines, ik.commentBefore, false);\n if (ik.comment)\n reqNewline = true;\n }\n const iv = identity.isNode(item.value) ? item.value : null;\n if (iv) {\n if (iv.comment)\n comment = iv.comment;\n if (iv.commentBefore)\n reqNewline = true;\n }\n else if (item.value == null && ik?.comment) {\n comment = ik.comment;\n }\n }\n if (comment)\n reqNewline = true;\n let str = stringify.stringify(item, itemCtx, () => (comment = null));\n if (i < items.length - 1)\n str += ',';\n if (comment)\n str += stringifyComment.lineComment(str, itemIndent, commentString(comment));\n if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n reqNewline = true;\n lines.push(str);\n linesAtValue = lines.length;\n }\n const { start, end } = flowChars;\n if (lines.length === 0) {\n return start + end;\n }\n else {\n if (!reqNewline) {\n const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n }\n if (reqNewline) {\n let str = start;\n for (const line of lines)\n str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n return `${str}\\n${indent}${end}`;\n }\n else {\n return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n }\n }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n if (comment && chompKeep)\n comment = comment.replace(/^\\n+/, '');\n if (comment) {\n const ic = stringifyComment.indentComment(commentString(comment), indent);\n lines.push(ic.trimStart()); // Avoid double indent on first line\n }\n}\n\nexports.stringifyCollection = stringifyCollection;\n","'use strict';\n\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar addPairToJSMap = require('./addPairToJSMap.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Pair = require('./Pair.js');\nvar Scalar = require('./Scalar.js');\n\nfunction findPair(items, key) {\n const k = identity.isScalar(key) ? key.value : key;\n for (const it of items) {\n if (identity.isPair(it)) {\n if (it.key === key || it.key === k)\n return it;\n if (identity.isScalar(it.key) && it.key.value === k)\n return it;\n }\n }\n return undefined;\n}\nclass YAMLMap extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:map';\n }\n constructor(schema) {\n super(identity.MAP, schema);\n this.items = [];\n }\n /**\n * A generic collection parsing method that can be extended\n * to other node classes that inherit from YAMLMap\n */\n static from(schema, obj, ctx) {\n const { keepUndefined, replacer } = ctx;\n const map = new this(schema);\n const add = (key, value) => {\n if (typeof replacer === 'function')\n value = replacer.call(obj, key, value);\n else if (Array.isArray(replacer) && !replacer.includes(key))\n return;\n if (value !== undefined || keepUndefined)\n map.items.push(Pair.createPair(key, value, ctx));\n };\n if (obj instanceof Map) {\n for (const [key, value] of obj)\n add(key, value);\n }\n else if (obj && typeof obj === 'object') {\n for (const key of Object.keys(obj))\n add(key, obj[key]);\n }\n if (typeof schema.sortMapEntries === 'function') {\n map.items.sort(schema.sortMapEntries);\n }\n return map;\n }\n /**\n * Adds a value to the collection.\n *\n * @param overwrite - If not set `true`, using a key that is already in the\n * collection will throw. Otherwise, overwrites the previous value.\n */\n add(pair, overwrite) {\n let _pair;\n if (identity.isPair(pair))\n _pair = pair;\n else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n // In TypeScript, this never happens.\n _pair = new Pair.Pair(pair, pair?.value);\n }\n else\n _pair = new Pair.Pair(pair.key, pair.value);\n const prev = findPair(this.items, _pair.key);\n const sortEntries = this.schema?.sortMapEntries;\n if (prev) {\n if (!overwrite)\n throw new Error(`Key ${_pair.key} already set`);\n // For scalars, keep the old node & its comments and anchors\n if (identity.isScalar(prev.value) && Scalar.isScalarValue(_pair.value))\n prev.value.value = _pair.value;\n else\n prev.value = _pair.value;\n }\n else if (sortEntries) {\n const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n if (i === -1)\n this.items.push(_pair);\n else\n this.items.splice(i, 0, _pair);\n }\n else {\n this.items.push(_pair);\n }\n }\n delete(key) {\n const it = findPair(this.items, key);\n if (!it)\n return false;\n const del = this.items.splice(this.items.indexOf(it), 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const it = findPair(this.items, key);\n const node = it?.value;\n return (!keepScalar && identity.isScalar(node) ? node.value : node) ?? undefined;\n }\n has(key) {\n return !!findPair(this.items, key);\n }\n set(key, value) {\n this.add(new Pair.Pair(key, value), true);\n }\n /**\n * @param ctx - Conversion context, originally set in Document#toJS()\n * @param {Class} Type - If set, forces the returned collection type\n * @returns Instance of Type, Map, or Object\n */\n toJSON(_, ctx, Type) {\n const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const item of this.items)\n addPairToJSMap.addPairToJSMap(ctx, map, item);\n return map;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n for (const item of this.items) {\n if (!identity.isPair(item))\n throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n }\n if (!ctx.allNullValues && this.hasAllNullValues(false))\n ctx = Object.assign({}, ctx, { allNullValues: true });\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '',\n flowChars: { start: '{', end: '}' },\n itemIndent: ctx.indent || '',\n onChompKeep,\n onComment\n });\n }\n}\n\nexports.YAMLMap = YAMLMap;\nexports.findPair = findPair;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nconst map = {\n collection: 'map',\n default: true,\n nodeClass: YAMLMap.YAMLMap,\n tag: 'tag:yaml.org,2002:map',\n resolve(map, onError) {\n if (!identity.isMap(map))\n onError('Expected a mapping for this tag');\n return map;\n },\n createNode: (schema, obj, ctx) => YAMLMap.YAMLMap.from(schema, obj, ctx)\n};\n\nexports.map = map;\n","'use strict';\n\nvar createNode = require('../doc/createNode.js');\nvar stringifyCollection = require('../stringify/stringifyCollection.js');\nvar Collection = require('./Collection.js');\nvar identity = require('./identity.js');\nvar Scalar = require('./Scalar.js');\nvar toJS = require('./toJS.js');\n\nclass YAMLSeq extends Collection.Collection {\n static get tagName() {\n return 'tag:yaml.org,2002:seq';\n }\n constructor(schema) {\n super(identity.SEQ, schema);\n this.items = [];\n }\n add(value) {\n this.items.push(value);\n }\n /**\n * Removes a value from the collection.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n *\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return false;\n const del = this.items.splice(idx, 1);\n return del.length > 0;\n }\n get(key, keepScalar) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n return undefined;\n const it = this.items[idx];\n return !keepScalar && identity.isScalar(it) ? it.value : it;\n }\n /**\n * Checks if the collection includes a value with the key `key`.\n *\n * `key` must contain a representation of an integer for this to succeed.\n * It may be wrapped in a `Scalar`.\n */\n has(key) {\n const idx = asItemIndex(key);\n return typeof idx === 'number' && idx < this.items.length;\n }\n /**\n * Sets a value in this collection. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n *\n * If `key` does not contain a representation of an integer, this will throw.\n * It may be wrapped in a `Scalar`.\n */\n set(key, value) {\n const idx = asItemIndex(key);\n if (typeof idx !== 'number')\n throw new Error(`Expected a valid index, not ${key}.`);\n const prev = this.items[idx];\n if (identity.isScalar(prev) && Scalar.isScalarValue(value))\n prev.value = value;\n else\n this.items[idx] = value;\n }\n toJSON(_, ctx) {\n const seq = [];\n if (ctx?.onCreate)\n ctx.onCreate(seq);\n let i = 0;\n for (const item of this.items)\n seq.push(toJS.toJS(item, String(i++), ctx));\n return seq;\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n return stringifyCollection.stringifyCollection(this, ctx, {\n blockItemPrefix: '- ',\n flowChars: { start: '[', end: ']' },\n itemIndent: (ctx.indent || '') + ' ',\n onChompKeep,\n onComment\n });\n }\n static from(schema, obj, ctx) {\n const { replacer } = ctx;\n const seq = new this(schema);\n if (obj && Symbol.iterator in Object(obj)) {\n let i = 0;\n for (let it of obj) {\n if (typeof replacer === 'function') {\n const key = obj instanceof Set ? it : String(i++);\n it = replacer.call(obj, key, it);\n }\n seq.items.push(createNode.createNode(it, undefined, ctx));\n }\n }\n return seq;\n }\n}\nfunction asItemIndex(key) {\n let idx = identity.isScalar(key) ? key.value : key;\n if (idx && typeof idx === 'string')\n idx = Number(idx);\n return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n ? idx\n : null;\n}\n\nexports.YAMLSeq = YAMLSeq;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nconst seq = {\n collection: 'seq',\n default: true,\n nodeClass: YAMLSeq.YAMLSeq,\n tag: 'tag:yaml.org,2002:seq',\n resolve(seq, onError) {\n if (!identity.isSeq(seq))\n onError('Expected a sequence for this tag');\n return seq;\n },\n createNode: (schema, obj, ctx) => YAMLSeq.YAMLSeq.from(schema, obj, ctx)\n};\n\nexports.seq = seq;\n","'use strict';\n\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst string = {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify(item, ctx, onComment, onChompKeep) {\n ctx = Object.assign({ actualString: true }, ctx);\n return stringifyString.stringifyString(item, ctx, onComment, onChompKeep);\n }\n};\n\nexports.string = string;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst nullTag = {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^(?:~|[Nn]ull|NULL)?$/,\n resolve: () => new Scalar.Scalar(null),\n stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n ? source\n : ctx.options.nullStr\n};\n\nexports.nullTag = nullTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nconst boolTag = {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n resolve: str => new Scalar.Scalar(str[0] === 't' || str[0] === 'T'),\n stringify({ source, value }, ctx) {\n if (source && boolTag.test.test(source)) {\n const sv = source[0] === 't' || source[0] === 'T';\n if (value === sv)\n return source;\n }\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n }\n};\n\nexports.boolTag = boolTag;\n","'use strict';\n\nfunction stringifyNumber({ format, minFractionDigits, tag, value }) {\n if (typeof value === 'bigint')\n return String(value);\n const num = typeof value === 'number' ? value : Number(value);\n if (!isFinite(num))\n return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n if (!format &&\n minFractionDigits &&\n (!tag || tag === 'tag:yaml.org,2002:float') &&\n /^\\d/.test(n)) {\n let i = n.indexOf('.');\n if (i < 0) {\n i = n.length;\n n += '.';\n }\n let d = minFractionDigits - (n.length - i - 1);\n while (d-- > 0)\n n += '0';\n }\n return n;\n}\n\nexports.stringifyNumber = stringifyNumber;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: str => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n resolve: str => parseFloat(str),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str));\n const dot = str.indexOf('.');\n if (dot !== -1 && str[str.length - 1] === '0')\n node.minFractionDigits = str.length - dot - 1;\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value) && value >= 0)\n return prefix + value.toString(radix);\n return stringifyNumber.stringifyNumber(node);\n}\nconst intOct = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^0o[0-7]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: value => intIdentify(value) && value >= 0,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^0x[0-9a-fA-F]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.boolTag,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar map = require('../common/map.js');\nvar seq = require('../common/seq.js');\n\nfunction intIdentify(value) {\n return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n {\n identify: value => typeof value === 'string',\n default: true,\n tag: 'tag:yaml.org,2002:str',\n resolve: str => str,\n stringify: stringifyJSON\n },\n {\n identify: value => value == null,\n createNode: () => new Scalar.Scalar(null),\n default: true,\n tag: 'tag:yaml.org,2002:null',\n test: /^null$/,\n resolve: () => null,\n stringify: stringifyJSON\n },\n {\n identify: value => typeof value === 'boolean',\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^true$|^false$/,\n resolve: str => str === 'true',\n stringify: stringifyJSON\n },\n {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^-?(?:0|[1-9][0-9]*)$/,\n resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n },\n {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n resolve: str => parseFloat(str),\n stringify: stringifyJSON\n }\n];\nconst jsonError = {\n default: true,\n tag: '',\n test: /^/,\n resolve(str, onError) {\n onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n return str;\n }\n};\nconst schema = [map.map, seq.seq].concat(jsonScalars, jsonError);\n\nexports.schema = schema;\n","'use strict';\n\nvar node_buffer = require('buffer');\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyString = require('../../stringify/stringifyString.js');\n\nconst binary = {\n identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n default: false,\n tag: 'tag:yaml.org,2002:binary',\n /**\n * Returns a Buffer in node and an Uint8Array in browsers\n *\n * To use the resulting buffer as an image, you'll want to do something like:\n *\n * const blob = new Blob([buffer], { type: 'image/jpeg' })\n * document.querySelector('#photo').src = URL.createObjectURL(blob)\n */\n resolve(src, onError) {\n if (typeof node_buffer.Buffer === 'function') {\n return node_buffer.Buffer.from(src, 'base64');\n }\n else if (typeof atob === 'function') {\n // On IE 11, atob() can't handle newlines\n const str = atob(src.replace(/[\\n\\r]/g, ''));\n const buffer = new Uint8Array(str.length);\n for (let i = 0; i < str.length; ++i)\n buffer[i] = str.charCodeAt(i);\n return buffer;\n }\n else {\n onError('This environment does not support reading binary tags; either Buffer or atob is required');\n return src;\n }\n },\n stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n if (!value)\n return '';\n const buf = value; // checked earlier by binary.identify()\n let str;\n if (typeof node_buffer.Buffer === 'function') {\n str =\n buf instanceof node_buffer.Buffer\n ? buf.toString('base64')\n : node_buffer.Buffer.from(buf.buffer).toString('base64');\n }\n else if (typeof btoa === 'function') {\n let s = '';\n for (let i = 0; i < buf.length; ++i)\n s += String.fromCharCode(buf[i]);\n str = btoa(s);\n }\n else {\n throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n }\n type ?? (type = Scalar.Scalar.BLOCK_LITERAL);\n if (type !== Scalar.Scalar.QUOTE_DOUBLE) {\n const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n const n = Math.ceil(str.length / lineWidth);\n const lines = new Array(n);\n for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n lines[i] = str.substr(o, lineWidth);\n }\n str = lines.join(type === Scalar.Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n }\n return stringifyString.stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n }\n};\n\nexports.binary = binary;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar Scalar = require('../../nodes/Scalar.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\n\nfunction resolvePairs(seq, onError) {\n if (identity.isSeq(seq)) {\n for (let i = 0; i < seq.items.length; ++i) {\n let item = seq.items[i];\n if (identity.isPair(item))\n continue;\n else if (identity.isMap(item)) {\n if (item.items.length > 1)\n onError('Each pair must have its own sequence indicator');\n const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));\n if (item.commentBefore)\n pair.key.commentBefore = pair.key.commentBefore\n ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n : item.commentBefore;\n if (item.comment) {\n const cn = pair.value ?? pair.key;\n cn.comment = cn.comment\n ? `${item.comment}\\n${cn.comment}`\n : item.comment;\n }\n item = pair;\n }\n seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);\n }\n }\n else\n onError('Expected a sequence for this tag');\n return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n const { replacer } = ctx;\n const pairs = new YAMLSeq.YAMLSeq(schema);\n pairs.tag = 'tag:yaml.org,2002:pairs';\n let i = 0;\n if (iterable && Symbol.iterator in Object(iterable))\n for (let it of iterable) {\n if (typeof replacer === 'function')\n it = replacer.call(iterable, String(i++), it);\n let key, value;\n if (Array.isArray(it)) {\n if (it.length === 2) {\n key = it[0];\n value = it[1];\n }\n else\n throw new TypeError(`Expected [key, value] tuple: ${it}`);\n }\n else if (it && it instanceof Object) {\n const keys = Object.keys(it);\n if (keys.length === 1) {\n key = keys[0];\n value = it[key];\n }\n else {\n throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n }\n }\n else {\n key = it;\n }\n pairs.items.push(Pair.createPair(key, value, ctx));\n }\n return pairs;\n}\nconst pairs = {\n collection: 'seq',\n default: false,\n tag: 'tag:yaml.org,2002:pairs',\n resolve: resolvePairs,\n createNode: createPairs\n};\n\nexports.createPairs = createPairs;\nexports.pairs = pairs;\nexports.resolvePairs = resolvePairs;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar toJS = require('../../nodes/toJS.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\nvar YAMLSeq = require('../../nodes/YAMLSeq.js');\nvar pairs = require('./pairs.js');\n\nclass YAMLOMap extends YAMLSeq.YAMLSeq {\n constructor() {\n super();\n this.add = YAMLMap.YAMLMap.prototype.add.bind(this);\n this.delete = YAMLMap.YAMLMap.prototype.delete.bind(this);\n this.get = YAMLMap.YAMLMap.prototype.get.bind(this);\n this.has = YAMLMap.YAMLMap.prototype.has.bind(this);\n this.set = YAMLMap.YAMLMap.prototype.set.bind(this);\n this.tag = YAMLOMap.tag;\n }\n /**\n * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n * but TypeScript won't allow widening the signature of a child method.\n */\n toJSON(_, ctx) {\n if (!ctx)\n return super.toJSON(_);\n const map = new Map();\n if (ctx?.onCreate)\n ctx.onCreate(map);\n for (const pair of this.items) {\n let key, value;\n if (identity.isPair(pair)) {\n key = toJS.toJS(pair.key, '', ctx);\n value = toJS.toJS(pair.value, key, ctx);\n }\n else {\n key = toJS.toJS(pair, '', ctx);\n }\n if (map.has(key))\n throw new Error('Ordered maps must not include duplicate keys');\n map.set(key, value);\n }\n return map;\n }\n static from(schema, iterable, ctx) {\n const pairs$1 = pairs.createPairs(schema, iterable, ctx);\n const omap = new this();\n omap.items = pairs$1.items;\n return omap;\n }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n collection: 'seq',\n identify: value => value instanceof Map,\n nodeClass: YAMLOMap,\n default: false,\n tag: 'tag:yaml.org,2002:omap',\n resolve(seq, onError) {\n const pairs$1 = pairs.resolvePairs(seq, onError);\n const seenKeys = [];\n for (const { key } of pairs$1.items) {\n if (identity.isScalar(key)) {\n if (seenKeys.includes(key.value)) {\n onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n }\n else {\n seenKeys.push(key.value);\n }\n }\n }\n return Object.assign(new YAMLOMap(), pairs$1);\n },\n createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexports.YAMLOMap = YAMLOMap;\nexports.omap = omap;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\n\nfunction boolStringify({ value, source }, ctx) {\n const boolObj = value ? trueTag : falseTag;\n if (source && boolObj.test.test(source))\n return source;\n return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n identify: value => value === true,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n resolve: () => new Scalar.Scalar(true),\n stringify: boolStringify\n};\nconst falseTag = {\n identify: value => value === false,\n default: true,\n tag: 'tag:yaml.org,2002:bool',\n test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n resolve: () => new Scalar.Scalar(false),\n stringify: boolStringify\n};\n\nexports.falseTag = falseTag;\nexports.trueTag = trueTag;\n","'use strict';\n\nvar Scalar = require('../../nodes/Scalar.js');\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst floatNaN = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n ? NaN\n : str[0] === '-'\n ? Number.NEGATIVE_INFINITY\n : Number.POSITIVE_INFINITY,\n stringify: stringifyNumber.stringifyNumber\n};\nconst floatExp = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'EXP',\n test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n resolve: (str) => parseFloat(str.replace(/_/g, '')),\n stringify(node) {\n const num = Number(node.value);\n return isFinite(num) ? num.toExponential() : stringifyNumber.stringifyNumber(node);\n }\n};\nconst float = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n resolve(str) {\n const node = new Scalar.Scalar(parseFloat(str.replace(/_/g, '')));\n const dot = str.indexOf('.');\n if (dot !== -1) {\n const f = str.substring(dot + 1).replace(/_/g, '');\n if (f[f.length - 1] === '0')\n node.minFractionDigits = f.length;\n }\n return node;\n },\n stringify: stringifyNumber.stringifyNumber\n};\n\nexports.float = float;\nexports.floatExp = floatExp;\nexports.floatNaN = floatNaN;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n const sign = str[0];\n if (sign === '-' || sign === '+')\n offset += 1;\n str = str.substring(offset).replace(/_/g, '');\n if (intAsBigInt) {\n switch (radix) {\n case 2:\n str = `0b${str}`;\n break;\n case 8:\n str = `0o${str}`;\n break;\n case 16:\n str = `0x${str}`;\n break;\n }\n const n = BigInt(str);\n return sign === '-' ? BigInt(-1) * n : n;\n }\n const n = parseInt(str, radix);\n return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n const { value } = node;\n if (intIdentify(value)) {\n const str = value.toString(radix);\n return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n }\n return stringifyNumber.stringifyNumber(node);\n}\nconst intBin = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'BIN',\n test: /^[-+]?0b[0-1_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'OCT',\n test: /^[-+]?0[0-7_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n test: /^[-+]?[0-9][0-9_]*$/,\n resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n stringify: stringifyNumber.stringifyNumber\n};\nconst intHex = {\n identify: intIdentify,\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'HEX',\n test: /^[-+]?0x[0-9a-fA-F_]+$/,\n resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n stringify: node => intStringify(node, 16, '0x')\n};\n\nexports.int = int;\nexports.intBin = intBin;\nexports.intHex = intHex;\nexports.intOct = intOct;\n","'use strict';\n\nvar identity = require('../../nodes/identity.js');\nvar Pair = require('../../nodes/Pair.js');\nvar YAMLMap = require('../../nodes/YAMLMap.js');\n\nclass YAMLSet extends YAMLMap.YAMLMap {\n constructor(schema) {\n super(schema);\n this.tag = YAMLSet.tag;\n }\n add(key) {\n let pair;\n if (identity.isPair(key))\n pair = key;\n else if (key &&\n typeof key === 'object' &&\n 'key' in key &&\n 'value' in key &&\n key.value === null)\n pair = new Pair.Pair(key.key, null);\n else\n pair = new Pair.Pair(key, null);\n const prev = YAMLMap.findPair(this.items, pair.key);\n if (!prev)\n this.items.push(pair);\n }\n /**\n * If `keepPair` is `true`, returns the Pair matching `key`.\n * Otherwise, returns the value of that Pair's key.\n */\n get(key, keepPair) {\n const pair = YAMLMap.findPair(this.items, key);\n return !keepPair && identity.isPair(pair)\n ? identity.isScalar(pair.key)\n ? pair.key.value\n : pair.key\n : pair;\n }\n set(key, value) {\n if (typeof value !== 'boolean')\n throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n const prev = YAMLMap.findPair(this.items, key);\n if (prev && !value) {\n this.items.splice(this.items.indexOf(prev), 1);\n }\n else if (!prev && value) {\n this.items.push(new Pair.Pair(key));\n }\n }\n toJSON(_, ctx) {\n return super.toJSON(_, ctx, Set);\n }\n toString(ctx, onComment, onChompKeep) {\n if (!ctx)\n return JSON.stringify(this);\n if (this.hasAllNullValues(true))\n return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n else\n throw new Error('Set items must all have null values');\n }\n static from(schema, iterable, ctx) {\n const { replacer } = ctx;\n const set = new this(schema);\n if (iterable && Symbol.iterator in Object(iterable))\n for (let value of iterable) {\n if (typeof replacer === 'function')\n value = replacer.call(iterable, value, value);\n set.items.push(Pair.createPair(value, null, ctx));\n }\n return set;\n }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n collection: 'map',\n identify: value => value instanceof Set,\n nodeClass: YAMLSet,\n default: false,\n tag: 'tag:yaml.org,2002:set',\n createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n resolve(map, onError) {\n if (identity.isMap(map)) {\n if (map.hasAllNullValues(true))\n return Object.assign(new YAMLSet(), map);\n else\n onError('Set items must all have null values');\n }\n else\n onError('Expected a mapping for this tag');\n return map;\n }\n};\n\nexports.YAMLSet = YAMLSet;\nexports.set = set;\n","'use strict';\n\nvar stringifyNumber = require('../../stringify/stringifyNumber.js');\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n const sign = str[0];\n const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n const num = (n) => asBigInt ? BigInt(n) : Number(n);\n const res = parts\n .replace(/_/g, '')\n .split(':')\n .reduce((res, p) => res * num(60) + num(p), num(0));\n return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n let { value } = node;\n let num = (n) => n;\n if (typeof value === 'bigint')\n num = n => BigInt(n);\n else if (isNaN(value) || !isFinite(value))\n return stringifyNumber.stringifyNumber(node);\n let sign = '';\n if (value < 0) {\n sign = '-';\n value *= num(-1);\n }\n const _60 = num(60);\n const parts = [value % _60]; // seconds, including ms\n if (value < 60) {\n parts.unshift(0); // at least one : is required\n }\n else {\n value = (value - parts[0]) / _60;\n parts.unshift(value % _60); // minutes\n if (value >= 60) {\n value = (value - parts[0]) / _60;\n parts.unshift(value); // hours\n }\n }\n return (sign +\n parts\n .map(n => String(n).padStart(2, '0'))\n .join(':')\n .replace(/000000\\d*$/, '') // % 60 may introduce error\n );\n}\nconst intTime = {\n identify: value => typeof value === 'bigint' || Number.isInteger(value),\n default: true,\n tag: 'tag:yaml.org,2002:int',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n stringify: stringifySexagesimal\n};\nconst floatTime = {\n identify: value => typeof value === 'number',\n default: true,\n tag: 'tag:yaml.org,2002:float',\n format: 'TIME',\n test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n resolve: str => parseSexagesimal(str, false),\n stringify: stringifySexagesimal\n};\nconst timestamp = {\n identify: value => value instanceof Date,\n default: true,\n tag: 'tag:yaml.org,2002:timestamp',\n // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n // may be omitted altogether, resulting in a date format. In such a case, the time part is\n // assumed to be 00:00:00Z (start of day, UTC).\n test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n '(?:' + // time is optional\n '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n ')?$'),\n resolve(str) {\n const match = str.match(timestamp.test);\n if (!match)\n throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n const [, year, month, day, hour, minute, second] = match.map(Number);\n const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n const tz = match[8];\n if (tz && tz !== 'Z') {\n let d = parseSexagesimal(tz, false);\n if (Math.abs(d) < 30)\n d *= 60;\n date -= 60000 * d;\n }\n return new Date(date);\n },\n stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexports.floatTime = floatTime;\nexports.intTime = intTime;\nexports.timestamp = timestamp;\n","'use strict';\n\nvar map = require('../common/map.js');\nvar _null = require('../common/null.js');\nvar seq = require('../common/seq.js');\nvar string = require('../common/string.js');\nvar binary = require('./binary.js');\nvar bool = require('./bool.js');\nvar float = require('./float.js');\nvar int = require('./int.js');\nvar merge = require('./merge.js');\nvar omap = require('./omap.js');\nvar pairs = require('./pairs.js');\nvar set = require('./set.js');\nvar timestamp = require('./timestamp.js');\n\nconst schema = [\n map.map,\n seq.seq,\n string.string,\n _null.nullTag,\n bool.trueTag,\n bool.falseTag,\n int.intBin,\n int.intOct,\n int.int,\n int.intHex,\n float.floatNaN,\n float.floatExp,\n float.float,\n binary.binary,\n merge.merge,\n omap.omap,\n pairs.pairs,\n set.set,\n timestamp.intTime,\n timestamp.floatTime,\n timestamp.timestamp\n];\n\nexports.schema = schema;\n","'use strict';\n\nvar map = require('./common/map.js');\nvar _null = require('./common/null.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar bool = require('./core/bool.js');\nvar float = require('./core/float.js');\nvar int = require('./core/int.js');\nvar schema = require('./core/schema.js');\nvar schema$1 = require('./json/schema.js');\nvar binary = require('./yaml-1.1/binary.js');\nvar merge = require('./yaml-1.1/merge.js');\nvar omap = require('./yaml-1.1/omap.js');\nvar pairs = require('./yaml-1.1/pairs.js');\nvar schema$2 = require('./yaml-1.1/schema.js');\nvar set = require('./yaml-1.1/set.js');\nvar timestamp = require('./yaml-1.1/timestamp.js');\n\nconst schemas = new Map([\n ['core', schema.schema],\n ['failsafe', [map.map, seq.seq, string.string]],\n ['json', schema$1.schema],\n ['yaml11', schema$2.schema],\n ['yaml-1.1', schema$2.schema]\n]);\nconst tagsByName = {\n binary: binary.binary,\n bool: bool.boolTag,\n float: float.float,\n floatExp: float.floatExp,\n floatNaN: float.floatNaN,\n floatTime: timestamp.floatTime,\n int: int.int,\n intHex: int.intHex,\n intOct: int.intOct,\n intTime: timestamp.intTime,\n map: map.map,\n merge: merge.merge,\n null: _null.nullTag,\n omap: omap.omap,\n pairs: pairs.pairs,\n seq: seq.seq,\n set: set.set,\n timestamp: timestamp.timestamp\n};\nconst coreKnownTags = {\n 'tag:yaml.org,2002:binary': binary.binary,\n 'tag:yaml.org,2002:merge': merge.merge,\n 'tag:yaml.org,2002:omap': omap.omap,\n 'tag:yaml.org,2002:pairs': pairs.pairs,\n 'tag:yaml.org,2002:set': set.set,\n 'tag:yaml.org,2002:timestamp': timestamp.timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n const schemaTags = schemas.get(schemaName);\n if (schemaTags && !customTags) {\n return addMergeTag && !schemaTags.includes(merge.merge)\n ? schemaTags.concat(merge.merge)\n : schemaTags.slice();\n }\n let tags = schemaTags;\n if (!tags) {\n if (Array.isArray(customTags))\n tags = [];\n else {\n const keys = Array.from(schemas.keys())\n .filter(key => key !== 'yaml11')\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n }\n }\n if (Array.isArray(customTags)) {\n for (const tag of customTags)\n tags = tags.concat(tag);\n }\n else if (typeof customTags === 'function') {\n tags = customTags(tags.slice());\n }\n if (addMergeTag)\n tags = tags.concat(merge.merge);\n return tags.reduce((tags, tag) => {\n const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n if (!tagObj) {\n const tagName = JSON.stringify(tag);\n const keys = Object.keys(tagsByName)\n .map(key => JSON.stringify(key))\n .join(', ');\n throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n }\n if (!tags.includes(tagObj))\n tags.push(tagObj);\n return tags;\n }, []);\n}\n\nexports.coreKnownTags = coreKnownTags;\nexports.getTags = getTags;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar map = require('./common/map.js');\nvar seq = require('./common/seq.js');\nvar string = require('./common/string.js');\nvar tags = require('./tags.js');\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n this.compat = Array.isArray(compat)\n ? tags.getTags(compat, 'compat')\n : compat\n ? tags.getTags(null, compat)\n : null;\n this.name = (typeof schema === 'string' && schema) || 'core';\n this.knownTags = resolveKnownTags ? tags.coreKnownTags : {};\n this.tags = tags.getTags(customTags, this.name, merge);\n this.toStringOptions = toStringDefaults ?? null;\n Object.defineProperty(this, identity.MAP, { value: map.map });\n Object.defineProperty(this, identity.SCALAR, { value: string.string });\n Object.defineProperty(this, identity.SEQ, { value: seq.seq });\n // Used by createMap()\n this.sortMapEntries =\n typeof sortMapEntries === 'function'\n ? sortMapEntries\n : sortMapEntries === true\n ? sortMapEntriesByKey\n : null;\n }\n clone() {\n const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n copy.tags = this.tags.slice();\n return copy;\n }\n}\n\nexports.Schema = Schema;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar stringify = require('./stringify.js');\nvar stringifyComment = require('./stringifyComment.js');\n\nfunction stringifyDocument(doc, options) {\n const lines = [];\n let hasDirectives = options.directives === true;\n if (options.directives !== false && doc.directives) {\n const dir = doc.directives.toString(doc);\n if (dir) {\n lines.push(dir);\n hasDirectives = true;\n }\n else if (doc.directives.docStart)\n hasDirectives = true;\n }\n if (hasDirectives)\n lines.push('---');\n const ctx = stringify.createStringifyContext(doc, options);\n const { commentString } = ctx.options;\n if (doc.commentBefore) {\n if (lines.length !== 1)\n lines.unshift('');\n const cs = commentString(doc.commentBefore);\n lines.unshift(stringifyComment.indentComment(cs, ''));\n }\n let chompKeep = false;\n let contentComment = null;\n if (doc.contents) {\n if (identity.isNode(doc.contents)) {\n if (doc.contents.spaceBefore && hasDirectives)\n lines.push('');\n if (doc.contents.commentBefore) {\n const cs = commentString(doc.contents.commentBefore);\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n // top-level block scalars need to be indented if followed by a comment\n ctx.forceBlockIndent = !!doc.comment;\n contentComment = doc.contents.comment;\n }\n const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n if (contentComment)\n body += stringifyComment.lineComment(body, '', commentString(contentComment));\n if ((body[0] === '|' || body[0] === '>') &&\n lines[lines.length - 1] === '---') {\n // Top-level block scalars with a preceding doc marker ought to use the\n // same line for their header.\n lines[lines.length - 1] = `--- ${body}`;\n }\n else\n lines.push(body);\n }\n else {\n lines.push(stringify.stringify(doc.contents, ctx));\n }\n if (doc.directives?.docEnd) {\n if (doc.comment) {\n const cs = commentString(doc.comment);\n if (cs.includes('\\n')) {\n lines.push('...');\n lines.push(stringifyComment.indentComment(cs, ''));\n }\n else {\n lines.push(`... ${cs}`);\n }\n }\n else {\n lines.push('...');\n }\n }\n else {\n let dc = doc.comment;\n if (dc && chompKeep)\n dc = dc.replace(/^\\n+/, '');\n if (dc) {\n if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n lines.push('');\n lines.push(stringifyComment.indentComment(commentString(dc), ''));\n }\n }\n return lines.join('\\n') + '\\n';\n}\n\nexports.stringifyDocument = stringifyDocument;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar Collection = require('../nodes/Collection.js');\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar toJS = require('../nodes/toJS.js');\nvar Schema = require('../schema/Schema.js');\nvar stringifyDocument = require('../stringify/stringifyDocument.js');\nvar anchors = require('./anchors.js');\nvar applyReviver = require('./applyReviver.js');\nvar createNode = require('./createNode.js');\nvar directives = require('./directives.js');\n\nclass Document {\n constructor(value, replacer, options) {\n /** A comment before this Document */\n this.commentBefore = null;\n /** A comment immediately after this Document */\n this.comment = null;\n /** Errors encountered during parsing. */\n this.errors = [];\n /** Warnings encountered during parsing. */\n this.warnings = [];\n Object.defineProperty(this, identity.NODE_TYPE, { value: identity.DOC });\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const opt = Object.assign({\n intAsBigInt: false,\n keepSourceTokens: false,\n logLevel: 'warn',\n prettyErrors: true,\n strict: true,\n stringKeys: false,\n uniqueKeys: true,\n version: '1.2'\n }, options);\n this.options = opt;\n let { version } = opt;\n if (options?._directives) {\n this.directives = options._directives.atDocument();\n if (this.directives.yaml.explicit)\n version = this.directives.yaml.version;\n }\n else\n this.directives = new directives.Directives({ version });\n this.setSchema(version, options);\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents =\n value === undefined ? null : this.createNode(value, _replacer, options);\n }\n /**\n * Create a deep copy of this Document and its contents.\n *\n * Custom Node values that inherit from `Object` still refer to their original instances.\n */\n clone() {\n const copy = Object.create(Document.prototype, {\n [identity.NODE_TYPE]: { value: identity.DOC }\n });\n copy.commentBefore = this.commentBefore;\n copy.comment = this.comment;\n copy.errors = this.errors.slice();\n copy.warnings = this.warnings.slice();\n copy.options = Object.assign({}, this.options);\n if (this.directives)\n copy.directives = this.directives.clone();\n copy.schema = this.schema.clone();\n // @ts-expect-error We can't really know that this matches Contents.\n copy.contents = identity.isNode(this.contents)\n ? this.contents.clone(copy.schema)\n : this.contents;\n if (this.range)\n copy.range = this.range.slice();\n return copy;\n }\n /** Adds a value to the document. */\n add(value) {\n if (assertCollection(this.contents))\n this.contents.add(value);\n }\n /** Adds a value to the document. */\n addIn(path, value) {\n if (assertCollection(this.contents))\n this.contents.addIn(path, value);\n }\n /**\n * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n *\n * If `node` already has an anchor, `name` is ignored.\n * Otherwise, the `node.anchor` value will be set to `name`,\n * or if an anchor with that name is already present in the document,\n * `name` will be used as a prefix for a new unique anchor.\n * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n */\n createAlias(node, name) {\n if (!node.anchor) {\n const prev = anchors.anchorNames(this);\n node.anchor =\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;\n }\n return new Alias.Alias(node.anchor);\n }\n createNode(value, replacer, options) {\n let _replacer = undefined;\n if (typeof replacer === 'function') {\n value = replacer.call({ '': value }, '', value);\n _replacer = replacer;\n }\n else if (Array.isArray(replacer)) {\n const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n const asStr = replacer.filter(keyToStr).map(String);\n if (asStr.length > 0)\n replacer = replacer.concat(asStr);\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n replacer = undefined;\n }\n const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, \n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n anchorPrefix || 'a');\n const ctx = {\n aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n keepUndefined: keepUndefined ?? false,\n onAnchor,\n onTagObj,\n replacer: _replacer,\n schema: this.schema,\n sourceObjects\n };\n const node = createNode.createNode(value, tag, ctx);\n if (flow && identity.isCollection(node))\n node.flow = true;\n setAnchors();\n return node;\n }\n /**\n * Convert a key and a value into a `Pair` using the current schema,\n * recursively wrapping all values as `Scalar` or `Collection` nodes.\n */\n createPair(key, value, options = {}) {\n const k = this.createNode(key, null, options);\n const v = this.createNode(value, null, options);\n return new Pair.Pair(k, v);\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n delete(key) {\n return assertCollection(this.contents) ? this.contents.delete(key) : false;\n }\n /**\n * Removes a value from the document.\n * @returns `true` if the item was found and removed.\n */\n deleteIn(path) {\n if (Collection.isEmptyPath(path)) {\n if (this.contents == null)\n return false;\n // @ts-expect-error Presumed impossible if Strict extends false\n this.contents = null;\n return true;\n }\n return assertCollection(this.contents)\n ? this.contents.deleteIn(path)\n : false;\n }\n /**\n * Returns item at `key`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n get(key, keepScalar) {\n return identity.isCollection(this.contents)\n ? this.contents.get(key, keepScalar)\n : undefined;\n }\n /**\n * Returns item at `path`, or `undefined` if not found. By default unwraps\n * scalar values from their surrounding node; to disable set `keepScalar` to\n * `true` (collections are always returned intact).\n */\n getIn(path, keepScalar) {\n if (Collection.isEmptyPath(path))\n return !keepScalar && identity.isScalar(this.contents)\n ? this.contents.value\n : this.contents;\n return identity.isCollection(this.contents)\n ? this.contents.getIn(path, keepScalar)\n : undefined;\n }\n /**\n * Checks if the document includes a value with the key `key`.\n */\n has(key) {\n return identity.isCollection(this.contents) ? this.contents.has(key) : false;\n }\n /**\n * Checks if the document includes a value at `path`.\n */\n hasIn(path) {\n if (Collection.isEmptyPath(path))\n return this.contents !== undefined;\n return identity.isCollection(this.contents) ? this.contents.hasIn(path) : false;\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n set(key, value) {\n if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, [key], value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.set(key, value);\n }\n }\n /**\n * Sets a value in this document. For `!!set`, `value` needs to be a\n * boolean to add/remove the item from the set.\n */\n setIn(path, value) {\n if (Collection.isEmptyPath(path)) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = value;\n }\n else if (this.contents == null) {\n // @ts-expect-error We can't really know that this matches Contents.\n this.contents = Collection.collectionFromPath(this.schema, Array.from(path), value);\n }\n else if (assertCollection(this.contents)) {\n this.contents.setIn(path, value);\n }\n }\n /**\n * Change the YAML version and schema used by the document.\n * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n * It also requires the `schema` option to be given as a `Schema` instance value.\n *\n * Overrides all previously set schema options.\n */\n setSchema(version, options = {}) {\n if (typeof version === 'number')\n version = String(version);\n let opt;\n switch (version) {\n case '1.1':\n if (this.directives)\n this.directives.yaml.version = '1.1';\n else\n this.directives = new directives.Directives({ version: '1.1' });\n opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n break;\n case '1.2':\n case 'next':\n if (this.directives)\n this.directives.yaml.version = version;\n else\n this.directives = new directives.Directives({ version });\n opt = { resolveKnownTags: true, schema: 'core' };\n break;\n case null:\n if (this.directives)\n delete this.directives;\n opt = null;\n break;\n default: {\n const sv = JSON.stringify(version);\n throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n }\n }\n // Not using `instanceof Schema` to allow for duck typing\n if (options.schema instanceof Object)\n this.schema = options.schema;\n else if (opt)\n this.schema = new Schema.Schema(Object.assign(opt, options));\n else\n throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n }\n // json & jsonArg are only used from toJSON()\n toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n const ctx = {\n anchors: new Map(),\n doc: this,\n keep: !json,\n mapAsMap: mapAsMap === true,\n mapKeyWarned: false,\n maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n };\n const res = toJS.toJS(this.contents, jsonArg ?? '', ctx);\n if (typeof onAnchor === 'function')\n for (const { count, res } of ctx.anchors.values())\n onAnchor(res, count);\n return typeof reviver === 'function'\n ? applyReviver.applyReviver(reviver, { '': res }, '', res)\n : res;\n }\n /**\n * A JSON representation of the document `contents`.\n *\n * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n * property name.\n */\n toJSON(jsonArg, onAnchor) {\n return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n }\n /** A YAML representation of the document. */\n toString(options = {}) {\n if (this.errors.length > 0)\n throw new Error('Document with errors cannot be stringified');\n if ('indent' in options &&\n (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n const s = JSON.stringify(options.indent);\n throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n }\n return stringifyDocument.stringifyDocument(this, options);\n }\n}\nfunction assertCollection(contents) {\n if (identity.isCollection(contents))\n return true;\n throw new Error('Expected a YAML collection as document contents');\n}\n\nexports.Document = Document;\n","'use strict';\n\nclass YAMLError extends Error {\n constructor(name, pos, code, message) {\n super();\n this.name = name;\n this.code = code;\n this.message = message;\n this.pos = pos;\n }\n}\nclass YAMLParseError extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLParseError', pos, code, message);\n }\n}\nclass YAMLWarning extends YAMLError {\n constructor(pos, code, message) {\n super('YAMLWarning', pos, code, message);\n }\n}\nconst prettifyError = (src, lc) => (error) => {\n if (error.pos[0] === -1)\n return;\n error.linePos = error.pos.map(pos => lc.linePos(pos));\n const { line, col } = error.linePos[0];\n error.message += ` at line ${line}, column ${col}`;\n let ci = col - 1;\n let lineStr = src\n .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n .replace(/[\\n\\r]+$/, '');\n // Trim to max 80 chars, keeping col position near the middle\n if (ci >= 60 && lineStr.length > 80) {\n const trimStart = Math.min(ci - 39, lineStr.length - 79);\n lineStr = '…' + lineStr.substring(trimStart);\n ci -= trimStart - 1;\n }\n if (lineStr.length > 80)\n lineStr = lineStr.substring(0, 79) + '…';\n // Include previous line in context if pointing at line start\n if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n // Regexp won't match if start is trimmed\n let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n if (prev.length > 80)\n prev = prev.substring(0, 79) + '…\\n';\n lineStr = prev + lineStr;\n }\n if (/[^ ]/.test(lineStr)) {\n let count = 1;\n const end = error.linePos[1];\n if (end?.line === line && end.col > col) {\n count = Math.max(1, Math.min(end.col - col, 80 - ci));\n }\n const pointer = ' '.repeat(ci) + '^'.repeat(count);\n error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n }\n};\n\nexports.YAMLError = YAMLError;\nexports.YAMLParseError = YAMLParseError;\nexports.YAMLWarning = YAMLWarning;\nexports.prettifyError = prettifyError;\n","'use strict';\n\nfunction resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n let spaceBefore = false;\n let atNewline = startOnNewline;\n let hasSpace = startOnNewline;\n let comment = '';\n let commentSep = '';\n let hasNewline = false;\n let reqSpace = false;\n let tab = null;\n let anchor = null;\n let tag = null;\n let newlineAfterProp = null;\n let comma = null;\n let found = null;\n let start = null;\n for (const token of tokens) {\n if (reqSpace) {\n if (token.type !== 'space' &&\n token.type !== 'newline' &&\n token.type !== 'comma')\n onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n reqSpace = false;\n }\n if (tab) {\n if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n }\n tab = null;\n }\n switch (token.type) {\n case 'space':\n // At the doc level, tabs at line start may be parsed\n // as leading white space rather than indentation.\n // In a flow collection, only the parser handles indent.\n if (!flow &&\n (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n token.source.includes('\\t')) {\n tab = token;\n }\n hasSpace = true;\n break;\n case 'comment': {\n if (!hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = token.source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += commentSep + cb;\n commentSep = '';\n atNewline = false;\n break;\n }\n case 'newline':\n if (atNewline) {\n if (comment)\n comment += token.source;\n else if (!found || indicator !== 'seq-item-ind')\n spaceBefore = true;\n }\n else\n commentSep += token.source;\n atNewline = true;\n hasNewline = true;\n if (anchor || tag)\n newlineAfterProp = token;\n hasSpace = true;\n break;\n case 'anchor':\n if (anchor)\n onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n if (token.source.endsWith(':'))\n onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n anchor = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n case 'tag': {\n if (tag)\n onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n tag = token;\n start ?? (start = token.offset);\n atNewline = false;\n hasSpace = false;\n reqSpace = true;\n break;\n }\n case indicator:\n // Could here handle preceding comments differently\n if (anchor || tag)\n onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n if (found)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n found = token;\n atNewline =\n indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n hasSpace = false;\n break;\n case 'comma':\n if (flow) {\n if (comma)\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n comma = token;\n atNewline = false;\n hasSpace = false;\n break;\n }\n // else fallthrough\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n atNewline = false;\n hasSpace = false;\n }\n }\n const last = tokens[tokens.length - 1];\n const end = last ? last.offset + last.source.length : offset;\n if (reqSpace &&\n next &&\n next.type !== 'space' &&\n next.type !== 'newline' &&\n next.type !== 'comma' &&\n (next.type !== 'scalar' || next.source !== '')) {\n onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n }\n if (tab &&\n ((atNewline && tab.indent <= parentIndent) ||\n next?.type === 'block-map' ||\n next?.type === 'block-seq'))\n onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n return {\n comma,\n found,\n spaceBefore,\n comment,\n hasNewline,\n anchor,\n tag,\n newlineAfterProp,\n end,\n start: start ?? end\n };\n}\n\nexports.resolveProps = resolveProps;\n","'use strict';\n\nfunction containsNewline(key) {\n if (!key)\n return null;\n switch (key.type) {\n case 'alias':\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n if (key.source.includes('\\n'))\n return true;\n if (key.end)\n for (const st of key.end)\n if (st.type === 'newline')\n return true;\n return false;\n case 'flow-collection':\n for (const it of key.items) {\n for (const st of it.start)\n if (st.type === 'newline')\n return true;\n if (it.sep)\n for (const st of it.sep)\n if (st.type === 'newline')\n return true;\n if (containsNewline(it.key) || containsNewline(it.value))\n return true;\n }\n return false;\n default:\n return true;\n }\n}\n\nexports.containsNewline = containsNewline;\n","'use strict';\n\nvar utilContainsNewline = require('./util-contains-newline.js');\n\nfunction flowIndentCheck(indent, fc, onError) {\n if (fc?.type === 'flow-collection') {\n const end = fc.end[0];\n if (end.indent === indent &&\n (end.source === ']' || end.source === '}') &&\n utilContainsNewline.containsNewline(fc)) {\n const msg = 'Flow end indicator should be more indented than parent';\n onError(end, 'BAD_INDENT', msg, true);\n }\n }\n}\n\nexports.flowIndentCheck = flowIndentCheck;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\n\nfunction mapIncludes(ctx, items, search) {\n const { uniqueKeys } = ctx.options;\n if (uniqueKeys === false)\n return false;\n const isEqual = typeof uniqueKeys === 'function'\n ? uniqueKeys\n : (a, b) => a === b || (identity.isScalar(a) && identity.isScalar(b) && a.value === b.value);\n return items.some(pair => isEqual(pair.key, search));\n}\n\nexports.mapIncludes = mapIncludes;\n","'use strict';\n\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLMap.YAMLMap;\n const map = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n let offset = bm.offset;\n let commentEnd = null;\n for (const collItem of bm.items) {\n const { start, key, sep, value } = collItem;\n // key properties\n const keyProps = resolveProps.resolveProps(start, {\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: bm.indent,\n startOnNewline: true\n });\n const implicitKey = !keyProps.found;\n if (implicitKey) {\n if (key) {\n if (key.type === 'block-seq')\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n else if ('indent' in key && key.indent !== bm.indent)\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n if (!keyProps.anchor && !keyProps.tag && !sep) {\n commentEnd = keyProps.end;\n if (keyProps.comment) {\n if (map.comment)\n map.comment += '\\n' + keyProps.comment;\n else\n map.comment = keyProps.comment;\n }\n continue;\n }\n if (keyProps.newlineAfterProp || utilContainsNewline.containsNewline(key)) {\n onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n }\n }\n else if (keyProps.found?.indent !== bm.indent) {\n onError(offset, 'BAD_INDENT', startColMsg);\n }\n // key value\n ctx.atKey = true;\n const keyStart = keyProps.end;\n const keyNode = key\n ? composeNode(ctx, key, keyProps, onError)\n : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, key, onError);\n ctx.atKey = false;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: bm.indent,\n startOnNewline: !key || key.type === 'block-scalar'\n });\n offset = valueProps.end;\n if (valueProps.found) {\n if (implicitKey) {\n if (value?.type === 'block-map' && !valueProps.hasNewline)\n onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n if (ctx.options.strict &&\n keyProps.start < valueProps.found.offset - 1024)\n onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bm.indent, value, onError);\n offset = valueNode.range[2];\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n else {\n // key with no value\n if (implicitKey)\n onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n map.items.push(pair);\n }\n }\n if (commentEnd && commentEnd < offset)\n onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n map.range = [bm.offset, offset, commentEnd ?? offset];\n return map;\n}\n\nexports.resolveBlockMap = resolveBlockMap;\n","'use strict';\n\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilFlowIndentCheck = require('./util-flow-indent-check.js');\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n const NodeClass = tag?.nodeClass ?? YAMLSeq.YAMLSeq;\n const seq = new NodeClass(ctx.schema);\n if (ctx.atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = bs.offset;\n let commentEnd = null;\n for (const { start, value } of bs.items) {\n const props = resolveProps.resolveProps(start, {\n indicator: 'seq-item-ind',\n next: value,\n offset,\n onError,\n parentIndent: bs.indent,\n startOnNewline: true\n });\n if (!props.found) {\n if (props.anchor || props.tag || value) {\n if (value?.type === 'block-seq')\n onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n else\n onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n }\n else {\n commentEnd = props.end;\n if (props.comment)\n seq.comment = props.comment;\n continue;\n }\n }\n const node = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, start, null, props, onError);\n if (ctx.schema.compat)\n utilFlowIndentCheck.flowIndentCheck(bs.indent, value, onError);\n offset = node.range[2];\n seq.items.push(node);\n }\n seq.range = [bs.offset, offset, commentEnd ?? offset];\n return seq;\n}\n\nexports.resolveBlockSeq = resolveBlockSeq;\n","'use strict';\n\nfunction resolveEnd(end, offset, reqSpace, onError) {\n let comment = '';\n if (end) {\n let hasSpace = false;\n let sep = '';\n for (const token of end) {\n const { source, type } = token;\n switch (type) {\n case 'space':\n hasSpace = true;\n break;\n case 'comment': {\n if (reqSpace && !hasSpace)\n onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n const cb = source.substring(1) || ' ';\n if (!comment)\n comment = cb;\n else\n comment += sep + cb;\n sep = '';\n break;\n }\n case 'newline':\n if (comment)\n sep += source;\n hasSpace = true;\n break;\n default:\n onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n }\n offset += source.length;\n }\n }\n return { comment, offset };\n}\n\nexports.resolveEnd = resolveEnd;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Pair = require('../nodes/Pair.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\nvar utilContainsNewline = require('./util-contains-newline.js');\nvar utilMapIncludes = require('./util-map-includes.js');\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n const isMap = fc.start.source === '{';\n const fcName = isMap ? 'flow map' : 'flow sequence';\n const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap.YAMLMap : YAMLSeq.YAMLSeq));\n const coll = new NodeClass(ctx.schema);\n coll.flow = true;\n const atRoot = ctx.atRoot;\n if (atRoot)\n ctx.atRoot = false;\n if (ctx.atKey)\n ctx.atKey = false;\n let offset = fc.offset + fc.start.source.length;\n for (let i = 0; i < fc.items.length; ++i) {\n const collItem = fc.items[i];\n const { start, key, sep, value } = collItem;\n const props = resolveProps.resolveProps(start, {\n flow: fcName,\n indicator: 'explicit-key-ind',\n next: key ?? sep?.[0],\n offset,\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (!props.found) {\n if (!props.anchor && !props.tag && !sep && !value) {\n if (i === 0 && props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n else if (i < fc.items.length - 1)\n onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n if (props.comment) {\n if (coll.comment)\n coll.comment += '\\n' + props.comment;\n else\n coll.comment = props.comment;\n }\n offset = props.end;\n continue;\n }\n if (!isMap && ctx.options.strict && utilContainsNewline.containsNewline(key))\n onError(key, // checked by containsNewline()\n 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n }\n if (i === 0) {\n if (props.comma)\n onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n }\n else {\n if (!props.comma)\n onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n if (props.comment) {\n let prevItemComment = '';\n loop: for (const st of start) {\n switch (st.type) {\n case 'comma':\n case 'space':\n break;\n case 'comment':\n prevItemComment = st.source.substring(1);\n break loop;\n default:\n break loop;\n }\n }\n if (prevItemComment) {\n let prev = coll.items[coll.items.length - 1];\n if (identity.isPair(prev))\n prev = prev.value ?? prev.key;\n if (prev.comment)\n prev.comment += '\\n' + prevItemComment;\n else\n prev.comment = prevItemComment;\n props.comment = props.comment.substring(prevItemComment.length + 1);\n }\n }\n }\n if (!isMap && !sep && !props.found) {\n // item is a value in a seq\n // → key & sep are empty, start does not include ? or :\n const valueNode = value\n ? composeNode(ctx, value, props, onError)\n : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n coll.items.push(valueNode);\n offset = valueNode.range[2];\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else {\n // item is a key+value pair\n // key value\n ctx.atKey = true;\n const keyStart = props.end;\n const keyNode = key\n ? composeNode(ctx, key, props, onError)\n : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n if (isBlock(key))\n onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n ctx.atKey = false;\n // value properties\n const valueProps = resolveProps.resolveProps(sep ?? [], {\n flow: fcName,\n indicator: 'map-value-ind',\n next: value,\n offset: keyNode.range[2],\n onError,\n parentIndent: fc.indent,\n startOnNewline: false\n });\n if (valueProps.found) {\n if (!isMap && !props.found && ctx.options.strict) {\n if (sep)\n for (const st of sep) {\n if (st === valueProps.found)\n break;\n if (st.type === 'newline') {\n onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n break;\n }\n }\n if (props.start < valueProps.found.offset - 1024)\n onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n }\n }\n else if (value) {\n if ('source' in value && value.source?.[0] === ':')\n onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n else\n onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n }\n // value value\n const valueNode = value\n ? composeNode(ctx, value, valueProps, onError)\n : valueProps.found\n ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n : null;\n if (valueNode) {\n if (isBlock(value))\n onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n }\n else if (valueProps.comment) {\n if (keyNode.comment)\n keyNode.comment += '\\n' + valueProps.comment;\n else\n keyNode.comment = valueProps.comment;\n }\n const pair = new Pair.Pair(keyNode, valueNode);\n if (ctx.options.keepSourceTokens)\n pair.srcToken = collItem;\n if (isMap) {\n const map = coll;\n if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))\n onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n map.items.push(pair);\n }\n else {\n const map = new YAMLMap.YAMLMap(ctx.schema);\n map.flow = true;\n map.items.push(pair);\n const endRange = (valueNode ?? keyNode).range;\n map.range = [keyNode.range[0], endRange[1], endRange[2]];\n coll.items.push(map);\n }\n offset = valueNode ? valueNode.range[2] : valueProps.end;\n }\n }\n const expectedEnd = isMap ? '}' : ']';\n const [ce, ...ee] = fc.end;\n let cePos = offset;\n if (ce?.source === expectedEnd)\n cePos = ce.offset + ce.source.length;\n else {\n const name = fcName[0].toUpperCase() + fcName.substring(1);\n const msg = atRoot\n ? `${name} must end with a ${expectedEnd}`\n : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n if (ce && ce.source.length !== 1)\n ee.unshift(ce);\n }\n if (ee.length > 0) {\n const end = resolveEnd.resolveEnd(ee, cePos, ctx.options.strict, onError);\n if (end.comment) {\n if (coll.comment)\n coll.comment += '\\n' + end.comment;\n else\n coll.comment = end.comment;\n }\n coll.range = [fc.offset, cePos, end.offset];\n }\n else {\n coll.range = [fc.offset, cePos, cePos];\n }\n return coll;\n}\n\nexports.resolveFlowCollection = resolveFlowCollection;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar YAMLMap = require('../nodes/YAMLMap.js');\nvar YAMLSeq = require('../nodes/YAMLSeq.js');\nvar resolveBlockMap = require('./resolve-block-map.js');\nvar resolveBlockSeq = require('./resolve-block-seq.js');\nvar resolveFlowCollection = require('./resolve-flow-collection.js');\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n const coll = token.type === 'block-map'\n ? resolveBlockMap.resolveBlockMap(CN, ctx, token, onError, tag)\n : token.type === 'block-seq'\n ? resolveBlockSeq.resolveBlockSeq(CN, ctx, token, onError, tag)\n : resolveFlowCollection.resolveFlowCollection(CN, ctx, token, onError, tag);\n const Coll = coll.constructor;\n // If we got a tagName matching the class, or the tag name is '!',\n // then use the tagName from the node class used to create it.\n if (tagName === '!' || tagName === Coll.tagName) {\n coll.tag = Coll.tagName;\n return coll;\n }\n if (tagName)\n coll.tag = tagName;\n return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n const tagToken = props.tag;\n const tagName = !tagToken\n ? null\n : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n if (token.type === 'block-seq') {\n const { anchor, newlineAfterProp: nl } = props;\n const lastProp = anchor && tagToken\n ? anchor.offset > tagToken.offset\n ? anchor\n : tagToken\n : (anchor ?? tagToken);\n if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n const message = 'Missing newline after block sequence props';\n onError(lastProp, 'MISSING_CHAR', message);\n }\n }\n const expType = token.type === 'block-map'\n ? 'map'\n : token.type === 'block-seq'\n ? 'seq'\n : token.start.source === '{'\n ? 'map'\n : 'seq';\n // shortcut: check if it's a generic YAMLMap or YAMLSeq\n // before jumping into the custom tag logic.\n if (!tagToken ||\n !tagName ||\n tagName === '!' ||\n (tagName === YAMLMap.YAMLMap.tagName && expType === 'map') ||\n (tagName === YAMLSeq.YAMLSeq.tagName && expType === 'seq')) {\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n if (!tag) {\n const kt = ctx.schema.knownTags[tagName];\n if (kt?.collection === expType) {\n ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n tag = kt;\n }\n else {\n if (kt) {\n onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n }\n else {\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n }\n return resolveCollection(CN, ctx, token, onError, tagName);\n }\n }\n const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n const node = identity.isNode(res)\n ? res\n : new Scalar.Scalar(res);\n node.range = coll.range;\n node.tag = tagName;\n if (tag?.format)\n node.format = tag.format;\n return node;\n}\n\nexports.composeCollection = composeCollection;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n const start = scalar.offset;\n const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n if (!header)\n return { value: '', type: null, comment: '', range: [start, start, start] };\n const type = header.mode === '>' ? Scalar.Scalar.BLOCK_FOLDED : Scalar.Scalar.BLOCK_LITERAL;\n const lines = scalar.source ? splitLines(scalar.source) : [];\n // determine the end of content & start of chomping\n let chompStart = lines.length;\n for (let i = lines.length - 1; i >= 0; --i) {\n const content = lines[i][1];\n if (content === '' || content === '\\r')\n chompStart = i;\n else\n break;\n }\n // shortcut for empty contents\n if (chompStart === 0) {\n const value = header.chomp === '+' && lines.length > 0\n ? '\\n'.repeat(Math.max(1, lines.length - 1))\n : '';\n let end = start + header.length;\n if (scalar.source)\n end += scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n }\n // find the indentation level to trim from start\n let trimIndent = scalar.indent + header.indent;\n let offset = scalar.offset + header.length;\n let contentStart = 0;\n for (let i = 0; i < chompStart; ++i) {\n const [indent, content] = lines[i];\n if (content === '' || content === '\\r') {\n if (header.indent === 0 && indent.length > trimIndent)\n trimIndent = indent.length;\n }\n else {\n if (indent.length < trimIndent) {\n const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n onError(offset + indent.length, 'MISSING_CHAR', message);\n }\n if (header.indent === 0)\n trimIndent = indent.length;\n contentStart = i;\n if (trimIndent === 0 && !ctx.atRoot) {\n const message = 'Block scalar values in collections must be indented';\n onError(offset, 'BAD_INDENT', message);\n }\n break;\n }\n offset += indent.length + content.length + 1;\n }\n // include trailing more-indented empty lines in content\n for (let i = lines.length - 1; i >= chompStart; --i) {\n if (lines[i][0].length > trimIndent)\n chompStart = i + 1;\n }\n let value = '';\n let sep = '';\n let prevMoreIndented = false;\n // leading whitespace is kept intact\n for (let i = 0; i < contentStart; ++i)\n value += lines[i][0].slice(trimIndent) + '\\n';\n for (let i = contentStart; i < chompStart; ++i) {\n let [indent, content] = lines[i];\n offset += indent.length + content.length + 1;\n const crlf = content[content.length - 1] === '\\r';\n if (crlf)\n content = content.slice(0, -1);\n /* istanbul ignore if already caught in lexer */\n if (content && indent.length < trimIndent) {\n const src = header.indent\n ? 'explicit indentation indicator'\n : 'first line';\n const message = `Block scalar lines must not be less indented than their ${src}`;\n onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n indent = '';\n }\n if (type === Scalar.Scalar.BLOCK_LITERAL) {\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n }\n else if (indent.length > trimIndent || content[0] === '\\t') {\n // more-indented content within a folded block\n if (sep === ' ')\n sep = '\\n';\n else if (!prevMoreIndented && sep === '\\n')\n sep = '\\n\\n';\n value += sep + indent.slice(trimIndent) + content;\n sep = '\\n';\n prevMoreIndented = true;\n }\n else if (content === '') {\n // empty line\n if (sep === '\\n')\n value += '\\n';\n else\n sep = '\\n';\n }\n else {\n value += sep + content;\n sep = ' ';\n prevMoreIndented = false;\n }\n }\n switch (header.chomp) {\n case '-':\n break;\n case '+':\n for (let i = chompStart; i < lines.length; ++i)\n value += '\\n' + lines[i][0].slice(trimIndent);\n if (value[value.length - 1] !== '\\n')\n value += '\\n';\n break;\n default:\n value += '\\n';\n }\n const end = start + header.length + scalar.source.length;\n return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n /* istanbul ignore if should not happen */\n if (props[0].type !== 'block-scalar-header') {\n onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n return null;\n }\n const { source } = props[0];\n const mode = source[0];\n let indent = 0;\n let chomp = '';\n let error = -1;\n for (let i = 1; i < source.length; ++i) {\n const ch = source[i];\n if (!chomp && (ch === '-' || ch === '+'))\n chomp = ch;\n else {\n const n = Number(ch);\n if (!indent && n)\n indent = n;\n else if (error === -1)\n error = offset + i;\n }\n }\n if (error !== -1)\n onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n let hasSpace = false;\n let comment = '';\n let length = source.length;\n for (let i = 1; i < props.length; ++i) {\n const token = props[i];\n switch (token.type) {\n case 'space':\n hasSpace = true;\n // fallthrough\n case 'newline':\n length += token.source.length;\n break;\n case 'comment':\n if (strict && !hasSpace) {\n const message = 'Comments must be separated from other tokens by white space characters';\n onError(token, 'MISSING_CHAR', message);\n }\n length += token.source.length;\n comment = token.source.substring(1);\n break;\n case 'error':\n onError(token, 'UNEXPECTED_TOKEN', token.message);\n length += token.source.length;\n break;\n /* istanbul ignore next should not happen */\n default: {\n const message = `Unexpected token in block scalar header: ${token.type}`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n const ts = token.source;\n if (ts && typeof ts === 'string')\n length += ts.length;\n }\n }\n }\n return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n const split = source.split(/\\n( *)/);\n const first = split[0];\n const m = first.match(/^( *)/);\n const line0 = m?.[1]\n ? [m[1], first.slice(m[1].length)]\n : ['', first];\n const lines = [line0];\n for (let i = 1; i < split.length; i += 2)\n lines.push([split[i], split[i + 1]]);\n return lines;\n}\n\nexports.resolveBlockScalar = resolveBlockScalar;\n","'use strict';\n\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n const { offset, type, source, end } = scalar;\n let _type;\n let value;\n const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n switch (type) {\n case 'scalar':\n _type = Scalar.Scalar.PLAIN;\n value = plainValue(source, _onError);\n break;\n case 'single-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_SINGLE;\n value = singleQuotedValue(source, _onError);\n break;\n case 'double-quoted-scalar':\n _type = Scalar.Scalar.QUOTE_DOUBLE;\n value = doubleQuotedValue(source, _onError);\n break;\n /* istanbul ignore next should not happen */\n default:\n onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n return {\n value: '',\n type: null,\n comment: '',\n range: [offset, offset + source.length, offset + source.length]\n };\n }\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, strict, onError);\n return {\n value,\n type: _type,\n comment: re.comment,\n range: [offset, valueEnd, re.offset]\n };\n}\nfunction plainValue(source, onError) {\n let badChar = '';\n switch (source[0]) {\n /* istanbul ignore next should not happen */\n case '\\t':\n badChar = 'a tab character';\n break;\n case ',':\n badChar = 'flow indicator character ,';\n break;\n case '%':\n badChar = 'directive indicator character %';\n break;\n case '|':\n case '>': {\n badChar = `block scalar indicator ${source[0]}`;\n break;\n }\n case '@':\n case '`': {\n badChar = `reserved character ${source[0]}`;\n break;\n }\n }\n if (badChar)\n onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n if (source[source.length - 1] !== \"'\" || source.length === 1)\n onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n /**\n * The negative lookbehind here and in the `re` RegExp is to\n * prevent causing a polynomial search time in certain cases.\n *\n * The try-catch is for Safari, which doesn't support this yet:\n * https://caniuse.com/js-regexp-lookbehind\n */\n let first, line;\n try {\n first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n }\n catch {\n first = /(.*?)[ \\t]*\\r?\\n/sy;\n line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n }\n let match = first.exec(source);\n if (!match)\n return source;\n let res = match[1];\n let sep = ' ';\n let pos = first.lastIndex;\n line.lastIndex = pos;\n while ((match = line.exec(source))) {\n if (match[1] === '') {\n if (sep === '\\n')\n res += sep;\n else\n sep = '\\n';\n }\n else {\n res += sep + match[1];\n sep = ' ';\n }\n pos = line.lastIndex;\n }\n const last = /[ \\t]*(.*)/sy;\n last.lastIndex = pos;\n match = last.exec(source);\n return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n let res = '';\n for (let i = 1; i < source.length - 1; ++i) {\n const ch = source[i];\n if (ch === '\\r' && source[i + 1] === '\\n')\n continue;\n if (ch === '\\n') {\n const { fold, offset } = foldNewline(source, i);\n res += fold;\n i = offset;\n }\n else if (ch === '\\\\') {\n let next = source[++i];\n const cc = escapeCodes[next];\n if (cc)\n res += cc;\n else if (next === '\\n') {\n // skip escaped newlines, but still trim the following line\n next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === '\\r' && source[i + 1] === '\\n') {\n // skip escaped CRLF newlines, but still trim the following line\n next = source[++i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n }\n else if (next === 'x' || next === 'u' || next === 'U') {\n const length = { x: 2, u: 4, U: 8 }[next];\n res += parseCharCode(source, i + 1, length, onError);\n i += length;\n }\n else {\n const raw = source.substr(i - 1, 2);\n onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n res += raw;\n }\n }\n else if (ch === ' ' || ch === '\\t') {\n // trim trailing whitespace\n const wsStart = i;\n let next = source[i + 1];\n while (next === ' ' || next === '\\t')\n next = source[++i + 1];\n if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n }\n else {\n res += ch;\n }\n }\n if (source[source.length - 1] !== '\"' || source.length === 1)\n onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n let fold = '';\n let ch = source[offset + 1];\n while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n if (ch === '\\r' && source[offset + 2] !== '\\n')\n break;\n if (ch === '\\n')\n fold += '\\n';\n offset += 1;\n ch = source[offset + 1];\n }\n if (!fold)\n fold = ' ';\n return { fold, offset };\n}\nconst escapeCodes = {\n '0': '\\0', // null character\n a: '\\x07', // bell character\n b: '\\b', // backspace\n e: '\\x1b', // escape character\n f: '\\f', // form feed\n n: '\\n', // line feed\n r: '\\r', // carriage return\n t: '\\t', // horizontal tab\n v: '\\v', // vertical tab\n N: '\\u0085', // Unicode next line\n _: '\\u00a0', // Unicode non-breaking space\n L: '\\u2028', // Unicode line separator\n P: '\\u2029', // Unicode paragraph separator\n ' ': ' ',\n '\"': '\"',\n '/': '/',\n '\\\\': '\\\\',\n '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n const cc = source.substr(offset, length);\n const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n const code = ok ? parseInt(cc, 16) : NaN;\n if (isNaN(code)) {\n const raw = source.substr(offset - 2, length + 2);\n onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n return raw;\n }\n return String.fromCodePoint(code);\n}\n\nexports.resolveFlowScalar = resolveFlowScalar;\n","'use strict';\n\nvar identity = require('../nodes/identity.js');\nvar Scalar = require('../nodes/Scalar.js');\nvar resolveBlockScalar = require('./resolve-block-scalar.js');\nvar resolveFlowScalar = require('./resolve-flow-scalar.js');\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n const { value, type, comment, range } = token.type === 'block-scalar'\n ? resolveBlockScalar.resolveBlockScalar(ctx, token, onError)\n : resolveFlowScalar.resolveFlowScalar(token, ctx.options.strict, onError);\n const tagName = tagToken\n ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n : null;\n let tag;\n if (ctx.options.stringKeys && ctx.atKey) {\n tag = ctx.schema[identity.SCALAR];\n }\n else if (tagName)\n tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n else if (token.type === 'scalar')\n tag = findScalarTagByTest(ctx, value, token, onError);\n else\n tag = ctx.schema[identity.SCALAR];\n let scalar;\n try {\n const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n scalar = identity.isScalar(res) ? res : new Scalar.Scalar(res);\n }\n catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n scalar = new Scalar.Scalar(value);\n }\n scalar.range = range;\n scalar.source = value;\n if (type)\n scalar.type = type;\n if (tagName)\n scalar.tag = tagName;\n if (tag.format)\n scalar.format = tag.format;\n if (comment)\n scalar.comment = comment;\n return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n if (tagName === '!')\n return schema[identity.SCALAR]; // non-specific tag\n const matchWithTest = [];\n for (const tag of schema.tags) {\n if (!tag.collection && tag.tag === tagName) {\n if (tag.default && tag.test)\n matchWithTest.push(tag);\n else\n return tag;\n }\n }\n for (const tag of matchWithTest)\n if (tag.test?.test(value))\n return tag;\n const kt = schema.knownTags[tagName];\n if (kt && !kt.collection) {\n // Ensure that the known tag is available for stringifying,\n // but does not get used by default.\n schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n return kt;\n }\n onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n return schema[identity.SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n tag.test?.test(value)) || schema[identity.SCALAR];\n if (schema.compat) {\n const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n schema[identity.SCALAR];\n if (tag.tag !== compat.tag) {\n const ts = directives.tagString(tag.tag);\n const cs = directives.tagString(compat.tag);\n const msg = `Value may be parsed as either ${ts} or ${cs}`;\n onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n }\n }\n return tag;\n}\n\nexports.composeScalar = composeScalar;\n","'use strict';\n\nfunction emptyScalarPosition(offset, before, pos) {\n if (before) {\n pos ?? (pos = before.length);\n for (let i = pos - 1; i >= 0; --i) {\n let st = before[i];\n switch (st.type) {\n case 'space':\n case 'comment':\n case 'newline':\n offset -= st.source.length;\n continue;\n }\n // Technically, an empty scalar is immediately after the last non-empty\n // node, but it's more useful to place it after any whitespace.\n st = before[++i];\n while (st?.type === 'space') {\n offset += st.source.length;\n st = before[++i];\n }\n break;\n }\n }\n return offset;\n}\n\nexports.emptyScalarPosition = emptyScalarPosition;\n","'use strict';\n\nvar Alias = require('../nodes/Alias.js');\nvar identity = require('../nodes/identity.js');\nvar composeCollection = require('./compose-collection.js');\nvar composeScalar = require('./compose-scalar.js');\nvar resolveEnd = require('./resolve-end.js');\nvar utilEmptyScalarPosition = require('./util-empty-scalar-position.js');\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n const atKey = ctx.atKey;\n const { spaceBefore, comment, anchor, tag } = props;\n let node;\n let isSrcToken = true;\n switch (token.type) {\n case 'alias':\n node = composeAlias(ctx, token, onError);\n if (anchor || tag)\n onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n break;\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'block-scalar':\n node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n case 'block-map':\n case 'block-seq':\n case 'flow-collection':\n node = composeCollection.composeCollection(CN, ctx, token, props, onError);\n if (anchor)\n node.anchor = anchor.source.substring(1);\n break;\n default: {\n const message = token.type === 'error'\n ? token.message\n : `Unsupported token (type: ${token.type})`;\n onError(token, 'UNEXPECTED_TOKEN', message);\n node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n isSrcToken = false;\n }\n }\n if (anchor && node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n if (atKey &&\n ctx.options.stringKeys &&\n (!identity.isScalar(node) ||\n typeof node.value !== 'string' ||\n (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n const msg = 'With stringKeys, all keys must be strings';\n onError(tag ?? token, 'NON_STRING_KEY', msg);\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n if (token.type === 'scalar' && token.source === '')\n node.comment = comment;\n else\n node.commentBefore = comment;\n }\n // @ts-expect-error Type checking misses meaning of isSrcToken\n if (ctx.options.keepSourceTokens && isSrcToken)\n node.srcToken = token;\n return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n const token = {\n type: 'scalar',\n offset: utilEmptyScalarPosition.emptyScalarPosition(offset, before, pos),\n indent: -1,\n source: ''\n };\n const node = composeScalar.composeScalar(ctx, token, tag, onError);\n if (anchor) {\n node.anchor = anchor.source.substring(1);\n if (node.anchor === '')\n onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n }\n if (spaceBefore)\n node.spaceBefore = true;\n if (comment) {\n node.comment = comment;\n node.range[2] = end;\n }\n return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n const alias = new Alias.Alias(source.substring(1));\n if (alias.source === '')\n onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n if (alias.source.endsWith(':'))\n onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n const valueEnd = offset + source.length;\n const re = resolveEnd.resolveEnd(end, valueEnd, options.strict, onError);\n alias.range = [offset, valueEnd, re.offset];\n if (re.comment)\n alias.comment = re.comment;\n return alias;\n}\n\nexports.composeEmptyNode = composeEmptyNode;\nexports.composeNode = composeNode;\n","'use strict';\n\nvar Document = require('../doc/Document.js');\nvar composeNode = require('./compose-node.js');\nvar resolveEnd = require('./resolve-end.js');\nvar resolveProps = require('./resolve-props.js');\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n const opts = Object.assign({ _directives: directives }, options);\n const doc = new Document.Document(undefined, opts);\n const ctx = {\n atKey: false,\n atRoot: true,\n directives: doc.directives,\n options: doc.options,\n schema: doc.schema\n };\n const props = resolveProps.resolveProps(start, {\n indicator: 'doc-start',\n next: value ?? end?.[0],\n offset,\n onError,\n parentIndent: 0,\n startOnNewline: true\n });\n if (props.found) {\n doc.directives.docStart = true;\n if (value &&\n (value.type === 'block-map' || value.type === 'block-seq') &&\n !props.hasNewline)\n onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n }\n // @ts-expect-error If Contents is set, let's trust the user\n doc.contents = value\n ? composeNode.composeNode(ctx, value, props, onError)\n : composeNode.composeEmptyNode(ctx, props.end, start, null, props, onError);\n const contentEnd = doc.contents.range[2];\n const re = resolveEnd.resolveEnd(end, contentEnd, false, onError);\n if (re.comment)\n doc.comment = re.comment;\n doc.range = [offset, contentEnd, re.offset];\n return doc;\n}\n\nexports.composeDoc = composeDoc;\n","'use strict';\n\nvar node_process = require('process');\nvar directives = require('../doc/directives.js');\nvar Document = require('../doc/Document.js');\nvar errors = require('../errors.js');\nvar identity = require('../nodes/identity.js');\nvar composeDoc = require('./compose-doc.js');\nvar resolveEnd = require('./resolve-end.js');\n\nfunction getErrorPos(src) {\n if (typeof src === 'number')\n return [src, src + 1];\n if (Array.isArray(src))\n return src.length === 2 ? src : [src[0], src[1]];\n const { offset, source } = src;\n return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n let comment = '';\n let atComment = false;\n let afterEmptyLine = false;\n for (let i = 0; i < prelude.length; ++i) {\n const source = prelude[i];\n switch (source[0]) {\n case '#':\n comment +=\n (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n (source.substring(1) || ' ');\n atComment = true;\n afterEmptyLine = false;\n break;\n case '%':\n if (prelude[i + 1]?.[0] !== '#')\n i += 1;\n atComment = false;\n break;\n default:\n // This may be wrong after doc-end, but in that case it doesn't matter\n if (!atComment)\n afterEmptyLine = true;\n atComment = false;\n }\n }\n return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n constructor(options = {}) {\n this.doc = null;\n this.atDirectives = false;\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n this.onError = (source, code, message, warning) => {\n const pos = getErrorPos(source);\n if (warning)\n this.warnings.push(new errors.YAMLWarning(pos, code, message));\n else\n this.errors.push(new errors.YAMLParseError(pos, code, message));\n };\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.directives = new directives.Directives({ version: options.version || '1.2' });\n this.options = options;\n }\n decorate(doc, afterDoc) {\n const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n //console.log({ dc: doc.comment, prelude, comment })\n if (comment) {\n const dc = doc.contents;\n if (afterDoc) {\n doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n }\n else if (afterEmptyLine || doc.directives.docStart || !dc) {\n doc.commentBefore = comment;\n }\n else if (identity.isCollection(dc) && !dc.flow && dc.items.length > 0) {\n let it = dc.items[0];\n if (identity.isPair(it))\n it = it.key;\n const cb = it.commentBefore;\n it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n else {\n const cb = dc.commentBefore;\n dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n }\n }\n if (afterDoc) {\n Array.prototype.push.apply(doc.errors, this.errors);\n Array.prototype.push.apply(doc.warnings, this.warnings);\n }\n else {\n doc.errors = this.errors;\n doc.warnings = this.warnings;\n }\n this.prelude = [];\n this.errors = [];\n this.warnings = [];\n }\n /**\n * Current stream status information.\n *\n * Mostly useful at the end of input for an empty stream.\n */\n streamInfo() {\n return {\n comment: parsePrelude(this.prelude).comment,\n directives: this.directives,\n errors: this.errors,\n warnings: this.warnings\n };\n }\n /**\n * Compose tokens into documents.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *compose(tokens, forceDoc = false, endOffset = -1) {\n for (const token of tokens)\n yield* this.next(token);\n yield* this.end(forceDoc, endOffset);\n }\n /** Advance the composer by one CST token. */\n *next(token) {\n if (node_process.env.LOG_STREAM)\n console.dir(token, { depth: null });\n switch (token.type) {\n case 'directive':\n this.directives.add(token.source, (offset, message, warning) => {\n const pos = getErrorPos(token);\n pos[0] += offset;\n this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n });\n this.prelude.push(token.source);\n this.atDirectives = true;\n break;\n case 'document': {\n const doc = composeDoc.composeDoc(this.options, this.directives, token, this.onError);\n if (this.atDirectives && !doc.directives.docStart)\n this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n this.decorate(doc, false);\n if (this.doc)\n yield this.doc;\n this.doc = doc;\n this.atDirectives = false;\n break;\n }\n case 'byte-order-mark':\n case 'space':\n break;\n case 'comment':\n case 'newline':\n this.prelude.push(token.source);\n break;\n case 'error': {\n const msg = token.source\n ? `${token.message}: ${JSON.stringify(token.source)}`\n : token.message;\n const error = new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n if (this.atDirectives || !this.doc)\n this.errors.push(error);\n else\n this.doc.errors.push(error);\n break;\n }\n case 'doc-end': {\n if (!this.doc) {\n const msg = 'Unexpected doc-end without preceding document';\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n break;\n }\n this.doc.directives.docEnd = true;\n const end = resolveEnd.resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n this.decorate(this.doc, true);\n if (end.comment) {\n const dc = this.doc.comment;\n this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n }\n this.doc.range[2] = end.offset;\n break;\n }\n default:\n this.errors.push(new errors.YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n }\n }\n /**\n * Call at end of input to yield any remaining document.\n *\n * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n */\n *end(forceDoc = false, endOffset = -1) {\n if (this.doc) {\n this.decorate(this.doc, true);\n yield this.doc;\n this.doc = null;\n }\n else if (forceDoc) {\n const opts = Object.assign({ _directives: this.directives }, this.options);\n const doc = new Document.Document(undefined, opts);\n if (this.atDirectives)\n this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n doc.range = [0, endOffset, endOffset];\n this.decorate(doc, false);\n yield doc;\n }\n }\n}\n\nexports.Composer = Composer;\n","'use strict';\n\nvar resolveBlockScalar = require('../compose/resolve-block-scalar.js');\nvar resolveFlowScalar = require('../compose/resolve-flow-scalar.js');\nvar errors = require('../errors.js');\nvar stringifyString = require('../stringify/stringifyString.js');\n\nfunction resolveAsScalar(token, strict = true, onError) {\n if (token) {\n const _onError = (pos, code, message) => {\n const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n if (onError)\n onError(offset, code, message);\n else\n throw new errors.YAMLParseError([offset, offset + 1], code, message);\n };\n switch (token.type) {\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return resolveFlowScalar.resolveFlowScalar(token, strict, _onError);\n case 'block-scalar':\n return resolveBlockScalar.resolveBlockScalar({ options: { strict } }, token, _onError);\n }\n }\n return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey,\n indent: indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n const end = context.end ?? [\n { type: 'newline', offset: -1, indent, source: '\\n' }\n ];\n switch (source[0]) {\n case '|':\n case '>': {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, end))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n return { type: 'block-scalar', offset, indent, props, source: body };\n }\n case '\"':\n return { type: 'double-quoted-scalar', offset, indent, source, end };\n case \"'\":\n return { type: 'single-quoted-scalar', offset, indent, source, end };\n default:\n return { type: 'scalar', offset, indent, source, end };\n }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n let indent = 'indent' in token ? token.indent : null;\n if (afterKey && typeof indent === 'number')\n indent += 2;\n if (!type)\n switch (token.type) {\n case 'single-quoted-scalar':\n type = 'QUOTE_SINGLE';\n break;\n case 'double-quoted-scalar':\n type = 'QUOTE_DOUBLE';\n break;\n case 'block-scalar': {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n break;\n }\n default:\n type = 'PLAIN';\n }\n const source = stringifyString.stringifyString({ type, value }, {\n implicitKey: implicitKey || indent === null,\n indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n inFlow,\n options: { blockQuote: true, lineWidth: -1 }\n });\n switch (source[0]) {\n case '|':\n case '>':\n setBlockScalarValue(token, source);\n break;\n case '\"':\n setFlowScalarValue(token, source, 'double-quoted-scalar');\n break;\n case \"'\":\n setFlowScalarValue(token, source, 'single-quoted-scalar');\n break;\n default:\n setFlowScalarValue(token, source, 'scalar');\n }\n}\nfunction setBlockScalarValue(token, source) {\n const he = source.indexOf('\\n');\n const head = source.substring(0, he);\n const body = source.substring(he + 1) + '\\n';\n if (token.type === 'block-scalar') {\n const header = token.props[0];\n if (header.type !== 'block-scalar-header')\n throw new Error('Invalid block scalar header');\n header.source = head;\n token.source = body;\n }\n else {\n const { offset } = token;\n const indent = 'indent' in token ? token.indent : -1;\n const props = [\n { type: 'block-scalar-header', offset, indent, source: head }\n ];\n if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n if (end)\n for (const st of end)\n switch (st.type) {\n case 'space':\n case 'comment':\n props.push(st);\n break;\n case 'newline':\n props.push(st);\n return true;\n }\n return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n switch (token.type) {\n case 'scalar':\n case 'double-quoted-scalar':\n case 'single-quoted-scalar':\n token.type = type;\n token.source = source;\n break;\n case 'block-scalar': {\n const end = token.props.slice(1);\n let oa = source.length;\n if (token.props[0].type === 'block-scalar-header')\n oa -= token.props[0].source.length;\n for (const tok of end)\n tok.offset += oa;\n delete token.props;\n Object.assign(token, { type, source, end });\n break;\n }\n case 'block-map':\n case 'block-seq': {\n const offset = token.offset + source.length;\n const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n delete token.items;\n Object.assign(token, { type, source, end: [nl] });\n break;\n }\n default: {\n const indent = 'indent' in token ? token.indent : -1;\n const end = 'end' in token && Array.isArray(token.end)\n ? token.end.filter(st => st.type === 'space' ||\n st.type === 'comment' ||\n st.type === 'newline')\n : [];\n for (const key of Object.keys(token))\n if (key !== 'type' && key !== 'offset')\n delete token[key];\n Object.assign(token, { type, indent, source, end });\n }\n }\n}\n\nexports.createScalarToken = createScalarToken;\nexports.resolveAsScalar = resolveAsScalar;\nexports.setScalarValue = setScalarValue;\n","'use strict';\n\n/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n switch (token.type) {\n case 'block-scalar': {\n let res = '';\n for (const tok of token.props)\n res += stringifyToken(tok);\n return res + token.source;\n }\n case 'block-map':\n case 'block-seq': {\n let res = '';\n for (const item of token.items)\n res += stringifyItem(item);\n return res;\n }\n case 'flow-collection': {\n let res = token.start.source;\n for (const item of token.items)\n res += stringifyItem(item);\n for (const st of token.end)\n res += st.source;\n return res;\n }\n case 'document': {\n let res = stringifyItem(token);\n if (token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n default: {\n let res = token.source;\n if ('end' in token && token.end)\n for (const st of token.end)\n res += st.source;\n return res;\n }\n }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n let res = '';\n for (const st of start)\n res += st.source;\n if (key)\n res += stringifyToken(key);\n if (sep)\n for (const st of sep)\n res += st.source;\n if (value)\n res += stringifyToken(value);\n return res;\n}\n\nexports.stringify = stringify;\n","'use strict';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n * - `item`: The current item, which included the following members:\n * - `start: SourceToken[]` – Source tokens before the key or value,\n * possibly including its anchor or tag.\n * - `key?: Token | null` – Set for pair values. May then be `null`, if\n * the key before the `:` separator is empty.\n * - `sep?: SourceToken[]` – Source tokens between the key and the value,\n * which should include the `:` map value indicator if `value` is set.\n * - `value?: Token` – The value of a sequence item, or of a map pair.\n * - `path`: The steps from the root to the current node, as an array of\n * `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n * - `undefined` (default): Do nothing and continue\n * - `visit.SKIP`: Do not visit the children of this token, continue with\n * next sibling\n * - `visit.BREAK`: Terminate traversal completely\n * - `visit.REMOVE`: Remove the current item, then continue with the next one\n * - `number`: Set the index of the next step. This is useful especially if\n * the index of the current token has changed.\n * - `function`: Define the next visitor for this item. After the original\n * visitor is called on item entry, next visitors are called after handling\n * a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n if ('type' in cst && cst.type === 'document')\n cst = { start: cst.start, value: cst.value };\n _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n let item = cst;\n for (const [field, index] of path) {\n const tok = item?.[field];\n if (tok && 'items' in tok) {\n item = tok.items[index];\n }\n else\n return undefined;\n }\n return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n const parent = visit.itemAtPath(cst, path.slice(0, -1));\n const field = path[path.length - 1][0];\n const coll = parent?.[field];\n if (coll && 'items' in coll)\n return coll;\n throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n let ctrl = visitor(item, path);\n if (typeof ctrl === 'symbol')\n return ctrl;\n for (const field of ['key', 'value']) {\n const token = item[field];\n if (token && 'items' in token) {\n for (let i = 0; i < token.items.length; ++i) {\n const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n if (typeof ci === 'number')\n i = ci - 1;\n else if (ci === BREAK)\n return BREAK;\n else if (ci === REMOVE) {\n token.items.splice(i, 1);\n i -= 1;\n }\n }\n if (typeof ctrl === 'function' && field === 'key')\n ctrl = ctrl(item, path);\n }\n }\n return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexports.visit = visit;\n","'use strict';\n\nvar cstScalar = require('./cst-scalar.js');\nvar cstStringify = require('./cst-stringify.js');\nvar cstVisit = require('./cst-visit.js');\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n (token.type === 'scalar' ||\n token.type === 'single-quoted-scalar' ||\n token.type === 'double-quoted-scalar' ||\n token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n switch (token) {\n case BOM:\n return '<BOM>';\n case DOCUMENT:\n return '<DOC>';\n case FLOW_END:\n return '<FLOW_END>';\n case SCALAR:\n return '<SCALAR>';\n default:\n return JSON.stringify(token);\n }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n switch (source) {\n case BOM:\n return 'byte-order-mark';\n case DOCUMENT:\n return 'doc-mode';\n case FLOW_END:\n return 'flow-error-end';\n case SCALAR:\n return 'scalar';\n case '---':\n return 'doc-start';\n case '...':\n return 'doc-end';\n case '':\n case '\\n':\n case '\\r\\n':\n return 'newline';\n case '-':\n return 'seq-item-ind';\n case '?':\n return 'explicit-key-ind';\n case ':':\n return 'map-value-ind';\n case '{':\n return 'flow-map-start';\n case '}':\n return 'flow-map-end';\n case '[':\n return 'flow-seq-start';\n case ']':\n return 'flow-seq-end';\n case ',':\n return 'comma';\n }\n switch (source[0]) {\n case ' ':\n case '\\t':\n return 'space';\n case '#':\n return 'comment';\n case '%':\n return 'directive-line';\n case '*':\n return 'alias';\n case '&':\n return 'anchor';\n case '!':\n return 'tag';\n case \"'\":\n return 'single-quoted-scalar';\n case '\"':\n return 'double-quoted-scalar';\n case '|':\n case '>':\n return 'block-scalar-header';\n }\n return null;\n}\n\nexports.createScalarToken = cstScalar.createScalarToken;\nexports.resolveAsScalar = cstScalar.resolveAsScalar;\nexports.setScalarValue = cstScalar.setScalarValue;\nexports.stringify = cstStringify.stringify;\nexports.visit = cstVisit.visit;\nexports.BOM = BOM;\nexports.DOCUMENT = DOCUMENT;\nexports.FLOW_END = FLOW_END;\nexports.SCALAR = SCALAR;\nexports.isCollection = isCollection;\nexports.isScalar = isScalar;\nexports.prettyToken = prettyToken;\nexports.tokenType = tokenType;\n","'use strict';\n\nvar cst = require('./cst.js');\n\n/*\nSTART -> stream\n\nstream\n directive -> line-end -> stream\n indent + line-end -> stream\n [else] -> line-start\n\nline-end\n comment -> line-end\n newline -> .\n input-end -> END\n\nline-start\n doc-start -> doc\n doc-end -> stream\n [else] -> indent -> block-start\n\nblock-start\n seq-item-start -> block-start\n explicit-key-start -> block-start\n map-value-start -> block-start\n [else] -> doc\n\ndoc\n line-end -> line-start\n spaces -> doc\n anchor -> doc\n tag -> doc\n flow-start -> flow -> doc\n flow-end -> error -> doc\n seq-item-start -> error -> doc\n explicit-key-start -> error -> doc\n map-value-start -> doc\n alias -> doc\n quote-start -> quoted-scalar -> doc\n block-scalar-header -> line-end -> block-scalar(min) -> line-start\n [else] -> plain-scalar(false, min) -> doc\n\nflow\n line-end -> flow\n spaces -> flow\n anchor -> flow\n tag -> flow\n flow-start -> flow -> flow\n flow-end -> .\n seq-item-start -> error -> flow\n explicit-key-start -> flow\n map-value-start -> flow\n alias -> flow\n quote-start -> quoted-scalar -> flow\n comma -> flow\n [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n quote-end -> .\n [else] -> quoted-scalar\n\nblock-scalar(min)\n newline + peek(indent < min) -> .\n [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n scalar-end(is-flow) -> .\n peek(newline + (indent < min)) -> .\n [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n switch (ch) {\n case undefined:\n case ' ':\n case '\\n':\n case '\\r':\n case '\\t':\n return true;\n default:\n return false;\n }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n constructor() {\n /**\n * Flag indicating whether the end of the current buffer marks the end of\n * all input\n */\n this.atEnd = false;\n /**\n * Explicit indent set in block scalar header, as an offset from the current\n * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n * explicitly set.\n */\n this.blockScalarIndent = -1;\n /**\n * Block scalars that include a + (keep) chomping indicator in their header\n * include trailing empty lines, which are otherwise excluded from the\n * scalar's contents.\n */\n this.blockScalarKeep = false;\n /** Current input */\n this.buffer = '';\n /**\n * Flag noting whether the map value indicator : can immediately follow this\n * node within a flow context.\n */\n this.flowKey = false;\n /** Count of surrounding flow collection levels. */\n this.flowLevel = 0;\n /**\n * Minimum level of indentation required for next lines to be parsed as a\n * part of the current scalar value.\n */\n this.indentNext = 0;\n /** Indentation level of the current line. */\n this.indentValue = 0;\n /** Position of the next \\n character. */\n this.lineEndPos = null;\n /** Stores the state of the lexer if reaching the end of incpomplete input */\n this.next = null;\n /** A pointer to `buffer`; the current position of the lexer. */\n this.pos = 0;\n }\n /**\n * Generate YAML tokens from the `source` string. If `incomplete`,\n * a part of the last line may be left as a buffer for the next call.\n *\n * @returns A generator of lexical tokens\n */\n *lex(source, incomplete = false) {\n if (source) {\n if (typeof source !== 'string')\n throw TypeError('source is not a string');\n this.buffer = this.buffer ? this.buffer + source : source;\n this.lineEndPos = null;\n }\n this.atEnd = !incomplete;\n let next = this.next ?? 'stream';\n while (next && (incomplete || this.hasChars(1)))\n next = yield* this.parseNext(next);\n }\n atLineEnd() {\n let i = this.pos;\n let ch = this.buffer[i];\n while (ch === ' ' || ch === '\\t')\n ch = this.buffer[++i];\n if (!ch || ch === '#' || ch === '\\n')\n return true;\n if (ch === '\\r')\n return this.buffer[i + 1] === '\\n';\n return false;\n }\n charAt(n) {\n return this.buffer[this.pos + n];\n }\n continueScalar(offset) {\n let ch = this.buffer[offset];\n if (this.indentNext > 0) {\n let indent = 0;\n while (ch === ' ')\n ch = this.buffer[++indent + offset];\n if (ch === '\\r') {\n const next = this.buffer[indent + offset + 1];\n if (next === '\\n' || (!next && !this.atEnd))\n return offset + indent + 1;\n }\n return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n ? offset + indent\n : -1;\n }\n if (ch === '-' || ch === '.') {\n const dt = this.buffer.substr(offset, 3);\n if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n return -1;\n }\n return offset;\n }\n getLine() {\n let end = this.lineEndPos;\n if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n end = this.buffer.indexOf('\\n', this.pos);\n this.lineEndPos = end;\n }\n if (end === -1)\n return this.atEnd ? this.buffer.substring(this.pos) : null;\n if (this.buffer[end - 1] === '\\r')\n end -= 1;\n return this.buffer.substring(this.pos, end);\n }\n hasChars(n) {\n return this.pos + n <= this.buffer.length;\n }\n setNext(state) {\n this.buffer = this.buffer.substring(this.pos);\n this.pos = 0;\n this.lineEndPos = null;\n this.next = state;\n return null;\n }\n peek(n) {\n return this.buffer.substr(this.pos, n);\n }\n *parseNext(next) {\n switch (next) {\n case 'stream':\n return yield* this.parseStream();\n case 'line-start':\n return yield* this.parseLineStart();\n case 'block-start':\n return yield* this.parseBlockStart();\n case 'doc':\n return yield* this.parseDocument();\n case 'flow':\n return yield* this.parseFlowCollection();\n case 'quoted-scalar':\n return yield* this.parseQuotedScalar();\n case 'block-scalar':\n return yield* this.parseBlockScalar();\n case 'plain-scalar':\n return yield* this.parsePlainScalar();\n }\n }\n *parseStream() {\n let line = this.getLine();\n if (line === null)\n return this.setNext('stream');\n if (line[0] === cst.BOM) {\n yield* this.pushCount(1);\n line = line.substring(1);\n }\n if (line[0] === '%') {\n let dirEnd = line.length;\n let cs = line.indexOf('#');\n while (cs !== -1) {\n const ch = line[cs - 1];\n if (ch === ' ' || ch === '\\t') {\n dirEnd = cs - 1;\n break;\n }\n else {\n cs = line.indexOf('#', cs + 1);\n }\n }\n while (true) {\n const ch = line[dirEnd - 1];\n if (ch === ' ' || ch === '\\t')\n dirEnd -= 1;\n else\n break;\n }\n const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n yield* this.pushCount(line.length - n); // possible comment\n this.pushNewline();\n return 'stream';\n }\n if (this.atLineEnd()) {\n const sp = yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - sp);\n yield* this.pushNewline();\n return 'stream';\n }\n yield cst.DOCUMENT;\n return yield* this.parseLineStart();\n }\n *parseLineStart() {\n const ch = this.charAt(0);\n if (!ch && !this.atEnd)\n return this.setNext('line-start');\n if (ch === '-' || ch === '.') {\n if (!this.atEnd && !this.hasChars(4))\n return this.setNext('line-start');\n const s = this.peek(3);\n if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n yield* this.pushCount(3);\n this.indentValue = 0;\n this.indentNext = 0;\n return s === '---' ? 'doc' : 'stream';\n }\n }\n this.indentValue = yield* this.pushSpaces(false);\n if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n this.indentNext = this.indentValue;\n return yield* this.parseBlockStart();\n }\n *parseBlockStart() {\n const [ch0, ch1] = this.peek(2);\n if (!ch1 && !this.atEnd)\n return this.setNext('block-start');\n if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n this.indentNext = this.indentValue + 1;\n this.indentValue += n;\n return yield* this.parseBlockStart();\n }\n return 'doc';\n }\n *parseDocument() {\n yield* this.pushSpaces(true);\n const line = this.getLine();\n if (line === null)\n return this.setNext('doc');\n let n = yield* this.pushIndicators();\n switch (line[n]) {\n case '#':\n yield* this.pushCount(line.length - n);\n // fallthrough\n case undefined:\n yield* this.pushNewline();\n return yield* this.parseLineStart();\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel = 1;\n return 'flow';\n case '}':\n case ']':\n // this is an error\n yield* this.pushCount(1);\n return 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'doc';\n case '\"':\n case \"'\":\n return yield* this.parseQuotedScalar();\n case '|':\n case '>':\n n += yield* this.parseBlockScalarHeader();\n n += yield* this.pushSpaces(true);\n yield* this.pushCount(line.length - n);\n yield* this.pushNewline();\n return yield* this.parseBlockScalar();\n default:\n return yield* this.parsePlainScalar();\n }\n }\n *parseFlowCollection() {\n let nl, sp;\n let indent = -1;\n do {\n nl = yield* this.pushNewline();\n if (nl > 0) {\n sp = yield* this.pushSpaces(false);\n this.indentValue = indent = sp;\n }\n else {\n sp = 0;\n }\n sp += yield* this.pushSpaces(true);\n } while (nl + sp > 0);\n const line = this.getLine();\n if (line === null)\n return this.setNext('flow');\n if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n (indent === 0 &&\n (line.startsWith('---') || line.startsWith('...')) &&\n isEmpty(line[3]))) {\n // Allowing for the terminal ] or } at the same (rather than greater)\n // indent level as the initial [ or { is technically invalid, but\n // failing here would be surprising to users.\n const atFlowEndMarker = indent === this.indentNext - 1 &&\n this.flowLevel === 1 &&\n (line[0] === ']' || line[0] === '}');\n if (!atFlowEndMarker) {\n // this is an error\n this.flowLevel = 0;\n yield cst.FLOW_END;\n return yield* this.parseLineStart();\n }\n }\n let n = 0;\n while (line[n] === ',') {\n n += yield* this.pushCount(1);\n n += yield* this.pushSpaces(true);\n this.flowKey = false;\n }\n n += yield* this.pushIndicators();\n switch (line[n]) {\n case undefined:\n return 'flow';\n case '#':\n yield* this.pushCount(line.length - n);\n return 'flow';\n case '{':\n case '[':\n yield* this.pushCount(1);\n this.flowKey = false;\n this.flowLevel += 1;\n return 'flow';\n case '}':\n case ']':\n yield* this.pushCount(1);\n this.flowKey = true;\n this.flowLevel -= 1;\n return this.flowLevel ? 'flow' : 'doc';\n case '*':\n yield* this.pushUntil(isNotAnchorChar);\n return 'flow';\n case '\"':\n case \"'\":\n this.flowKey = true;\n return yield* this.parseQuotedScalar();\n case ':': {\n const next = this.charAt(1);\n if (this.flowKey || isEmpty(next) || next === ',') {\n this.flowKey = false;\n yield* this.pushCount(1);\n yield* this.pushSpaces(true);\n return 'flow';\n }\n }\n // fallthrough\n default:\n this.flowKey = false;\n return yield* this.parsePlainScalar();\n }\n }\n *parseQuotedScalar() {\n const quote = this.charAt(0);\n let end = this.buffer.indexOf(quote, this.pos + 1);\n if (quote === \"'\") {\n while (end !== -1 && this.buffer[end + 1] === \"'\")\n end = this.buffer.indexOf(\"'\", end + 2);\n }\n else {\n // double-quote\n while (end !== -1) {\n let n = 0;\n while (this.buffer[end - 1 - n] === '\\\\')\n n += 1;\n if (n % 2 === 0)\n break;\n end = this.buffer.indexOf('\"', end + 1);\n }\n }\n // Only looking for newlines within the quotes\n const qb = this.buffer.substring(0, end);\n let nl = qb.indexOf('\\n', this.pos);\n if (nl !== -1) {\n while (nl !== -1) {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = qb.indexOf('\\n', cs);\n }\n if (nl !== -1) {\n // this is an error caused by an unexpected unindent\n end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n }\n }\n if (end === -1) {\n if (!this.atEnd)\n return this.setNext('quoted-scalar');\n end = this.buffer.length;\n }\n yield* this.pushToIndex(end + 1, false);\n return this.flowLevel ? 'flow' : 'doc';\n }\n *parseBlockScalarHeader() {\n this.blockScalarIndent = -1;\n this.blockScalarKeep = false;\n let i = this.pos;\n while (true) {\n const ch = this.buffer[++i];\n if (ch === '+')\n this.blockScalarKeep = true;\n else if (ch > '0' && ch <= '9')\n this.blockScalarIndent = Number(ch) - 1;\n else if (ch !== '-')\n break;\n }\n return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n }\n *parseBlockScalar() {\n let nl = this.pos - 1; // may be -1 if this.pos === 0\n let indent = 0;\n let ch;\n loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n switch (ch) {\n case ' ':\n indent += 1;\n break;\n case '\\n':\n nl = i;\n indent = 0;\n break;\n case '\\r': {\n const next = this.buffer[i + 1];\n if (!next && !this.atEnd)\n return this.setNext('block-scalar');\n if (next === '\\n')\n break;\n } // fallthrough\n default:\n break loop;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('block-scalar');\n if (indent >= this.indentNext) {\n if (this.blockScalarIndent === -1)\n this.indentNext = indent;\n else {\n this.indentNext =\n this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n }\n do {\n const cs = this.continueScalar(nl + 1);\n if (cs === -1)\n break;\n nl = this.buffer.indexOf('\\n', cs);\n } while (nl !== -1);\n if (nl === -1) {\n if (!this.atEnd)\n return this.setNext('block-scalar');\n nl = this.buffer.length;\n }\n }\n // Trailing insufficiently indented tabs are invalid.\n // To catch that during parsing, we include them in the block scalar value.\n let i = nl + 1;\n ch = this.buffer[i];\n while (ch === ' ')\n ch = this.buffer[++i];\n if (ch === '\\t') {\n while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n ch = this.buffer[++i];\n nl = i - 1;\n }\n else if (!this.blockScalarKeep) {\n do {\n let i = nl - 1;\n let ch = this.buffer[i];\n if (ch === '\\r')\n ch = this.buffer[--i];\n const lastChar = i; // Drop the line if last char not more indented\n while (ch === ' ')\n ch = this.buffer[--i];\n if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n nl = i;\n else\n break;\n } while (true);\n }\n yield cst.SCALAR;\n yield* this.pushToIndex(nl + 1, true);\n return yield* this.parseLineStart();\n }\n *parsePlainScalar() {\n const inFlow = this.flowLevel > 0;\n let end = this.pos - 1;\n let i = this.pos - 1;\n let ch;\n while ((ch = this.buffer[++i])) {\n if (ch === ':') {\n const next = this.buffer[i + 1];\n if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n break;\n end = i;\n }\n else if (isEmpty(ch)) {\n let next = this.buffer[i + 1];\n if (ch === '\\r') {\n if (next === '\\n') {\n i += 1;\n ch = '\\n';\n next = this.buffer[i + 1];\n }\n else\n end = i;\n }\n if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n break;\n if (ch === '\\n') {\n const cs = this.continueScalar(i + 1);\n if (cs === -1)\n break;\n i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n }\n }\n else {\n if (inFlow && flowIndicatorChars.has(ch))\n break;\n end = i;\n }\n }\n if (!ch && !this.atEnd)\n return this.setNext('plain-scalar');\n yield cst.SCALAR;\n yield* this.pushToIndex(end + 1, true);\n return inFlow ? 'flow' : 'doc';\n }\n *pushCount(n) {\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos += n;\n return n;\n }\n return 0;\n }\n *pushToIndex(i, allowEmpty) {\n const s = this.buffer.slice(this.pos, i);\n if (s) {\n yield s;\n this.pos += s.length;\n return s.length;\n }\n else if (allowEmpty)\n yield '';\n return 0;\n }\n *pushIndicators() {\n switch (this.charAt(0)) {\n case '!':\n return ((yield* this.pushTag()) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '&':\n return ((yield* this.pushUntil(isNotAnchorChar)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n case '-': // this is an error\n case '?': // this is an error outside flow collections\n case ':': {\n const inFlow = this.flowLevel > 0;\n const ch1 = this.charAt(1);\n if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n if (!inFlow)\n this.indentNext = this.indentValue + 1;\n else if (this.flowKey)\n this.flowKey = false;\n return ((yield* this.pushCount(1)) +\n (yield* this.pushSpaces(true)) +\n (yield* this.pushIndicators()));\n }\n }\n }\n return 0;\n }\n *pushTag() {\n if (this.charAt(1) === '<') {\n let i = this.pos + 2;\n let ch = this.buffer[i];\n while (!isEmpty(ch) && ch !== '>')\n ch = this.buffer[++i];\n return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n }\n else {\n let i = this.pos + 1;\n let ch = this.buffer[i];\n while (ch) {\n if (tagChars.has(ch))\n ch = this.buffer[++i];\n else if (ch === '%' &&\n hexDigits.has(this.buffer[i + 1]) &&\n hexDigits.has(this.buffer[i + 2])) {\n ch = this.buffer[(i += 3)];\n }\n else\n break;\n }\n return yield* this.pushToIndex(i, false);\n }\n }\n *pushNewline() {\n const ch = this.buffer[this.pos];\n if (ch === '\\n')\n return yield* this.pushCount(1);\n else if (ch === '\\r' && this.charAt(1) === '\\n')\n return yield* this.pushCount(2);\n else\n return 0;\n }\n *pushSpaces(allowTabs) {\n let i = this.pos - 1;\n let ch;\n do {\n ch = this.buffer[++i];\n } while (ch === ' ' || (allowTabs && ch === '\\t'));\n const n = i - this.pos;\n if (n > 0) {\n yield this.buffer.substr(this.pos, n);\n this.pos = i;\n }\n return n;\n }\n *pushUntil(test) {\n let i = this.pos;\n let ch = this.buffer[i];\n while (!test(ch))\n ch = this.buffer[++i];\n return yield* this.pushToIndex(i, false);\n }\n}\n\nexports.Lexer = Lexer;\n","'use strict';\n\n/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n constructor() {\n this.lineStarts = [];\n /**\n * Should be called in ascending order. Otherwise, call\n * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n */\n this.addNewLine = (offset) => this.lineStarts.push(offset);\n /**\n * Performs a binary search and returns the 1-indexed { line, col }\n * position of `offset`. If `line === 0`, `addNewLine` has never been\n * called or `offset` is before the first known newline.\n */\n this.linePos = (offset) => {\n let low = 0;\n let high = this.lineStarts.length;\n while (low < high) {\n const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n if (this.lineStarts[mid] < offset)\n low = mid + 1;\n else\n high = mid;\n }\n if (this.lineStarts[low] === offset)\n return { line: low + 1, col: 1 };\n if (low === 0)\n return { line: 0, col: offset };\n const start = this.lineStarts[low - 1];\n return { line: low, col: offset - start + 1 };\n };\n }\n}\n\nexports.LineCounter = LineCounter;\n","'use strict';\n\nvar node_process = require('process');\nvar cst = require('./cst.js');\nvar lexer = require('./lexer.js');\n\nfunction includesToken(list, type) {\n for (let i = 0; i < list.length; ++i)\n if (list[i].type === type)\n return true;\n return false;\n}\nfunction findNonEmptyIndex(list) {\n for (let i = 0; i < list.length; ++i) {\n switch (list[i].type) {\n case 'space':\n case 'comment':\n case 'newline':\n break;\n default:\n return i;\n }\n }\n return -1;\n}\nfunction isFlowToken(token) {\n switch (token?.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n case 'flow-collection':\n return true;\n default:\n return false;\n }\n}\nfunction getPrevProps(parent) {\n switch (parent.type) {\n case 'document':\n return parent.start;\n case 'block-map': {\n const it = parent.items[parent.items.length - 1];\n return it.sep ?? it.start;\n }\n case 'block-seq':\n return parent.items[parent.items.length - 1].start;\n /* istanbul ignore next should not happen */\n default:\n return [];\n }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n if (prev.length === 0)\n return [];\n let i = prev.length;\n loop: while (--i >= 0) {\n switch (prev[i].type) {\n case 'doc-start':\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n case 'newline':\n break loop;\n }\n }\n while (prev[++i]?.type === 'space') {\n /* loop */\n }\n return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n if (fc.start.type === 'flow-seq-start') {\n for (const it of fc.items) {\n if (it.sep &&\n !it.value &&\n !includesToken(it.start, 'explicit-key-ind') &&\n !includesToken(it.sep, 'map-value-ind')) {\n if (it.key)\n it.value = it.key;\n delete it.key;\n if (isFlowToken(it.value)) {\n if (it.value.end)\n Array.prototype.push.apply(it.value.end, it.sep);\n else\n it.value.end = it.sep;\n }\n else\n Array.prototype.push.apply(it.start, it.sep);\n delete it.sep;\n }\n }\n }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n * // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n * const parser = new Parser()\n * for (const lexeme of lexer.lex(source))\n * yield* parser.next(lexeme)\n * yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n * // token: Token\n * }\n * ```\n */\nclass Parser {\n /**\n * @param onNewLine - If defined, called separately with the start position of\n * each new line (in `parse()`, including the start of input).\n */\n constructor(onNewLine) {\n /** If true, space and sequence indicators count as indentation */\n this.atNewLine = true;\n /** If true, next token is a scalar value */\n this.atScalar = false;\n /** Current indentation level */\n this.indent = 0;\n /** Current offset since the start of parsing */\n this.offset = 0;\n /** On the same line with a block map key */\n this.onKeyLine = false;\n /** Top indicates the node that's currently being built */\n this.stack = [];\n /** The source of the current token, set in parse() */\n this.source = '';\n /** The type of the current token, set in parse() */\n this.type = '';\n // Must be defined after `next()`\n this.lexer = new lexer.Lexer();\n this.onNewLine = onNewLine;\n }\n /**\n * Parse `source` as a YAML stream.\n * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n *\n * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n *\n * @returns A generator of tokens representing each directive, document, and other structure.\n */\n *parse(source, incomplete = false) {\n if (this.onNewLine && this.offset === 0)\n this.onNewLine(0);\n for (const lexeme of this.lexer.lex(source, incomplete))\n yield* this.next(lexeme);\n if (!incomplete)\n yield* this.end();\n }\n /**\n * Advance the parser by the `source` of one lexical token.\n */\n *next(source) {\n this.source = source;\n if (node_process.env.LOG_TOKENS)\n console.log('|', cst.prettyToken(source));\n if (this.atScalar) {\n this.atScalar = false;\n yield* this.step();\n this.offset += source.length;\n return;\n }\n const type = cst.tokenType(source);\n if (!type) {\n const message = `Not a YAML token: ${source}`;\n yield* this.pop({ type: 'error', offset: this.offset, message, source });\n this.offset += source.length;\n }\n else if (type === 'scalar') {\n this.atNewLine = false;\n this.atScalar = true;\n this.type = 'scalar';\n }\n else {\n this.type = type;\n yield* this.step();\n switch (type) {\n case 'newline':\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine)\n this.onNewLine(this.offset + source.length);\n break;\n case 'space':\n if (this.atNewLine && source[0] === ' ')\n this.indent += source.length;\n break;\n case 'explicit-key-ind':\n case 'map-value-ind':\n case 'seq-item-ind':\n if (this.atNewLine)\n this.indent += source.length;\n break;\n case 'doc-mode':\n case 'flow-error-end':\n return;\n default:\n this.atNewLine = false;\n }\n this.offset += source.length;\n }\n }\n /** Call at end of input to push out any remaining constructions */\n *end() {\n while (this.stack.length > 0)\n yield* this.pop();\n }\n get sourceToken() {\n const st = {\n type: this.type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n return st;\n }\n *step() {\n const top = this.peek(1);\n if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n while (this.stack.length > 0)\n yield* this.pop();\n this.stack.push({\n type: 'doc-end',\n offset: this.offset,\n source: this.source\n });\n return;\n }\n if (!top)\n return yield* this.stream();\n switch (top.type) {\n case 'document':\n return yield* this.document(top);\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return yield* this.scalar(top);\n case 'block-scalar':\n return yield* this.blockScalar(top);\n case 'block-map':\n return yield* this.blockMap(top);\n case 'block-seq':\n return yield* this.blockSequence(top);\n case 'flow-collection':\n return yield* this.flowCollection(top);\n case 'doc-end':\n return yield* this.documentEnd(top);\n }\n /* istanbul ignore next should not happen */\n yield* this.pop();\n }\n peek(n) {\n return this.stack[this.stack.length - n];\n }\n *pop(error) {\n const token = error ?? this.stack.pop();\n /* istanbul ignore if should not happen */\n if (!token) {\n const message = 'Tried to pop an empty stack';\n yield { type: 'error', offset: this.offset, source: '', message };\n }\n else if (this.stack.length === 0) {\n yield token;\n }\n else {\n const top = this.peek(1);\n if (token.type === 'block-scalar') {\n // Block scalars use their parent rather than header indent\n token.indent = 'indent' in top ? top.indent : 0;\n }\n else if (token.type === 'flow-collection' && top.type === 'document') {\n // Ignore all indent for top-level flow collections\n token.indent = 0;\n }\n if (token.type === 'flow-collection')\n fixFlowSeqItems(token);\n switch (top.type) {\n case 'document':\n top.value = token;\n break;\n case 'block-scalar':\n top.props.push(token); // error\n break;\n case 'block-map': {\n const it = top.items[top.items.length - 1];\n if (it.value) {\n top.items.push({ start: [], key: token, sep: [] });\n this.onKeyLine = true;\n return;\n }\n else if (it.sep) {\n it.value = token;\n }\n else {\n Object.assign(it, { key: token, sep: [] });\n this.onKeyLine = !it.explicitKey;\n return;\n }\n break;\n }\n case 'block-seq': {\n const it = top.items[top.items.length - 1];\n if (it.value)\n top.items.push({ start: [], value: token });\n else\n it.value = token;\n break;\n }\n case 'flow-collection': {\n const it = top.items[top.items.length - 1];\n if (!it || it.value)\n top.items.push({ start: [], key: token, sep: [] });\n else if (it.sep)\n it.value = token;\n else\n Object.assign(it, { key: token, sep: [] });\n return;\n }\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.pop(token);\n }\n if ((top.type === 'document' ||\n top.type === 'block-map' ||\n top.type === 'block-seq') &&\n (token.type === 'block-map' || token.type === 'block-seq')) {\n const last = token.items[token.items.length - 1];\n if (last &&\n !last.sep &&\n !last.value &&\n last.start.length > 0 &&\n findNonEmptyIndex(last.start) === -1 &&\n (token.indent === 0 ||\n last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n if (top.type === 'document')\n top.end = last.start;\n else\n top.items.push({ start: last.start });\n token.items.splice(-1, 1);\n }\n }\n }\n }\n *stream() {\n switch (this.type) {\n case 'directive-line':\n yield { type: 'directive', offset: this.offset, source: this.source };\n return;\n case 'byte-order-mark':\n case 'space':\n case 'comment':\n case 'newline':\n yield this.sourceToken;\n return;\n case 'doc-mode':\n case 'doc-start': {\n const doc = {\n type: 'document',\n offset: this.offset,\n start: []\n };\n if (this.type === 'doc-start')\n doc.start.push(this.sourceToken);\n this.stack.push(doc);\n return;\n }\n }\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML stream`,\n source: this.source\n };\n }\n *document(doc) {\n if (doc.value)\n return yield* this.lineEnd(doc);\n switch (this.type) {\n case 'doc-start': {\n if (findNonEmptyIndex(doc.start) !== -1) {\n yield* this.pop();\n yield* this.step();\n }\n else\n doc.start.push(this.sourceToken);\n return;\n }\n case 'anchor':\n case 'tag':\n case 'space':\n case 'comment':\n case 'newline':\n doc.start.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(doc);\n if (bv)\n this.stack.push(bv);\n else {\n yield {\n type: 'error',\n offset: this.offset,\n message: `Unexpected ${this.type} token in YAML document`,\n source: this.source\n };\n }\n }\n *scalar(scalar) {\n if (this.type === 'map-value-ind') {\n const prev = getPrevProps(this.peek(2));\n const start = getFirstKeyStartProps(prev);\n let sep;\n if (scalar.end) {\n sep = scalar.end;\n sep.push(this.sourceToken);\n delete scalar.end;\n }\n else\n sep = [this.sourceToken];\n const map = {\n type: 'block-map',\n offset: scalar.offset,\n indent: scalar.indent,\n items: [{ start, key: scalar, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else\n yield* this.lineEnd(scalar);\n }\n *blockScalar(scalar) {\n switch (this.type) {\n case 'space':\n case 'comment':\n case 'newline':\n scalar.props.push(this.sourceToken);\n return;\n case 'scalar':\n scalar.source = this.source;\n // block-scalar source includes trailing newline\n this.atNewLine = true;\n this.indent = 0;\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n yield* this.pop();\n break;\n /* istanbul ignore next should not happen */\n default:\n yield* this.pop();\n yield* this.step();\n }\n }\n *blockMap(map) {\n const it = map.items[map.items.length - 1];\n // it.sep is true-ish if pair already has key or : separator\n switch (this.type) {\n case 'newline':\n this.onKeyLine = false;\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'space':\n case 'comment':\n if (it.value) {\n map.items.push({ start: [this.sourceToken] });\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n if (this.atIndentedComment(it.start, map.indent)) {\n const prev = map.items[map.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n map.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n }\n if (this.indent >= map.indent) {\n const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n const atNextItem = atMapIndent &&\n (it.sep || it.explicitKey) &&\n this.type !== 'seq-item-ind';\n // For empty nodes, assign newline-separated not indented empty tokens to following node\n let start = [];\n if (atNextItem && it.sep && !it.value) {\n const nl = [];\n for (let i = 0; i < it.sep.length; ++i) {\n const st = it.sep[i];\n switch (st.type) {\n case 'newline':\n nl.push(i);\n break;\n case 'space':\n break;\n case 'comment':\n if (st.indent > map.indent)\n nl.length = 0;\n break;\n default:\n nl.length = 0;\n }\n }\n if (nl.length >= 2)\n start = it.sep.splice(nl[1]);\n }\n switch (this.type) {\n case 'anchor':\n case 'tag':\n if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n it.sep.push(this.sourceToken);\n }\n else {\n it.start.push(this.sourceToken);\n }\n return;\n case 'explicit-key-ind':\n if (!it.sep && !it.explicitKey) {\n it.start.push(this.sourceToken);\n it.explicitKey = true;\n }\n else if (atNextItem || it.value) {\n start.push(this.sourceToken);\n map.items.push({ start, explicitKey: true });\n }\n else {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken], explicitKey: true }]\n });\n }\n this.onKeyLine = true;\n return;\n case 'map-value-ind':\n if (it.explicitKey) {\n if (!it.sep) {\n if (includesToken(it.start, 'newline')) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else {\n const start = getFirstKeyStartProps(it.start);\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n }\n else if (it.value) {\n map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n });\n }\n else if (isFlowToken(it.key) &&\n !includesToken(it.sep, 'newline')) {\n const start = getFirstKeyStartProps(it.start);\n const key = it.key;\n const sep = it.sep;\n sep.push(this.sourceToken);\n // @ts-expect-error type guard is wrong here\n delete it.key;\n // @ts-expect-error type guard is wrong here\n delete it.sep;\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key, sep }]\n });\n }\n else if (start.length > 0) {\n // Not actually at next item\n it.sep = it.sep.concat(start, this.sourceToken);\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n else {\n if (!it.sep) {\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n }\n else if (it.value || atNextItem) {\n map.items.push({ start, key: null, sep: [this.sourceToken] });\n }\n else if (includesToken(it.sep, 'map-value-ind')) {\n this.stack.push({\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [], key: null, sep: [this.sourceToken] }]\n });\n }\n else {\n it.sep.push(this.sourceToken);\n }\n }\n this.onKeyLine = true;\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (atNextItem || it.value) {\n map.items.push({ start, key: fs, sep: [] });\n this.onKeyLine = true;\n }\n else if (it.sep) {\n this.stack.push(fs);\n }\n else {\n Object.assign(it, { key: fs, sep: [] });\n this.onKeyLine = true;\n }\n return;\n }\n default: {\n const bv = this.startBlockValue(map);\n if (bv) {\n if (bv.type === 'block-seq') {\n if (!it.explicitKey &&\n it.sep &&\n !includesToken(it.sep, 'newline')) {\n yield* this.pop({\n type: 'error',\n offset: this.offset,\n message: 'Unexpected block-seq-ind on same line with key',\n source: this.source\n });\n return;\n }\n }\n else if (atMapIndent) {\n map.items.push({ start });\n }\n this.stack.push(bv);\n return;\n }\n }\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *blockSequence(seq) {\n const it = seq.items[seq.items.length - 1];\n switch (this.type) {\n case 'newline':\n if (it.value) {\n const end = 'end' in it.value ? it.value.end : undefined;\n const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n if (last?.type === 'comment')\n end?.push(this.sourceToken);\n else\n seq.items.push({ start: [this.sourceToken] });\n }\n else\n it.start.push(this.sourceToken);\n return;\n case 'space':\n case 'comment':\n if (it.value)\n seq.items.push({ start: [this.sourceToken] });\n else {\n if (this.atIndentedComment(it.start, seq.indent)) {\n const prev = seq.items[seq.items.length - 2];\n const end = prev?.value?.end;\n if (Array.isArray(end)) {\n Array.prototype.push.apply(end, it.start);\n end.push(this.sourceToken);\n seq.items.pop();\n return;\n }\n }\n it.start.push(this.sourceToken);\n }\n return;\n case 'anchor':\n case 'tag':\n if (it.value || this.indent <= seq.indent)\n break;\n it.start.push(this.sourceToken);\n return;\n case 'seq-item-ind':\n if (this.indent !== seq.indent)\n break;\n if (it.value || includesToken(it.start, 'seq-item-ind'))\n seq.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n }\n if (this.indent > seq.indent) {\n const bv = this.startBlockValue(seq);\n if (bv) {\n this.stack.push(bv);\n return;\n }\n }\n yield* this.pop();\n yield* this.step();\n }\n *flowCollection(fc) {\n const it = fc.items[fc.items.length - 1];\n if (this.type === 'flow-error-end') {\n let top;\n do {\n yield* this.pop();\n top = this.peek(1);\n } while (top?.type === 'flow-collection');\n }\n else if (fc.end.length === 0) {\n switch (this.type) {\n case 'comma':\n case 'explicit-key-ind':\n if (!it || it.sep)\n fc.items.push({ start: [this.sourceToken] });\n else\n it.start.push(this.sourceToken);\n return;\n case 'map-value-ind':\n if (!it || it.value)\n fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n Object.assign(it, { key: null, sep: [this.sourceToken] });\n return;\n case 'space':\n case 'comment':\n case 'newline':\n case 'anchor':\n case 'tag':\n if (!it || it.value)\n fc.items.push({ start: [this.sourceToken] });\n else if (it.sep)\n it.sep.push(this.sourceToken);\n else\n it.start.push(this.sourceToken);\n return;\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar': {\n const fs = this.flowScalar(this.type);\n if (!it || it.value)\n fc.items.push({ start: [], key: fs, sep: [] });\n else if (it.sep)\n this.stack.push(fs);\n else\n Object.assign(it, { key: fs, sep: [] });\n return;\n }\n case 'flow-map-end':\n case 'flow-seq-end':\n fc.end.push(this.sourceToken);\n return;\n }\n const bv = this.startBlockValue(fc);\n /* istanbul ignore else should not happen */\n if (bv)\n this.stack.push(bv);\n else {\n yield* this.pop();\n yield* this.step();\n }\n }\n else {\n const parent = this.peek(2);\n if (parent.type === 'block-map' &&\n ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n (this.type === 'newline' &&\n !parent.items[parent.items.length - 1].sep))) {\n yield* this.pop();\n yield* this.step();\n }\n else if (this.type === 'map-value-ind' &&\n parent.type !== 'flow-collection') {\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n fixFlowSeqItems(fc);\n const sep = fc.end.splice(1, fc.end.length);\n sep.push(this.sourceToken);\n const map = {\n type: 'block-map',\n offset: fc.offset,\n indent: fc.indent,\n items: [{ start, key: fc, sep }]\n };\n this.onKeyLine = true;\n this.stack[this.stack.length - 1] = map;\n }\n else {\n yield* this.lineEnd(fc);\n }\n }\n }\n flowScalar(type) {\n if (this.onNewLine) {\n let nl = this.source.indexOf('\\n') + 1;\n while (nl !== 0) {\n this.onNewLine(this.offset + nl);\n nl = this.source.indexOf('\\n', nl) + 1;\n }\n }\n return {\n type,\n offset: this.offset,\n indent: this.indent,\n source: this.source\n };\n }\n startBlockValue(parent) {\n switch (this.type) {\n case 'alias':\n case 'scalar':\n case 'single-quoted-scalar':\n case 'double-quoted-scalar':\n return this.flowScalar(this.type);\n case 'block-scalar-header':\n return {\n type: 'block-scalar',\n offset: this.offset,\n indent: this.indent,\n props: [this.sourceToken],\n source: ''\n };\n case 'flow-map-start':\n case 'flow-seq-start':\n return {\n type: 'flow-collection',\n offset: this.offset,\n indent: this.indent,\n start: this.sourceToken,\n items: [],\n end: []\n };\n case 'seq-item-ind':\n return {\n type: 'block-seq',\n offset: this.offset,\n indent: this.indent,\n items: [{ start: [this.sourceToken] }]\n };\n case 'explicit-key-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n start.push(this.sourceToken);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, explicitKey: true }]\n };\n }\n case 'map-value-ind': {\n this.onKeyLine = true;\n const prev = getPrevProps(parent);\n const start = getFirstKeyStartProps(prev);\n return {\n type: 'block-map',\n offset: this.offset,\n indent: this.indent,\n items: [{ start, key: null, sep: [this.sourceToken] }]\n };\n }\n }\n return null;\n }\n atIndentedComment(start, indent) {\n if (this.type !== 'comment')\n return false;\n if (this.indent <= indent)\n return false;\n return start.every(st => st.type === 'newline' || st.type === 'space');\n }\n *documentEnd(docEnd) {\n if (this.type !== 'doc-mode') {\n if (docEnd.end)\n docEnd.end.push(this.sourceToken);\n else\n docEnd.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n *lineEnd(token) {\n switch (this.type) {\n case 'comma':\n case 'doc-start':\n case 'doc-end':\n case 'flow-seq-end':\n case 'flow-map-end':\n case 'map-value-ind':\n yield* this.pop();\n yield* this.step();\n break;\n case 'newline':\n this.onKeyLine = false;\n // fallthrough\n case 'space':\n case 'comment':\n default:\n // all other values are errors\n if (token.end)\n token.end.push(this.sourceToken);\n else\n token.end = [this.sourceToken];\n if (this.type === 'newline')\n yield* this.pop();\n }\n }\n}\n\nexports.Parser = Parser;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar errors = require('./errors.js');\nvar log = require('./log.js');\nvar identity = require('./nodes/identity.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\n\nfunction parseOptions(options) {\n const prettyErrors = options.prettyErrors !== false;\n const lineCounter$1 = options.lineCounter || (prettyErrors && new lineCounter.LineCounter()) || null;\n return { lineCounter: lineCounter$1, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n * EmptyStream and contain additional stream information. In\n * TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n const docs = Array.from(composer$1.compose(parser$1.parse(source)));\n if (prettyErrors && lineCounter)\n for (const doc of docs) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n if (docs.length > 0)\n return docs;\n return Object.assign([], { empty: true }, composer$1.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n const { lineCounter, prettyErrors } = parseOptions(options);\n const parser$1 = new parser.Parser(lineCounter?.addNewLine);\n const composer$1 = new composer.Composer(options);\n // `doc` is always set by compose.end(true) at the very latest\n let doc = null;\n for (const _doc of composer$1.compose(parser$1.parse(source), true, source.length)) {\n if (!doc)\n doc = _doc;\n else if (doc.options.logLevel !== 'silent') {\n doc.errors.push(new errors.YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n break;\n }\n }\n if (prettyErrors && lineCounter) {\n doc.errors.forEach(errors.prettifyError(source, lineCounter));\n doc.warnings.forEach(errors.prettifyError(source, lineCounter));\n }\n return doc;\n}\nfunction parse(src, reviver, options) {\n let _reviver = undefined;\n if (typeof reviver === 'function') {\n _reviver = reviver;\n }\n else if (options === undefined && reviver && typeof reviver === 'object') {\n options = reviver;\n }\n const doc = parseDocument(src, options);\n if (!doc)\n return null;\n doc.warnings.forEach(warning => log.warn(doc.options.logLevel, warning));\n if (doc.errors.length > 0) {\n if (doc.options.logLevel !== 'silent')\n throw doc.errors[0];\n else\n doc.errors = [];\n }\n return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n let _replacer = null;\n if (typeof replacer === 'function' || Array.isArray(replacer)) {\n _replacer = replacer;\n }\n else if (options === undefined && replacer) {\n options = replacer;\n }\n if (typeof options === 'string')\n options = options.length;\n if (typeof options === 'number') {\n const indent = Math.round(options);\n options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n }\n if (value === undefined) {\n const { keepUndefined } = options ?? replacer ?? {};\n if (!keepUndefined)\n return undefined;\n }\n if (identity.isDocument(value) && !_replacer)\n return value.toString(options);\n return new Document.Document(value, _replacer, options).toString(options);\n}\n\nexports.parse = parse;\nexports.parseAllDocuments = parseAllDocuments;\nexports.parseDocument = parseDocument;\nexports.stringify = stringify;\n","'use strict';\n\nvar composer = require('./compose/composer.js');\nvar Document = require('./doc/Document.js');\nvar Schema = require('./schema/Schema.js');\nvar errors = require('./errors.js');\nvar Alias = require('./nodes/Alias.js');\nvar identity = require('./nodes/identity.js');\nvar Pair = require('./nodes/Pair.js');\nvar Scalar = require('./nodes/Scalar.js');\nvar YAMLMap = require('./nodes/YAMLMap.js');\nvar YAMLSeq = require('./nodes/YAMLSeq.js');\nvar cst = require('./parse/cst.js');\nvar lexer = require('./parse/lexer.js');\nvar lineCounter = require('./parse/line-counter.js');\nvar parser = require('./parse/parser.js');\nvar publicApi = require('./public-api.js');\nvar visit = require('./visit.js');\n\n\n\nexports.Composer = composer.Composer;\nexports.Document = Document.Document;\nexports.Schema = Schema.Schema;\nexports.YAMLError = errors.YAMLError;\nexports.YAMLParseError = errors.YAMLParseError;\nexports.YAMLWarning = errors.YAMLWarning;\nexports.Alias = Alias.Alias;\nexports.isAlias = identity.isAlias;\nexports.isCollection = identity.isCollection;\nexports.isDocument = identity.isDocument;\nexports.isMap = identity.isMap;\nexports.isNode = identity.isNode;\nexports.isPair = identity.isPair;\nexports.isScalar = identity.isScalar;\nexports.isSeq = identity.isSeq;\nexports.Pair = Pair.Pair;\nexports.Scalar = Scalar.Scalar;\nexports.YAMLMap = YAMLMap.YAMLMap;\nexports.YAMLSeq = YAMLSeq.YAMLSeq;\nexports.CST = cst;\nexports.Lexer = lexer.Lexer;\nexports.LineCounter = lineCounter.LineCounter;\nexports.Parser = parser.Parser;\nexports.parse = publicApi.parse;\nexports.parseAllDocuments = publicApi.parseAllDocuments;\nexports.parseDocument = publicApi.parseDocument;\nexports.stringify = publicApi.stringify;\nexports.visit = visit.visit;\nexports.visitAsync = visit.visitAsync;\n","/**\n * Frontmatter — YAML frontmatter parsing, serialization, and CRUD commands\n *\n * Uses the `yaml` npm package instead of a hand-rolled parser.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\n\nimport { safeReadFile } from './core.js';\nimport type {\n CmdResult,\n FrontmatterData,\n FrontmatterValue,\n FrontmatterValidationResult,\n FrontmatterSchema,\n} from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Parsing engine ───────────────────────────────────────────────────────────\n\n/**\n * Extract YAML frontmatter from markdown content into a typed object.\n */\nexport function extractFrontmatter(content: string): FrontmatterData {\n const match = content.match(/^---\\n([\\s\\S]+?)\\n---/);\n if (!match) return {};\n try {\n const parsed = YAML.parse(match[1]);\n return (parsed && typeof parsed === 'object' && !Array.isArray(parsed))\n ? parsed as FrontmatterData\n : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Reconstruct YAML frontmatter string from an object.\n */\nexport function reconstructFrontmatter(obj: FrontmatterData): string {\n // Filter out null/undefined values\n const cleaned: FrontmatterData = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined) {\n cleaned[key] = value;\n }\n }\n\n return YAML.stringify(cleaned, {\n lineWidth: 0, // Don't wrap long lines\n defaultKeyType: 'PLAIN',\n defaultStringType: 'PLAIN',\n }).trimEnd();\n}\n\n/**\n * Replace or insert frontmatter in markdown content.\n */\nexport function spliceFrontmatter(content: string, newObj: FrontmatterData): string {\n const yamlStr = reconstructFrontmatter(newObj);\n const match = content.match(/^---\\n[\\s\\S]+?\\n---/);\n if (match) {\n return `---\\n${yamlStr}\\n---` + content.slice(match[0].length);\n }\n return `---\\n${yamlStr}\\n---\\n\\n` + content;\n}\n\ninterface MustHaveItem {\n [key: string]: string | number | string[];\n}\n\n/**\n * Parse a specific block from must_haves in frontmatter.\n * With the yaml package, this is just object traversal.\n */\nexport function parseMustHavesBlock(content: string, blockName: string): (string | MustHaveItem)[] {\n const fm = extractFrontmatter(content);\n const mustHaves = fm.must_haves as FrontmatterData | undefined;\n if (!mustHaves || typeof mustHaves !== 'object') return [];\n const block = mustHaves[blockName];\n if (!Array.isArray(block)) return [];\n return block as (string | MustHaveItem)[];\n}\n\n// ─── Frontmatter schema validation ──────────────────────────────────────────\n\nexport const FRONTMATTER_SCHEMAS: Record<string, FrontmatterSchema> = {\n plan: {\n required: ['phase', 'plan', 'type', 'wave', 'depends_on', 'files_modified', 'autonomous', 'must_haves'],\n },\n summary: {\n required: ['phase', 'plan', 'subsystem', 'tags', 'duration', 'completed'],\n },\n verification: {\n required: ['phase', 'verified', 'status', 'score'],\n },\n review: {\n required: ['status', 'critical_count', 'warning_count'],\n },\n drift: {\n required: ['status', 'checked', 'total_items', 'critical_count', 'warning_count', 'info_count'],\n },\n};\n\n// ─── Frontmatter CRUD commands ──────────────────────────────────────────────\n\nexport async function cmdFrontmatterGet(\n cwd: string,\n filePath: string | null,\n field: string | null,\n): Promise<CmdResult> {\n if (!filePath) {\n return cmdErr('file path required');\n }\n const fullPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);\n const content = await safeReadFile(fullPath);\n if (!content) {\n return cmdOk({ error: 'File not found', path: filePath });\n }\n const fm = extractFrontmatter(content);\n if (field) {\n const value = fm[field];\n if (value === undefined) {\n return cmdOk({ error: 'Field not found', field });\n }\n return cmdOk({ [field]: value }, JSON.stringify(value));\n } else {\n return cmdOk(fm);\n }\n}\n\nexport function cmdFrontmatterSet(\n cwd: string,\n filePath: string | null,\n field: string | null,\n value: string | undefined,\n): CmdResult {\n if (!filePath || !field || value === undefined) {\n return cmdErr('file, field, and value required');\n }\n const fullPath = path.isAbsolute(filePath!) ? filePath! : path.join(cwd, filePath!);\n if (!fs.existsSync(fullPath)) {\n return cmdOk({ error: 'File not found', path: filePath });\n }\n const content = fs.readFileSync(fullPath, 'utf-8');\n const fm = extractFrontmatter(content);\n let parsedValue: FrontmatterValue;\n try {\n parsedValue = JSON.parse(value!) as FrontmatterValue;\n } catch {\n parsedValue = value!;\n }\n fm[field!] = parsedValue;\n const newContent = spliceFrontmatter(content, fm);\n fs.writeFileSync(fullPath, newContent, 'utf-8');\n return cmdOk({ updated: true, field, value: parsedValue }, 'true');\n}\n\nexport function cmdFrontmatterMerge(\n cwd: string,\n filePath: string | null,\n data: string | null,\n): CmdResult {\n if (!filePath || !data) {\n return cmdErr('file and data required');\n }\n const fullPath = path.isAbsolute(filePath!) ? filePath! : path.join(cwd, filePath!);\n if (!fs.existsSync(fullPath)) {\n return cmdOk({ error: 'File not found', path: filePath });\n }\n const content = fs.readFileSync(fullPath, 'utf-8');\n const fm = extractFrontmatter(content);\n let mergeData: FrontmatterData;\n try {\n mergeData = JSON.parse(data!) as FrontmatterData;\n } catch {\n return cmdErr('Invalid JSON for --data');\n }\n Object.assign(fm, mergeData);\n const newContent = spliceFrontmatter(content, fm);\n fs.writeFileSync(fullPath, newContent, 'utf-8');\n return cmdOk({ merged: true, fields: Object.keys(mergeData) }, 'true');\n}\n\nexport async function cmdFrontmatterValidate(\n cwd: string,\n filePath: string | null,\n schemaName: string | null,\n): Promise<CmdResult> {\n if (!filePath || !schemaName) {\n return cmdErr('file and schema required');\n }\n const schema = FRONTMATTER_SCHEMAS[schemaName!];\n if (!schema) {\n return cmdErr(\n `Unknown schema: ${schemaName}. Available: ${Object.keys(FRONTMATTER_SCHEMAS).join(', ')}`,\n );\n }\n const fullPath = path.isAbsolute(filePath!) ? filePath! : path.join(cwd, filePath!);\n const content = await safeReadFile(fullPath);\n if (!content) {\n return cmdOk({ error: 'File not found', path: filePath });\n }\n const fm = extractFrontmatter(content);\n const missing = schema.required.filter(f => fm[f] === undefined);\n const present = schema.required.filter(f => fm[f] !== undefined);\n const result: FrontmatterValidationResult = {\n valid: missing.length === 0,\n missing,\n present,\n schema: schemaName!,\n };\n return cmdOk(result, missing.length === 0 ? 'valid' : 'invalid');\n}\n","/**\n * Config — Planning config CRUD operations\n *\n * Ported from maxsim/bin/lib/config.cjs\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\nimport type { PlanningConfig, WorkflowConfig, CmdResult } from './types.js';\nimport { PLANNING_CONFIG_DEFAULTS, cmdOk, cmdErr } from './types.js';\n\n// ─── Config CRUD commands ───────────────────────────────────────────────────\n\nexport function cmdConfigEnsureSection(cwd: string, raw: boolean): CmdResult {\n const configPath = path.join(cwd, '.planning', 'config.json');\n const planningDir = path.join(cwd, '.planning');\n\n try {\n if (!fs.existsSync(planningDir)) {\n fs.mkdirSync(planningDir, { recursive: true });\n }\n } catch (err: unknown) {\n return cmdErr('Failed to create .planning directory: ' + (err as Error).message);\n }\n\n if (fs.existsSync(configPath)) {\n const result = { created: false, reason: 'already_exists' };\n return cmdOk(result, raw ? 'exists' : undefined);\n }\n\n // Detect Brave Search API key availability\n const homedir = os.homedir();\n const braveKeyFile = path.join(homedir, '.maxsim', 'brave_api_key');\n const hasBraveSearch = !!(process.env.BRAVE_API_KEY || fs.existsSync(braveKeyFile));\n\n // Load user-level defaults from ~/.maxsim/defaults.json if available\n const globalDefaultsPath = path.join(homedir, '.maxsim', 'defaults.json');\n let userDefaults: Partial<PlanningConfig> = {};\n try {\n if (fs.existsSync(globalDefaultsPath)) {\n userDefaults = JSON.parse(fs.readFileSync(globalDefaultsPath, 'utf-8')) as Partial<PlanningConfig>;\n }\n } catch {\n // Ignore malformed global defaults, fall back to hardcoded\n }\n\n const hardcoded: PlanningConfig = {\n ...PLANNING_CONFIG_DEFAULTS,\n brave_search: hasBraveSearch,\n };\n\n const defaults: PlanningConfig = {\n ...hardcoded,\n ...userDefaults,\n workflow: {\n ...hardcoded.workflow,\n ...(userDefaults.workflow || {}),\n } as WorkflowConfig,\n review: {\n ...hardcoded.review,\n ...((userDefaults as Record<string, unknown>).review as Record<string, unknown> || {}),\n },\n };\n\n try {\n fs.writeFileSync(configPath, JSON.stringify(defaults, null, 2), 'utf-8');\n const result = { created: true, path: '.planning/config.json' };\n return cmdOk(result, raw ? 'created' : undefined);\n } catch (err: unknown) {\n return cmdErr('Failed to create config.json: ' + (err as Error).message);\n }\n}\n\nexport function cmdConfigSet(cwd: string, keyPath: string | undefined, value: string | undefined, raw: boolean): CmdResult {\n const configPath = path.join(cwd, '.planning', 'config.json');\n\n if (!keyPath) {\n return cmdErr('Usage: config-set <key.path> <value>');\n }\n\n // Parse value (handle booleans and numbers)\n let parsedValue: string | boolean | number | undefined = value;\n if (value === 'true') parsedValue = true;\n else if (value === 'false') parsedValue = false;\n else if (value !== undefined && !isNaN(Number(value)) && value !== '') parsedValue = Number(value);\n\n // Load existing config or start with empty object\n let config: Record<string, unknown> = {};\n try {\n if (fs.existsSync(configPath)) {\n config = JSON.parse(fs.readFileSync(configPath, 'utf-8')) as Record<string, unknown>;\n }\n } catch (err: unknown) {\n return cmdErr('Failed to read config.json: ' + (err as Error).message);\n }\n\n // Set nested value using dot notation\n const keys = keyPath!.split('.');\n let current: Record<string, unknown> = config;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (current[key] === undefined || typeof current[key] !== 'object') {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n current[keys[keys.length - 1]] = parsedValue;\n\n try {\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');\n const result = { updated: true, key: keyPath, value: parsedValue };\n return cmdOk(result, raw ? `${keyPath}=${parsedValue}` : undefined);\n } catch (err: unknown) {\n return cmdErr('Failed to write config.json: ' + (err as Error).message);\n }\n}\n\nexport function cmdConfigGet(cwd: string, keyPath: string | undefined, raw: boolean): CmdResult {\n const configPath = path.join(cwd, '.planning', 'config.json');\n\n if (!keyPath) {\n return cmdErr('Usage: config-get <key.path>');\n }\n\n let config: Record<string, unknown> = {};\n try {\n if (fs.existsSync(configPath)) {\n config = JSON.parse(fs.readFileSync(configPath, 'utf-8')) as Record<string, unknown>;\n } else {\n return cmdErr('No config.json found at ' + configPath);\n }\n } catch (err: unknown) {\n return cmdErr('Failed to read config.json: ' + (err as Error).message);\n }\n\n const keys = keyPath!.split('.');\n let current: unknown = config;\n for (const key of keys) {\n if (current === undefined || current === null || typeof current !== 'object') {\n return cmdErr(`Key not found: ${keyPath}`);\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n if (current === undefined) {\n return cmdErr(`Key not found: ${keyPath}`);\n }\n\n return cmdOk(current, raw ? String(current) : undefined);\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * State — STATE.md operations and progression engine\n *\n * Ported from maxsim/bin/lib/state.cjs\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport escapeStringRegexp from 'escape-string-regexp';\n\nimport { loadConfig, rethrowCliSignals, safeReadFile, pathExistsInternal, statePath as statePathUtil, configPath, roadmapPath as roadmapPathUtil, phasesPath, todayISO, isPlanFile, isSummaryFile, escapePhaseNum } from './core.js';\nimport type {\n AppConfig,\n StatePatchResult,\n StateMetricOptions,\n StateDecisionOptions,\n StateBlockerOptions,\n StateSessionOptions,\n StateSnapshot,\n Decision,\n CmdResult,\n} from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\nimport { getAllPhasesProgress } from '../github/sync.js';\nimport { loadMapping } from '../github/mapping.js';\n\n// ─── Internal helpers ────────────────────────────────────────────────────────\n\n/**\n * Parse a markdown table row into cells, handling escaped pipes (`\\|`) within cell content.\n * Strips leading/trailing pipe characters and trims each cell.\n */\nfunction parseTableRow(row: string): string[] {\n // Replace escaped pipes with a placeholder, split, then restore\n const placeholder = '\\x00PIPE\\x00';\n const safe = row.replace(/\\\\\\|/g, placeholder);\n return safe.split('|').map(c => c.replaceAll(placeholder, '|').trim()).filter(Boolean);\n}\n\nexport function stateExtractField(content: string, fieldName: string): string | null {\n const escaped = escapeStringRegexp(fieldName);\n // Match **fieldName:** with optional extra whitespace around the name and colon\n const boldPattern = new RegExp(`\\\\*\\\\*\\\\s*${escaped}\\\\s*:\\\\s*\\\\*\\\\*\\\\s*(.+)`, 'i');\n const boldMatch = content.match(boldPattern);\n if (boldMatch) return boldMatch[1].trim();\n // Fallback: match plain \"fieldName: value\" (no bold markers)\n const plainPattern = new RegExp(`^\\\\s*${escaped}\\\\s*:\\\\s*(.+)`, 'im');\n const plainMatch = content.match(plainPattern);\n return plainMatch ? plainMatch[1].trim() : null;\n}\n\nexport function stateReplaceField(content: string, fieldName: string, newValue: string): string | null {\n const escaped = escapeStringRegexp(fieldName);\n // Match **fieldName:** with optional extra whitespace\n const boldPattern = new RegExp(`(\\\\*\\\\*\\\\s*${escaped}\\\\s*:\\\\s*\\\\*\\\\*\\\\s*)(.*)`, 'i');\n let replaced = content.replace(boldPattern, (_match, prefix: string) => `${prefix}${newValue}`);\n if (replaced !== content) return replaced;\n // Fallback: plain \"fieldName: value\"\n const plainPattern = new RegExp(`(^[ \\\\t]*${escaped}\\\\s*:\\\\s*)(.*)`, 'im');\n replaced = content.replace(plainPattern, (_match, prefix: string) => `${prefix}${newValue}`);\n return replaced !== content ? replaced : null;\n}\n\nasync function readTextArgOrFile(cwd: string, value: string | undefined, filePath: string | undefined, label: string): Promise<string | undefined> {\n if (!filePath) return value;\n const resolvedPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);\n try {\n return (await fsp.readFile(resolvedPath, 'utf-8')).trimEnd();\n } catch {\n throw new Error(`${label} file not found: ${filePath}`);\n }\n}\n\n/**\n * Append an entry to a section in STATE.md content, removing placeholder text.\n * Returns updated content or null if section not found.\n */\nexport function appendToStateSection(\n content: string,\n sectionPattern: RegExp,\n entry: string,\n placeholderPatterns?: RegExp[],\n): string | null {\n const match = content.match(sectionPattern);\n if (!match) return null;\n\n let sectionBody = match[2];\n const defaults = [/None yet\\.?\\s*\\n?/gi, /No decisions yet\\.?\\s*\\n?/gi, /None\\.?\\s*\\n?/gi];\n for (const pat of placeholderPatterns || defaults) {\n sectionBody = sectionBody.replace(pat, '');\n }\n sectionBody = sectionBody.trimEnd() + '\\n' + entry + '\\n';\n\n return content.replace(sectionPattern, (_m, header: string) => `${header}${sectionBody}`);\n}\n\n// ─── State commands ──────────────────────────────────────────────────────────\n\nexport async function cmdStateLoad(cwd: string, raw: boolean): Promise<CmdResult> {\n const config: AppConfig = await loadConfig(cwd);\n\n const [stateContent, configExists, roadmapExists] = await Promise.all([\n safeReadFile(statePathUtil(cwd)),\n pathExistsInternal(configPath(cwd)),\n pathExistsInternal(roadmapPathUtil(cwd)),\n ]);\n\n const stateRaw = stateContent ?? '';\n const stateExists = stateRaw.length > 0;\n\n const result = {\n config,\n state_raw: stateRaw,\n state_exists: stateExists,\n roadmap_exists: roadmapExists,\n config_exists: configExists,\n };\n\n if (raw) {\n const c = config;\n const lines = [\n `model_profile=${c.model_profile}`,\n `commit_docs=${c.commit_docs}`,\n `branching_strategy=${c.branching_strategy}`,\n `phase_branch_template=${c.phase_branch_template}`,\n `milestone_branch_template=${c.milestone_branch_template}`,\n `parallelization=${c.parallelization}`,\n `research=${c.research}`,\n `plan_checker=${c.plan_checker}`,\n `verifier=${c.verifier}`,\n `config_exists=${configExists}`,\n `roadmap_exists=${roadmapExists}`,\n `state_exists=${stateExists}`,\n ];\n return cmdOk(result, lines.join('\\n'));\n }\n\n return cmdOk(result);\n}\n\nexport async function cmdStateGet(cwd: string, section: string | null, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n try {\n const content = await fsp.readFile(statePath, 'utf-8');\n\n if (!section) {\n return cmdOk({ content }, raw ? content : undefined);\n }\n\n // Check for **field:** value (reuse stateExtractField for format tolerance)\n const fieldValue = stateExtractField(content, section);\n if (fieldValue !== null) {\n return cmdOk({ [section]: fieldValue }, raw ? fieldValue : undefined);\n }\n\n // Check for ## or ### Section, tolerating extra blank lines after header\n const fieldEscaped = escapeStringRegexp(section);\n const sectionPattern = new RegExp(`#{2,3}\\\\s*${fieldEscaped}\\\\s*\\\\n\\\\s*\\\\n?([\\\\s\\\\S]*?)(?=\\\\n#{2,3}\\\\s|$)`, 'i');\n const sectionMatch = content.match(sectionPattern);\n if (sectionMatch) {\n return cmdOk({ [section]: sectionMatch[1].trim() }, raw ? sectionMatch[1].trim() : undefined);\n }\n\n return cmdOk({ error: `Section or field \"${section}\" not found` }, raw ? '' : undefined);\n } catch (e: unknown) {\n rethrowCliSignals(e);\n return cmdErr('STATE.md not found');\n }\n}\n\nexport async function cmdStatePatch(cwd: string, patches: Record<string, string>, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n try {\n let content = await fsp.readFile(statePath, 'utf-8');\n const results: StatePatchResult = { updated: [], failed: [] };\n\n for (const [field, value] of Object.entries(patches)) {\n const result = stateReplaceField(content, field, value);\n if (result) {\n content = result;\n results.updated.push(field);\n } else {\n results.failed.push(field);\n }\n }\n\n if (results.updated.length > 0) {\n await fsp.writeFile(statePath, content, 'utf-8');\n }\n\n return cmdOk(results, raw ? (results.updated.length > 0 ? 'true' : 'false') : undefined);\n } catch (e: unknown) {\n rethrowCliSignals(e);\n return cmdErr('STATE.md not found');\n }\n}\n\nexport async function cmdStateUpdate(cwd: string, field: string | undefined, value: string | undefined): Promise<CmdResult> {\n if (!field || value === undefined) {\n return cmdErr('field and value required for state update');\n }\n\n const statePath = statePathUtil(cwd);\n try {\n const content = await fsp.readFile(statePath, 'utf-8');\n const result = stateReplaceField(content, field, value);\n if (result) {\n await fsp.writeFile(statePath, result, 'utf-8');\n return cmdOk({ updated: true });\n } else {\n return cmdOk({ updated: false, reason: `Field \"${field}\" not found in STATE.md` });\n }\n } catch (e: unknown) {\n rethrowCliSignals(e);\n return cmdOk({ updated: false, reason: 'STATE.md not found' });\n }\n}\n\n// ─── State Progression Engine ────────────────────────────────────────────────\n\nexport async function cmdStateAdvancePlan(cwd: string, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n\n let content = await fsp.readFile(statePath, 'utf-8');\n const currentPlan = parseInt(stateExtractField(content, 'Current Plan') ?? '', 10);\n const totalPlans = parseInt(stateExtractField(content, 'Total Plans in Phase') ?? '', 10);\n const today = todayISO();\n\n if (isNaN(currentPlan) || isNaN(totalPlans)) {\n return cmdOk({ error: 'Cannot parse Current Plan or Total Plans in Phase from STATE.md' });\n }\n\n if (currentPlan >= totalPlans) {\n content = stateReplaceField(content, 'Status', 'Phase complete — ready for verification') || content;\n content = stateReplaceField(content, 'Last Activity', today) || content;\n await fsp.writeFile(statePath, content, 'utf-8');\n return cmdOk({ advanced: false, reason: 'last_plan', current_plan: currentPlan, total_plans: totalPlans, status: 'ready_for_verification' }, raw ? 'false' : undefined);\n } else {\n const newPlan = currentPlan + 1;\n content = stateReplaceField(content, 'Current Plan', String(newPlan)) || content;\n content = stateReplaceField(content, 'Status', 'Ready to execute') || content;\n content = stateReplaceField(content, 'Last Activity', today) || content;\n await fsp.writeFile(statePath, content, 'utf-8');\n return cmdOk({ advanced: true, previous_plan: currentPlan, current_plan: newPlan, total_plans: totalPlans }, raw ? 'true' : undefined);\n }\n}\n\nexport async function cmdStateRecordMetric(cwd: string, options: StateMetricOptions, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n\n let content = await fsp.readFile(statePath, 'utf-8');\n const { phase, plan, duration, tasks, files } = options;\n\n if (!phase || !plan || !duration) {\n return cmdOk({ error: 'phase, plan, and duration required' });\n }\n\n // Flexible: tolerate varying heading levels (##/###), flexible separator lines (|---|, | --- |, |:---|)\n const metricsPattern = /(#{2,3}\\s*Performance Metrics[\\s\\S]*?\\n\\|[^\\n]+\\n\\|[\\s:|\\-]+\\n)([\\s\\S]*?)(?=\\n#{2,3}\\s|\\n$|$)/i;\n const metricsMatch = content.match(metricsPattern);\n\n if (metricsMatch) {\n let tableBody = metricsMatch[2].trimEnd();\n const newRow = `| Phase ${phase} P${plan} | ${duration} | ${tasks || '-'} tasks | ${files || '-'} files |`;\n\n if (tableBody.trim() === '' || tableBody.includes('None yet')) {\n tableBody = newRow;\n } else {\n tableBody = tableBody + '\\n' + newRow;\n }\n\n content = content.replace(metricsPattern, (_match, header: string) => `${header}${tableBody}\\n`);\n await fsp.writeFile(statePath, content, 'utf-8');\n return cmdOk({ recorded: true, phase, plan, duration }, raw ? 'true' : undefined);\n } else {\n return cmdOk({ recorded: false, reason: 'Performance Metrics section not found in STATE.md' }, raw ? 'false' : undefined);\n }\n}\n\nexport async function cmdStateUpdateProgress(cwd: string, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n\n let content = await fsp.readFile(statePath, 'utf-8');\n\n let totalPlans = 0;\n let totalSummaries = 0;\n let usedGitHub = false;\n\n // Try GitHub first for progress data\n try {\n const mapping = loadMapping(cwd);\n if (mapping && Object.keys(mapping.phases).length > 0) {\n const ghResult = await getAllPhasesProgress();\n if (ghResult.ok) {\n for (const entry of ghResult.data) {\n totalPlans += entry.progress.total;\n totalSummaries += entry.progress.completed;\n }\n usedGitHub = true;\n }\n }\n } catch { /* GitHub not available — fall back to local */ }\n\n // GitHub is the single source of truth for plan/summary progress.\n // If GitHub data is unavailable, counts remain 0.\n\n const percent = totalPlans > 0 ? Math.min(100, Math.round(totalSummaries / totalPlans * 100)) : 0;\n const barWidth = 10;\n const filled = Math.round(percent / 100 * barWidth);\n const bar = '\\u2588'.repeat(filled) + '\\u2591'.repeat(barWidth - filled);\n const progressStr = `[${bar}] ${percent}%`;\n\n const result = stateReplaceField(content, 'Progress', progressStr);\n if (result) {\n await fsp.writeFile(statePath, result, 'utf-8');\n return cmdOk({ updated: true, percent, completed: totalSummaries, total: totalPlans, bar: progressStr }, raw ? progressStr : undefined);\n } else {\n return cmdOk({ updated: false, reason: 'Progress field not found in STATE.md' }, raw ? 'false' : undefined);\n }\n}\n\nexport async function cmdStateAddDecision(cwd: string, options: StateDecisionOptions, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n\n const { phase, summary, summary_file, rationale, rationale_file } = options;\n let summaryText: string | undefined;\n let rationaleText = '';\n\n try {\n summaryText = await readTextArgOrFile(cwd, summary, summary_file, 'summary');\n rationaleText = (await readTextArgOrFile(cwd, rationale || '', rationale_file, 'rationale')) || '';\n } catch (thrown: unknown) {\n const e = thrown as Error;\n return cmdOk({ added: false, reason: e.message }, raw ? 'false' : undefined);\n }\n\n if (!summaryText) { return cmdOk({ error: 'summary required' }); }\n\n const content = await fsp.readFile(statePath, 'utf-8');\n const entry = `- [Phase ${phase || '?'}]: ${summaryText}${rationaleText ? ` — ${rationaleText}` : ''}`;\n\n const sectionPattern = /(###?\\s*(?:Decisions|Decisions Made|Accumulated.*Decisions)\\s*\\n)([\\s\\S]*?)(?=\\n###?|\\n##[^#]|$)/i;\n const updated = appendToStateSection(content, sectionPattern, entry, [/None yet\\.?\\s*\\n?/gi, /No decisions yet\\.?\\s*\\n?/gi]);\n\n if (updated) {\n await fsp.writeFile(statePath, updated, 'utf-8');\n return cmdOk({ added: true, decision: entry }, raw ? 'true' : undefined);\n } else {\n return cmdOk({ added: false, reason: 'Decisions section not found in STATE.md' }, raw ? 'false' : undefined);\n }\n}\n\nexport async function cmdStateAddBlocker(cwd: string, text: string | StateBlockerOptions, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n const blockerOptions: StateBlockerOptions = typeof text === 'object' && text !== null ? text : { text: text as string };\n let blockerText: string | undefined;\n\n try {\n blockerText = await readTextArgOrFile(cwd, blockerOptions.text, blockerOptions.text_file, 'blocker');\n } catch (thrown: unknown) {\n const e = thrown as Error;\n return cmdOk({ added: false, reason: e.message }, raw ? 'false' : undefined);\n }\n\n if (!blockerText) { return cmdOk({ error: 'text required' }); }\n\n const content = await fsp.readFile(statePath, 'utf-8');\n const entry = `- ${blockerText}`;\n\n const sectionPattern = /(###?\\s*(?:Blockers|Blockers\\/Concerns|Concerns)\\s*\\n)([\\s\\S]*?)(?=\\n###?|\\n##[^#]|$)/i;\n const updated = appendToStateSection(content, sectionPattern, entry, [/None\\.?\\s*\\n?/gi, /None yet\\.?\\s*\\n?/gi]);\n\n if (updated) {\n await fsp.writeFile(statePath, updated, 'utf-8');\n return cmdOk({ added: true, blocker: blockerText }, raw ? 'true' : undefined);\n } else {\n return cmdOk({ added: false, reason: 'Blockers section not found in STATE.md' }, raw ? 'false' : undefined);\n }\n}\n\nexport async function cmdStateResolveBlocker(cwd: string, text: string | null, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n if (!text) { return cmdOk({ error: 'text required' }); }\n\n let content = await fsp.readFile(statePath, 'utf-8');\n\n const sectionPattern = /(#{2,3}\\s*(?:Blockers|Blockers\\/Concerns|Concerns)\\s*\\n\\s*\\n?)([\\s\\S]*?)(?=\\n#{2,3}\\s|$)/i;\n const match = content.match(sectionPattern);\n\n if (match) {\n const sectionBody = match[2];\n const lines = sectionBody.split('\\n');\n const filtered = lines.filter(line => {\n // Match - or * bullets, optionally indented\n if (!/^\\s*[-*]\\s+/.test(line)) return true;\n return !line.toLowerCase().includes(text.toLowerCase());\n });\n\n let newBody = filtered.join('\\n');\n if (!newBody.trim() || !/^\\s*[-*]\\s+/m.test(newBody)) {\n newBody = 'None\\n';\n }\n\n content = content.replace(sectionPattern, (_match, header: string) => `${header}${newBody}`);\n await fsp.writeFile(statePath, content, 'utf-8');\n return cmdOk({ resolved: true, blocker: text }, raw ? 'true' : undefined);\n } else {\n return cmdOk({ resolved: false, reason: 'Blockers section not found in STATE.md' }, raw ? 'false' : undefined);\n }\n}\n\nexport async function cmdStateRecordSession(cwd: string, options: StateSessionOptions, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n if (!(await pathExistsInternal(statePath))) { return cmdOk({ error: 'STATE.md not found' }); }\n\n let content = await fsp.readFile(statePath, 'utf-8');\n const now = new Date().toISOString();\n const updated: string[] = [];\n\n let result = stateReplaceField(content, 'Last session', now);\n if (result) { content = result; updated.push('Last session'); }\n result = stateReplaceField(content, 'Last Date', now);\n if (result) { content = result; updated.push('Last Date'); }\n\n if (options.stopped_at) {\n result = stateReplaceField(content, 'Stopped At', options.stopped_at);\n if (!result) result = stateReplaceField(content, 'Stopped at', options.stopped_at);\n if (result) { content = result; updated.push('Stopped At'); }\n }\n\n const resumeFile = options.resume_file || 'None';\n result = stateReplaceField(content, 'Resume File', resumeFile);\n if (!result) result = stateReplaceField(content, 'Resume file', resumeFile);\n if (result) { content = result; updated.push('Resume File'); }\n\n if (updated.length > 0) {\n await fsp.writeFile(statePath, content, 'utf-8');\n return cmdOk({ recorded: true, updated }, raw ? 'true' : undefined);\n } else {\n return cmdOk({ recorded: false, reason: 'No session fields found in STATE.md' }, raw ? 'false' : undefined);\n }\n}\n\nexport async function cmdStateSnapshot(cwd: string, raw: boolean): Promise<CmdResult> {\n const statePath = statePathUtil(cwd);\n\n if (!(await pathExistsInternal(statePath))) {\n return cmdOk({ error: 'STATE.md not found' });\n }\n\n const content = await fsp.readFile(statePath, 'utf-8');\n\n const extractField = (fieldName: string): string | null => stateExtractField(content, fieldName);\n\n const currentPhase = extractField('Current Phase');\n const currentPhaseName = extractField('Current Phase Name');\n const totalPhasesRaw = extractField('Total Phases');\n const currentPlan = extractField('Current Plan');\n const totalPlansRaw = extractField('Total Plans in Phase');\n const status = extractField('Status');\n const progressRaw = extractField('Progress');\n const lastActivity = extractField('Last Activity');\n const lastActivityDesc = extractField('Last Activity Description');\n const pausedAt = extractField('Paused At');\n\n const totalPhases = totalPhasesRaw ? parseInt(totalPhasesRaw, 10) : null;\n const totalPlansInPhase = totalPlansRaw ? parseInt(totalPlansRaw, 10) : null;\n const progressPercent = progressRaw ? parseInt(progressRaw.replace('%', ''), 10) : null;\n\n const decisions: Decision[] = [];\n // Tolerate ##/### heading levels and flexible separator lines (|---|, | --- |, |:---|)\n const decisionsMatch = content.match(/#{2,3}\\s*Decisions Made[\\s\\S]*?\\n\\|[^\\n]+\\n\\|[\\s:|\\-]+\\n([\\s\\S]*?)(?=\\n#{2,3}\\s|\\n$|$)/i);\n if (decisionsMatch) {\n const tableBody = decisionsMatch[1];\n const rows = tableBody.trim().split('\\n').filter(r => r.includes('|') && !r.match(/^\\s*$/));\n for (const row of rows) {\n // Skip separator lines that snuck through\n if (/^\\s*\\|[\\s:\\-|]+\\|\\s*$/.test(row)) continue;\n const cells = parseTableRow(row);\n if (cells.length >= 3) {\n decisions.push({\n phase: cells[0],\n summary: cells[1],\n rationale: cells[2],\n });\n }\n }\n }\n\n const blockers: string[] = [];\n // Tolerate ##/### heading levels\n const blockersMatch = content.match(/#{2,3}\\s*Blockers\\s*\\n([\\s\\S]*?)(?=\\n#{2,3}\\s|$)/i);\n if (blockersMatch) {\n const blockersSection = blockersMatch[1];\n // Match - or * bullets, optionally indented\n const items = blockersSection.match(/^\\s*[-*]\\s+(.+)$/gm) || [];\n for (const item of items) {\n blockers.push(item.replace(/^\\s*[-*]\\s+/, '').trim());\n }\n }\n\n const session: StateSnapshot['session'] = {\n last_date: null,\n stopped_at: null,\n resume_file: null,\n };\n\n const sessionMatch = content.match(/#{2,3}\\s*Session\\s*\\n\\s*\\n?([\\s\\S]*?)(?=\\n#{2,3}\\s|$)/i);\n if (sessionMatch) {\n const sessionSection = sessionMatch[1];\n session.last_date = stateExtractField(sessionSection, 'Last Date');\n session.stopped_at = stateExtractField(sessionSection, 'Stopped At') || stateExtractField(sessionSection, 'Stopped at');\n session.resume_file = stateExtractField(sessionSection, 'Resume File') || stateExtractField(sessionSection, 'Resume file');\n }\n\n const snapshot: StateSnapshot = {\n current_phase: currentPhase,\n current_phase_name: currentPhaseName,\n total_phases: totalPhases,\n current_plan: currentPlan,\n total_plans_in_phase: totalPlansInPhase,\n status,\n progress_percent: progressPercent,\n last_activity: lastActivity,\n last_activity_desc: lastActivityDesc,\n decisions,\n blockers,\n paused_at: pausedAt,\n session,\n };\n\n return cmdOk(snapshot);\n}\n\n// ─── Stale Context Detection ─────────────────────────────────────────────────\n\nexport interface StaleReference {\n section: string;\n line: string;\n phase: string;\n}\n\nexport async function cmdDetectStaleContext(cwd: string): Promise<CmdResult> {\n const rmPath = roadmapPathUtil(cwd);\n const stPath = statePathUtil(cwd);\n\n const [roadmapContent, stateContent] = await Promise.all([\n safeReadFile(rmPath),\n safeReadFile(stPath),\n ]);\n\n if (!roadmapContent) {\n return cmdErr('ROADMAP.md not found');\n }\n if (!stateContent) {\n return cmdErr('STATE.md not found');\n }\n\n // Identify completed phases from ROADMAP.md (lines matching `- [x]` with Phase N)\n const completedPhases: string[] = [];\n const checkboxPattern = /^-\\s*\\[x\\]\\s*.*Phase\\s+(\\d+[A-Z]?(?:\\.\\d+)?)/gim;\n let match: RegExpExecArray | null;\n while ((match = checkboxPattern.exec(roadmapContent)) !== null) {\n completedPhases.push(match[1]);\n }\n\n if (completedPhases.length === 0) {\n return cmdOk({\n stale_references: [],\n completed_phases: [],\n clean: true,\n message: 'No completed phases found in ROADMAP.md',\n });\n }\n\n // Scan STATE.md decisions and blockers sections for references to completed phases\n const staleReferences: StaleReference[] = [];\n\n const decisionsPattern = /(#{2,3}\\s*(?:Decisions|Decisions Made|Accumulated.*Decisions)\\s*\\n)([\\s\\S]*?)(?=\\n#{2,3}\\s|\\n##[^#]|$)/i;\n const blockersPattern = /(#{2,3}\\s*(?:Blockers|Blockers\\/Concerns|Concerns)\\s*\\n\\s*\\n?)([\\s\\S]*?)(?=\\n#{2,3}\\s|$)/i;\n\n const sections: Array<{ name: string; pattern: RegExp }> = [\n { name: 'Decisions', pattern: decisionsPattern },\n { name: 'Blockers', pattern: blockersPattern },\n ];\n\n for (const section of sections) {\n const sectionMatch = stateContent.match(section.pattern);\n if (!sectionMatch || !sectionMatch[2]) continue;\n\n const lines = sectionMatch[2].split('\\n');\n for (const line of lines) {\n if (!line.trim()) continue;\n for (const phase of completedPhases) {\n const escaped = escapePhaseNum(phase);\n // Match `- [Phase N]:` tagged lines or free-text `Phase N` mentions\n const tagPattern = new RegExp(`\\\\bPhase\\\\s+${escaped}\\\\b`, 'i');\n if (tagPattern.test(line)) {\n staleReferences.push({\n section: section.name,\n line: line.trim(),\n phase,\n });\n break; // Don't double-count same line for multiple phases\n }\n }\n }\n }\n\n return cmdOk({\n stale_references: staleReferences,\n completed_phases: completedPhases,\n clean: staleReferences.length === 0,\n message: staleReferences.length === 0\n ? 'No stale references found — STATE.md is clean'\n : `Found ${staleReferences.length} stale reference(s) to completed phases`,\n });\n}\n","/**\n * Roadmap — Roadmap parsing and update operations\n *\n * Ported from maxsim/bin/lib/roadmap.cjs\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport { normalizePhaseName, getPhasePattern, findPhaseInternal, roadmapPath, phasesPath, listSubDirs, isPlanFile, isSummaryFile, debugLog, todayISO, safeReadFile } from './core.js';\nimport { cmdOk, cmdErr } from './types.js';\nimport type { PhaseStatus, RoadmapPhase, RoadmapMilestone, RoadmapAnalysis, CmdResult } from './types.js';\nimport { getAllPhasesProgress } from '../github/sync.js';\nimport { loadMapping } from '../github/mapping.js';\n\n// ─── Roadmap commands ────────────────────────────────────────────────────────\n\nexport async function cmdRoadmapGetPhase(cwd: string, phaseNum: string): Promise<CmdResult> {\n const rmPath = roadmapPath(cwd);\n const content = await safeReadFile(rmPath);\n if (!content) return cmdOk({ found: false, error: 'ROADMAP.md not found' }, '');\n\n try {\n const escapedPhase = phaseNum.replace(/\\./g, '\\\\.');\n const phasePattern = getPhasePattern(escapedPhase, 'i');\n const headerMatch = content.match(phasePattern);\n\n if (!headerMatch) {\n const checklistPattern = new RegExp(`-\\\\s*\\\\[[ x]\\\\]\\\\s*\\\\*\\\\*Phase\\\\s+${escapedPhase}:\\\\s*([^*]+)\\\\*\\\\*`, 'i');\n const checklistMatch = content.match(checklistPattern);\n if (checklistMatch) {\n return cmdOk({ found: false, phase_number: phaseNum, phase_name: checklistMatch[1].trim(), error: 'malformed_roadmap', message: `Phase ${phaseNum} exists in summary list but missing \"### Phase ${phaseNum}:\" detail section. ROADMAP.md needs both formats.` }, '');\n }\n return cmdOk({ found: false, phase_number: phaseNum }, '');\n }\n\n const phaseName = headerMatch[1].trim();\n const headerIndex = headerMatch.index!;\n const restOfContent = content.slice(headerIndex);\n const nextHeaderMatch = restOfContent.match(/\\n#{2,4}\\s+Phase\\s+\\d/i);\n const sectionEnd = nextHeaderMatch ? headerIndex + nextHeaderMatch.index! : content.length;\n const section = content.slice(headerIndex, sectionEnd).trim();\n const goalMatch = section.match(/\\*\\*Goal(?::\\*\\*|\\*\\*:)\\s*([^\\n]+)/i);\n const goal = goalMatch ? goalMatch[1].trim() : null;\n const criteriaMatch = section.match(/\\*\\*Success Criteria\\*\\*[^\\n]*:\\s*\\n((?:\\s*\\d+\\.\\s*[^\\n]+\\n?)+)/i);\n const success_criteria = criteriaMatch ? criteriaMatch[1].trim().split('\\n').map(line => line.replace(/^\\s*\\d+\\.\\s*/, '').trim()).filter(Boolean) : [];\n\n return cmdOk({ found: true, phase_number: phaseNum, phase_name: phaseName, goal, success_criteria, section }, section);\n } catch (e: unknown) {\n return cmdErr('Failed to read ROADMAP.md: ' + (e as Error).message);\n }\n}\n\nexport async function cmdRoadmapAnalyze(cwd: string): Promise<CmdResult> {\n const rmPath = roadmapPath(cwd);\n const content = await safeReadFile(rmPath);\n if (!content) return cmdOk({ error: 'ROADMAP.md not found', milestones: [], phases: [], current_phase: null });\n\n const phasesDir = phasesPath(cwd);\n const phasePattern = getPhasePattern();\n interface ParsedPhase { phaseNum: string; phaseName: string; goal: string | null; depends_on: string | null; normalized: string; checkboxPattern: RegExp; }\n const parsedPhases: ParsedPhase[] = [];\n let match: RegExpExecArray | null;\n\n while ((match = phasePattern.exec(content)) !== null) {\n const phaseNum = match[1];\n const phaseName = match[2].replace(/\\(INSERTED\\)/i, '').trim();\n const sectionStart = match.index;\n const restOfContent = content.slice(sectionStart);\n const nextHeader = restOfContent.match(/\\n#{2,4}\\s+Phase\\s+\\d/i);\n const sectionEnd = nextHeader ? sectionStart + nextHeader.index! : content.length;\n const section = content.slice(sectionStart, sectionEnd);\n const goalMatch = section.match(/\\*\\*Goal(?::\\*\\*|\\*\\*:)\\s*([^\\n]+)/i);\n const goal = goalMatch ? goalMatch[1].trim() : null;\n const dependsMatch = section.match(/\\*\\*Depends on:\\*\\*\\s*([^\\n]+)/i);\n const depends_on = dependsMatch ? dependsMatch[1].trim() : null;\n parsedPhases.push({ phaseNum, phaseName, goal, depends_on, normalized: normalizePhaseName(phaseNum), checkboxPattern: new RegExp(`-\\\\s*\\\\[(x| )\\\\]\\\\s*.*Phase\\\\s+${phaseNum.replace('.', '\\\\.')}`, 'i') });\n }\n\n // Try GitHub first for phase progress data\n let ghPhaseProgress: Map<string, { total: number; completed: number }> | null = null;\n try {\n const mapping = loadMapping(cwd);\n if (mapping && Object.keys(mapping.phases).length > 0) {\n const ghResult = await getAllPhasesProgress();\n if (ghResult.ok) {\n ghPhaseProgress = new Map();\n for (const entry of ghResult.data) {\n ghPhaseProgress.set(entry.phaseNumber, {\n total: entry.progress.total,\n completed: entry.progress.completed,\n });\n }\n }\n }\n } catch { /* GitHub not available — fall back to local */ }\n\n let allDirs: string[] = [];\n try { allDirs = await listSubDirs(phasesDir); } catch { /* phases dir may not exist */ }\n\n const phases: RoadmapPhase[] = await Promise.all(\n parsedPhases.map(async (p) => {\n let diskStatus: PhaseStatus = 'no_directory';\n let planCount = 0;\n let summaryCount = 0;\n let hasContext = false;\n let hasResearch = false;\n\n // GitHub is the single source of truth for phase progress\n const ghData = ghPhaseProgress?.get(p.phaseNum);\n if (ghData) {\n planCount = ghData.total;\n summaryCount = ghData.completed;\n if (summaryCount >= planCount && planCount > 0) diskStatus = 'complete';\n else if (summaryCount > 0) diskStatus = 'partial';\n else if (planCount > 0) diskStatus = 'planned';\n else diskStatus = 'empty';\n } else {\n // Check if phase directory exists on disk (for directory presence only)\n const dirMatch = allDirs.find(d => d.startsWith(p.normalized + '-') || d === p.normalized);\n if (dirMatch) diskStatus = 'empty';\n }\n\n const checkboxMatch = content.match(p.checkboxPattern);\n const roadmapComplete = checkboxMatch ? checkboxMatch[1] === 'x' : false;\n return { number: p.phaseNum, name: p.phaseName, goal: p.goal, depends_on: p.depends_on, plan_count: planCount, summary_count: summaryCount, has_context: hasContext, has_research: hasResearch, disk_status: diskStatus, roadmap_complete: roadmapComplete };\n }),\n );\n\n const milestones: RoadmapMilestone[] = [];\n const milestonePattern = /##\\s*(.*v(\\d+\\.\\d+)[^(\\n]*)/gi;\n let mMatch: RegExpExecArray | null;\n while ((mMatch = milestonePattern.exec(content)) !== null) { milestones.push({ heading: mMatch[1].trim(), version: 'v' + mMatch[2] }); }\n\n const currentPhase = phases.find(p => p.disk_status === 'planned' || p.disk_status === 'partial') || null;\n const nextPhase = phases.find(p => p.disk_status === 'empty' || p.disk_status === 'no_directory' || p.disk_status === 'discussed' || p.disk_status === 'researched') || null;\n const totalPlans = phases.reduce((sum, p) => sum + p.plan_count, 0);\n const totalSummaries = phases.reduce((sum, p) => sum + p.summary_count, 0);\n const completedPhases = phases.filter(p => p.disk_status === 'complete').length;\n\n const checklistPattern = /-\\s*\\[[ x]\\]\\s*\\*\\*Phase\\s+(\\d+[A-Z]?(?:\\.\\d+)?)/gi;\n const checklistPhases = new Set<string>();\n let checklistMatch: RegExpExecArray | null;\n while ((checklistMatch = checklistPattern.exec(content)) !== null) checklistPhases.add(checklistMatch[1]);\n const detailPhases = new Set(phases.map(p => p.number));\n const missingDetails = [...checklistPhases].filter(p => !detailPhases.has(p));\n\n const result: RoadmapAnalysis = { milestones, phases, phase_count: phases.length, completed_phases: completedPhases, total_plans: totalPlans, total_summaries: totalSummaries, progress_percent: totalPlans > 0 ? Math.min(100, Math.round((totalSummaries / totalPlans) * 100)) : 0, current_phase: currentPhase ? currentPhase.number : null, next_phase: nextPhase ? nextPhase.number : null, missing_phase_details: missingDetails.length > 0 ? missingDetails : null };\n return cmdOk(result);\n}\n\nexport async function cmdRoadmapUpdatePlanProgress(cwd: string, phaseNum: string): Promise<CmdResult> {\n if (!phaseNum) return cmdErr('phase number required for roadmap update-plan-progress');\n const rmPath = roadmapPath(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phaseNum);\n if (!phaseInfo) return cmdErr(`Phase ${phaseNum} not found`);\n\n const planCount = phaseInfo.plans.length;\n const summaryCount = phaseInfo.summaries.length;\n if (planCount === 0) return cmdOk({ updated: false, reason: 'No plans found', plan_count: 0, summary_count: 0 }, 'no plans');\n\n const isComplete = summaryCount >= planCount;\n const status = isComplete ? 'Complete' : summaryCount > 0 ? 'In Progress' : 'Planned';\n const today = todayISO();\n\n const rawContent = await safeReadFile(rmPath);\n if (!rawContent) return cmdOk({ updated: false, reason: 'ROADMAP.md not found', plan_count: planCount, summary_count: summaryCount }, 'no roadmap');\n\n let roadmapContent = rawContent;\n const phaseEscaped = phaseNum.replace('.', '\\\\.');\n const dateField = isComplete ? ` ${today} ` : ' ';\n roadmapContent = roadmapContent.replace(new RegExp(`(\\\\|\\\\s*${phaseEscaped}\\\\.?\\\\s[^|]*\\\\|)[^|]*(\\\\|)\\\\s*[^|]*(\\\\|)\\\\s*[^|]*(\\\\|)`, 'i'), `$1 ${summaryCount}/${planCount} $2 ${status.padEnd(11)}$3${dateField}$4`);\n const planCountText = isComplete ? `${summaryCount}/${planCount} plans complete` : `${summaryCount}/${planCount} plans executed`;\n roadmapContent = roadmapContent.replace(new RegExp(`(#{2,4}\\\\s*Phase\\\\s+${phaseEscaped}[\\\\s\\\\S]*?\\\\*\\\\*Plans:\\\\*\\\\*\\\\s*)[^\\\\n]+`, 'i'), `$1${planCountText}`);\n if (isComplete) { roadmapContent = roadmapContent.replace(new RegExp(`(-\\\\s*\\\\[)[ ](\\\\]\\\\s*.*Phase\\\\s+${phaseEscaped}[:\\\\s][^\\\\n]*)`, 'i'), `$1x$2 (completed ${today})`); }\n await fsp.writeFile(rmPath, roadmapContent, 'utf-8');\n\n return cmdOk({ updated: true, phase: phaseNum, plan_count: planCount, summary_count: summaryCount, status, complete: isComplete }, `${summaryCount}/${planCount} ${status}`);\n}\n","/**\n * Milestone — Milestone and requirements lifecycle operations\n *\n * Ported from maxsim/bin/lib/milestone.cjs\n */\n\nimport fs from 'node:fs';\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport { planningPath, roadmapPath as roadmapPathUtil, statePath as statePathUtil, phasesPath, todayISO, listSubDirs, isPlanFile, isSummaryFile, findPhaseInternal, debugLog, archivePath as archivePathHelper, pathExistsInternal, safeReadFile } from './core.js';\nimport { extractFrontmatter } from './frontmatter.js';\nimport type {\n CmdResult,\n MilestoneCompleteOptions,\n MilestoneResult,\n ArchiveResult,\n} from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Requirements commands ───────────────────────────────────────────────────\n\nexport function cmdRequirementsMarkComplete(cwd: string, reqIdsRaw: string[]): CmdResult {\n if (!reqIdsRaw || reqIdsRaw.length === 0) {\n return cmdErr('requirement IDs required. Usage: requirements mark-complete REQ-01,REQ-02 or REQ-01 REQ-02');\n }\n\n const reqIds = reqIdsRaw\n .join(' ')\n .replace(/[\\[\\]]/g, '')\n .split(/[,\\s]+/)\n .map(r => r.trim())\n .filter(Boolean);\n\n if (reqIds.length === 0) {\n return cmdErr('no valid requirement IDs found');\n }\n\n const reqPath = planningPath(cwd, 'REQUIREMENTS.md');\n if (!fs.existsSync(reqPath)) {\n return cmdOk({ updated: false, reason: 'REQUIREMENTS.md not found', ids: reqIds }, 'no requirements file');\n }\n\n let reqContent = fs.readFileSync(reqPath, 'utf-8');\n const updated: string[] = [];\n const notFound: string[] = [];\n\n for (const reqId of reqIds) {\n let found = false;\n\n const checkboxPattern = new RegExp(`(-\\\\s*\\\\[)[ ](\\\\]\\\\s*\\\\*\\\\*${reqId}\\\\*\\\\*)`, 'gi');\n if (checkboxPattern.test(reqContent)) {\n reqContent = reqContent.replace(checkboxPattern, '$1x$2');\n found = true;\n }\n\n const tablePattern = new RegExp(`(\\\\|\\\\s*${reqId}\\\\s*\\\\|[^|]+\\\\|)\\\\s*Pending\\\\s*(\\\\|)`, 'gi');\n if (tablePattern.test(reqContent)) {\n reqContent = reqContent.replace(\n new RegExp(`(\\\\|\\\\s*${reqId}\\\\s*\\\\|[^|]+\\\\|)\\\\s*Pending\\\\s*(\\\\|)`, 'gi'),\n '$1 Complete $2'\n );\n found = true;\n }\n\n if (found) {\n updated.push(reqId);\n } else {\n notFound.push(reqId);\n }\n }\n\n if (updated.length > 0) {\n fs.writeFileSync(reqPath, reqContent, 'utf-8');\n }\n\n const result: ArchiveResult = {\n updated: updated.length > 0,\n marked_complete: updated,\n not_found: notFound,\n total: reqIds.length,\n };\n\n return cmdOk(result, `${updated.length}/${reqIds.length} requirements marked complete`);\n}\n\n// ─── Milestone commands ──────────────────────────────────────────────────────\n\nexport async function cmdMilestoneComplete(\n cwd: string,\n version: string | undefined,\n options: MilestoneCompleteOptions,\n): Promise<CmdResult> {\n if (!version) {\n return cmdErr('version required for milestone complete (e.g., v1.0)');\n }\n\n const roadmapPath = roadmapPathUtil(cwd);\n const reqPath = planningPath(cwd, 'REQUIREMENTS.md');\n const statePath = statePathUtil(cwd);\n const milestonesPath = planningPath(cwd, 'MILESTONES.md');\n const archiveDir = await archivePathHelper(cwd, version);\n const phasesDir = phasesPath(cwd);\n const today = todayISO();\n const milestoneName = options.name || version;\n\n await fsp.mkdir(archiveDir, { recursive: true });\n\n let phaseCount = 0;\n let totalPlans = 0;\n let totalTasks = 0;\n const accomplishments: string[] = [];\n\n // Try GitHub first for phase/plan/task counts\n let usedGitHubCounts = false;\n try {\n const { loadMapping } = await import('../github/mapping.js');\n const mapping = loadMapping(cwd);\n if (mapping && Object.keys(mapping.phases).length > 0) {\n const { getAllPhasesProgress } = await import('../github/sync.js');\n const ghResult = await getAllPhasesProgress();\n if (ghResult.ok && ghResult.data.length > 0) {\n for (const p of ghResult.data) {\n phaseCount++;\n totalPlans += p.progress.total;\n totalTasks += p.progress.total; // Each sub-issue is a task\n }\n usedGitHubCounts = true;\n }\n }\n } catch (e) {\n // GitHub not available — fall through to local\n debugLog('milestone-complete-github-fallback', e);\n }\n\n // Local scanning: needed for accomplishments (frontmatter extraction from local archive files).\n // Plan/summary counts come from GitHub exclusively.\n try {\n const dirs = await listSubDirs(phasesDir, true);\n\n for (const dir of dirs) {\n if (!usedGitHubCounts) {\n phaseCount++;\n }\n // Use findPhaseInternal (GitHub-first) for summary discovery\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n if (!dm) continue;\n const phaseInfo = await findPhaseInternal(cwd, dm[1]);\n if (!phaseInfo) continue;\n\n if (!usedGitHubCounts) {\n totalPlans += phaseInfo.plans.length;\n }\n\n for (const s of phaseInfo.summaries) {\n try {\n const summaryPath = path.join(phasesDir, dir, s);\n if (!fs.existsSync(summaryPath)) continue;\n const content = await fsp.readFile(summaryPath, 'utf-8');\n const fm = extractFrontmatter(content);\n if (fm['one-liner']) {\n accomplishments.push(String(fm['one-liner']));\n }\n if (!usedGitHubCounts) {\n const taskMatches = content.match(/##\\s*Task\\s*\\d+/gi) || [];\n totalTasks += taskMatches.length;\n }\n } catch (e) {\n debugLog(e);\n }\n }\n }\n } catch (e) {\n debugLog(e);\n }\n\n // Snapshot STATE.md and ROADMAP.md to archive before any modifications\n const stateExists = await pathExistsInternal(statePath);\n if (stateExists) {\n const stateContent = await fsp.readFile(statePath, 'utf-8');\n await fsp.writeFile(path.join(archiveDir, 'STATE.md'), stateContent, 'utf-8');\n }\n\n const roadmapExists = await pathExistsInternal(roadmapPath);\n if (roadmapExists) {\n const roadmapContent = await fsp.readFile(roadmapPath, 'utf-8');\n await fsp.writeFile(path.join(archiveDir, 'ROADMAP.md'), roadmapContent, 'utf-8');\n }\n\n // Archive REQUIREMENTS.md\n if (await pathExistsInternal(reqPath)) {\n const reqContent = await fsp.readFile(reqPath, 'utf-8');\n const archiveHeader = `# Requirements Archive: ${version} ${milestoneName}\\n\\n**Archived:** ${today}\\n**Status:** SHIPPED\\n\\nFor current requirements, see \\`.planning/REQUIREMENTS.md\\`.\\n\\n---\\n\\n`;\n await fsp.writeFile(path.join(archiveDir, `${version}-REQUIREMENTS.md`), archiveHeader + reqContent, 'utf-8');\n }\n\n // Archive audit file if exists\n const auditFile = path.join(cwd, '.planning', `${version}-MILESTONE-AUDIT.md`);\n if (await pathExistsInternal(auditFile)) {\n await fsp.rename(auditFile, path.join(archiveDir, `${version}-MILESTONE-AUDIT.md`));\n }\n\n // Create/append MILESTONES.md entry\n const accomplishmentsList = accomplishments.map(a => `- ${a}`).join('\\n');\n const milestoneEntry = `## ${version} ${milestoneName} (Shipped: ${today})\\n\\n**Phases completed:** ${phaseCount} phases, ${totalPlans} plans, ${totalTasks} tasks\\n\\n**Key accomplishments:**\\n${accomplishmentsList || '- (none recorded)'}\\n\\n---\\n\\n`;\n\n if (await pathExistsInternal(milestonesPath)) {\n const existing = await fsp.readFile(milestonesPath, 'utf-8');\n await fsp.writeFile(milestonesPath, existing + '\\n' + milestoneEntry, 'utf-8');\n } else {\n await fsp.writeFile(milestonesPath, `# Milestones\\n\\n${milestoneEntry}`, 'utf-8');\n }\n\n // Reset STATE.md to clean template\n if (stateExists) {\n const newMilestoneName = options.name || 'Next milestone';\n const cleanState = `# Project State\n\n## Project Reference\n\nSee: .planning/PROJECT.md (updated ${today})\n\n## Current Position\n\nMilestone: ${newMilestoneName}\nPhase: 0 of ? (not started)\nStatus: planning\nLast activity: ${today}\n\n## Performance Metrics\n\nNo plans executed yet in this milestone.\n\n## Accumulated Context\n\n### Decisions\n\nNone.\n\n### Pending Todos\n\nSee GitHub Issues with label 'todo' for open tasks.\n\n### Blockers/Concerns\n\nNone.\n\n## Session Continuity\n\nLast session: ${today}\n`;\n await fsp.writeFile(statePath, cleanState, 'utf-8');\n }\n\n // Archive phase directories if requested\n let phasesArchived = false;\n if (options.archivePhases) {\n try {\n const phaseArchiveDir = path.join(archiveDir, 'phases');\n await fsp.mkdir(phaseArchiveDir, { recursive: true });\n\n const phaseDirNames = await listSubDirs(phasesDir);\n for (const dir of phaseDirNames) {\n await fsp.rename(path.join(phasesDir, dir), path.join(phaseArchiveDir, dir));\n }\n phasesArchived = phaseDirNames.length > 0;\n } catch (e) {\n debugLog(e);\n }\n }\n\n const result: MilestoneResult = {\n version,\n name: milestoneName,\n date: today,\n phases: phaseCount,\n plans: totalPlans,\n tasks: totalTasks,\n accomplishments,\n archived: {\n roadmap: await pathExistsInternal(path.join(archiveDir, 'ROADMAP.md')),\n requirements: await pathExistsInternal(path.join(archiveDir, `${version}-REQUIREMENTS.md`)),\n audit: await pathExistsInternal(path.join(archiveDir, `${version}-MILESTONE-AUDIT.md`)),\n phases: phasesArchived,\n state_snapshot: await pathExistsInternal(path.join(archiveDir, 'STATE.md')),\n roadmap_snapshot: await pathExistsInternal(path.join(archiveDir, 'ROADMAP.md')),\n },\n milestones_updated: true,\n state_updated: stateExists,\n state_reset: stateExists,\n };\n\n return cmdOk(result);\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import process from 'node:process';\nimport os from 'node:os';\nimport tty from 'node:tty';\n\n// From: https://github.com/sindresorhus/has-flag/blob/main/index.js\n/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {\nfunction hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n}\n\nconst {env} = process;\n\nlet flagForceColor;\nif (\n\thasFlag('no-color')\n\t|| hasFlag('no-colors')\n\t|| hasFlag('color=false')\n\t|| hasFlag('color=never')\n) {\n\tflagForceColor = 0;\n} else if (\n\thasFlag('color')\n\t|| hasFlag('colors')\n\t|| hasFlag('color=true')\n\t|| hasFlag('color=always')\n) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3,\n\t};\n}\n\nfunction _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m')\n\t\t\t|| hasFlag('color=full')\n\t\t\t|| hasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\t// Check for Azure DevOps pipelines.\n\t// Has to be above the `!streamIsTTY` check.\n\tif ('TF_BUILD' in env && 'AGENT_NAME' in env) {\n\t\treturn 1;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10\n\t\t\t&& Number(osRelease[2]) >= 10_586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14_931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['GITHUB_ACTIONS', 'GITEA_ACTIONS', 'CIRCLECI'].some(key => key in env)) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (['TRAVIS', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-kitty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'xterm-ghostty') {\n\t\treturn 3;\n\t}\n\n\tif (env.TERM === 'wezterm') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app': {\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\t}\n\n\t\t\tcase 'Apple_Terminal': {\n\t\t\t\treturn 2;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nexport function createSupportsColor(stream, options = {}) {\n\tconst level = _supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options,\n\t});\n\n\treturn translateLevel(level);\n}\n\nconst supportsColor = {\n\tstdout: createSupportsColor({isTTY: tty.isatty(1)}),\n\tstderr: createSupportsColor({isTTY: tty.isatty(2)}),\n};\n\nexport default supportsColor;\n","// TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.\nexport function stringReplaceAll(string, substring, replacer) {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.slice(endIndex, index) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n\nexport function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.slice(endIndex, (gotCR ? index - 1 : index)) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.slice(endIndex);\n\treturn returnValue;\n}\n","import ansiStyles from '#ansi-styles';\nimport supportsColor from '#supports-color';\nimport { // eslint-disable-line import/order\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex,\n} from './utilities.js';\n\nconst {stdout: stdoutColor, stderr: stderrColor} = supportsColor;\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nexport class Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn ansiStyles[type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn ansiStyles[type].ansi256(ansiStyles.rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn ansiStyles[type].ansi(ansiStyles.rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ...ansiStyles.hexToRgb(...arguments_));\n\t}\n\n\treturn ansiStyles[type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), ansiStyles.color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), ansiStyles.bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nexport const chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\nexport {\n\tmodifierNames,\n\tforegroundColorNames,\n\tbackgroundColorNames,\n\tcolorNames,\n\n\t// TODO: Remove these aliases in the next major version\n\tmodifierNames as modifiers,\n\tforegroundColorNames as foregroundColors,\n\tbackgroundColorNames as backgroundColors,\n\tcolorNames as colors,\n} from './vendor/ansi-styles/index.js';\n\nexport {\n\tstdoutColor as supportsColor,\n\tstderrColor as supportsColorStderr,\n};\n\nexport default chalk;\n","/**\n * Commands — Standalone utility commands\n *\n * Ported from maxsim/bin/lib/commands.cjs\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport chalk from 'chalk';\nimport slugify from 'slugify';\nimport {\n safeReadFile,\n loadConfig,\n isGitIgnored,\n execGit,\n normalizePhaseName,\n getArchivedPhaseDirs,\n generateSlugInternal,\n getMilestoneInfo,\n resolveModelInternal,\n MODEL_PROFILES,\n rethrowCliSignals,\n findPhaseInternal,\n todayISO,\n phasesPath,\n listSubDirs,\n isSummaryFile,\n debugLog,\n} from './core.js';\nimport { extractFrontmatter } from './frontmatter.js';\nimport type {\n HistoryDigest,\n HistoryPhaseDigest,\n WebSearchOptions,\n WebSearchResult,\n ScaffoldOptions,\n TimestampFormat,\n ModelProfileName,\n AgentType,\n FrontmatterData,\n CmdResult,\n} from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Slug generation ────────────────────────────────────────────────────────\n\nexport function cmdGenerateSlug(text: string | undefined, raw: boolean): CmdResult {\n if (!text) {\n return cmdErr('text required for slug generation');\n }\n\n const slug = slugify(text, { lower: true, strict: true });\n\n const result = { slug };\n return cmdOk(result, raw ? slug : undefined);\n}\n\n// ─── Timestamp ──────────────────────────────────────────────────────────────\n\nexport function cmdCurrentTimestamp(format: TimestampFormat, raw: boolean): CmdResult {\n const now = new Date();\n let result: string;\n\n switch (format) {\n case 'date':\n result = todayISO();\n break;\n case 'filename':\n result = now.toISOString().replace(/:/g, '-').replace(/\\..+/, '');\n break;\n case 'full':\n default:\n result = now.toISOString();\n break;\n }\n\n return cmdOk({ timestamp: result }, raw ? result : undefined);\n}\n\n// ─── Path verification ──────────────────────────────────────────────────────\n\nexport function cmdVerifyPathExists(cwd: string, targetPath: string | undefined, raw: boolean): CmdResult {\n if (!targetPath) {\n return cmdErr('path required for verification');\n }\n\n const fullPath = path.isAbsolute(targetPath) ? targetPath : path.join(cwd, targetPath);\n\n try {\n const stats = fs.statSync(fullPath);\n const type = stats.isDirectory() ? 'directory' : stats.isFile() ? 'file' : 'other';\n const result = { exists: true, type };\n return cmdOk(result, raw ? 'true' : undefined);\n } catch (e: unknown) {\n rethrowCliSignals(e);\n const result = { exists: false, type: null };\n return cmdOk(result, raw ? 'false' : undefined);\n }\n}\n\n// ─── History digest ─────────────────────────────────────────────────────────\n\n// TODO(github-ssot): Eventually read summary data from GitHub Issue comments\n// instead of local SUMMARY.md files. For now, local file reading is the primary\n// path since archived phases still have local files and frontmatter extraction\n// is tightly coupled to the local YAML format.\nexport async function cmdHistoryDigest(cwd: string, raw: boolean): Promise<CmdResult> {\n const phasesDir = phasesPath(cwd);\n const digest: {\n phases: Record<string, { name: string; provides: Set<string>; affects: Set<string>; patterns: Set<string> }>;\n decisions: Array<{ phase: string; decision: string }>;\n tech_stack: Set<string> | string[];\n } = { phases: {}, decisions: [], tech_stack: new Set<string>() };\n\n // Collect all phase directories: archived + current\n const allPhaseDirs: Array<{ name: string; fullPath: string; milestone: string | null }> = [];\n\n // Add archived phases first (oldest milestones first)\n const archived = await getArchivedPhaseDirs(cwd);\n for (const a of archived) {\n allPhaseDirs.push({ name: a.name, fullPath: a.fullPath, milestone: a.milestone });\n }\n\n // Add current phases\n if (fs.existsSync(phasesDir)) {\n try {\n const currentDirs = await listSubDirs(phasesDir, true);\n for (const dir of currentDirs) {\n allPhaseDirs.push({ name: dir, fullPath: path.join(phasesDir, dir), milestone: null });\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n }\n\n if (allPhaseDirs.length === 0) {\n const emptyDigest: HistoryDigest = { phases: {}, decisions: [], tech_stack: [] };\n return cmdOk(emptyDigest);\n }\n\n try {\n for (const { name: dir, fullPath: dirPath } of allPhaseDirs) {\n const summaries = fs.readdirSync(dirPath).filter(f => isSummaryFile(f));\n\n for (const summary of summaries) {\n try {\n const content = fs.readFileSync(path.join(dirPath, summary), 'utf-8');\n const fm = extractFrontmatter(content);\n\n const phaseNum = (fm.phase as string) || dir.split('-')[0];\n\n if (!digest.phases[phaseNum]) {\n digest.phases[phaseNum] = {\n name: (fm.name as string) || dir.split('-').slice(1).join(' ') || 'Unknown',\n provides: new Set<string>(),\n affects: new Set<string>(),\n patterns: new Set<string>(),\n };\n }\n\n // Merge provides\n const depGraph = fm['dependency-graph'] as FrontmatterData | undefined;\n if (depGraph && depGraph.provides) {\n (depGraph.provides as string[]).forEach(p => digest.phases[phaseNum].provides.add(p));\n } else if (fm.provides) {\n (fm.provides as string[]).forEach(p => digest.phases[phaseNum].provides.add(p));\n }\n\n // Merge affects\n if (depGraph && depGraph.affects) {\n (depGraph.affects as string[]).forEach(a => digest.phases[phaseNum].affects.add(a));\n }\n\n // Merge patterns\n if (fm['patterns-established']) {\n (fm['patterns-established'] as string[]).forEach(p => digest.phases[phaseNum].patterns.add(p));\n }\n\n // Merge decisions\n if (fm['key-decisions']) {\n (fm['key-decisions'] as string[]).forEach(d => {\n digest.decisions.push({ phase: phaseNum, decision: d });\n });\n }\n\n // Merge tech stack\n const techStack = fm['tech-stack'] as FrontmatterData | undefined;\n if (techStack && techStack.added) {\n (techStack.added as Array<string | FrontmatterData>).forEach(t =>\n (digest.tech_stack as Set<string>).add(typeof t === 'string' ? t : (t as FrontmatterData).name as string)\n );\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n }\n }\n\n // Convert Sets to Arrays for JSON output\n const outputDigest: HistoryDigest = {\n phases: {},\n decisions: digest.decisions,\n tech_stack: [...(digest.tech_stack as Set<string>)],\n };\n for (const [p, data] of Object.entries(digest.phases)) {\n outputDigest.phases[p] = {\n name: data.name,\n provides: [...data.provides],\n affects: [...data.affects],\n patterns: [...data.patterns],\n };\n }\n\n return cmdOk(outputDigest);\n } catch (e: unknown) {\n rethrowCliSignals(e);\n return cmdErr('Failed to generate history digest: ' + (e as Error).message);\n }\n}\n\n// ─── Model resolution ───────────────────────────────────────────────────────\n\nexport async function cmdResolveModel(cwd: string, agentType: string | undefined, raw: boolean): Promise<CmdResult> {\n if (!agentType) {\n return cmdErr('agent-type required');\n }\n\n const config = await loadConfig(cwd);\n const profile: ModelProfileName = config.model_profile || 'balanced';\n\n const agentModels = MODEL_PROFILES[agentType as AgentType];\n if (!agentModels) {\n const result = { model: 'sonnet', profile, unknown_agent: true };\n return cmdOk(result, raw ? 'sonnet' : undefined);\n }\n\n const resolved = agentModels[profile] || agentModels['balanced'] || 'sonnet';\n const model = resolved === 'opus' ? 'inherit' : resolved;\n const result = { model, profile };\n return cmdOk(result, raw ? model : undefined);\n}\n\n// ─── Commit ─────────────────────────────────────────────────────────────────\n\nexport async function cmdCommit(\n cwd: string,\n message: string | undefined,\n files: string[],\n raw: boolean,\n amend: boolean,\n): Promise<CmdResult> {\n if (!message && !amend) {\n return cmdErr('commit message required');\n }\n\n const config = await loadConfig(cwd);\n\n // Check commit_docs config\n if (!config.commit_docs) {\n const result = { committed: false, hash: null, reason: 'skipped_commit_docs_false' };\n return cmdOk(result, raw ? 'skipped' : undefined);\n }\n\n // Check if .planning is gitignored\n if (await isGitIgnored(cwd, '.planning')) {\n const result = { committed: false, hash: null, reason: 'skipped_gitignored' };\n return cmdOk(result, raw ? 'skipped' : undefined);\n }\n\n // Stage files\n const filesToStage = files && files.length > 0 ? files : ['.planning/'];\n for (const file of filesToStage) {\n await execGit(cwd, ['add', file]);\n }\n\n // Commit\n const commitArgs = amend ? ['commit', '--amend', '--no-edit'] : ['commit', '-m', message!];\n const commitResult = await execGit(cwd, commitArgs);\n if (commitResult.exitCode !== 0) {\n if (commitResult.stdout.includes('nothing to commit') || commitResult.stderr.includes('nothing to commit')) {\n const result = { committed: false, hash: null, reason: 'nothing_to_commit' };\n return cmdOk(result, raw ? 'nothing' : undefined);\n }\n const result = { committed: false, hash: null, reason: 'nothing_to_commit', error: commitResult.stderr };\n return cmdOk(result, raw ? 'nothing' : undefined);\n }\n\n // Get short hash\n const hashResult = await execGit(cwd, ['rev-parse', '--short', 'HEAD']);\n const hash = hashResult.exitCode === 0 ? hashResult.stdout : null;\n const result = { committed: true, hash, reason: 'committed' };\n return cmdOk(result, raw ? (hash || 'committed') : undefined);\n}\n\n// ─── Summary extract ────────────────────────────────────────────────────────\n\nexport function cmdSummaryExtract(\n cwd: string,\n summaryPath: string | undefined,\n fields: string[] | null,\n raw: boolean,\n): CmdResult {\n if (!summaryPath) {\n return cmdErr('summary-path required for summary-extract');\n }\n\n const fullPath = path.join(cwd, summaryPath);\n\n if (!fs.existsSync(fullPath)) {\n return cmdOk({ error: 'File not found', path: summaryPath });\n }\n\n const content = fs.readFileSync(fullPath, 'utf-8');\n const fm = extractFrontmatter(content);\n\n // Parse key-decisions into structured format\n const parseDecisions = (decisionsList: unknown): Array<{ summary: string; rationale: string | null }> => {\n if (!decisionsList || !Array.isArray(decisionsList)) return [];\n return decisionsList.map((d: string) => {\n const colonIdx = d.indexOf(':');\n if (colonIdx > 0) {\n return {\n summary: d.substring(0, colonIdx).trim(),\n rationale: d.substring(colonIdx + 1).trim(),\n };\n }\n return { summary: d, rationale: null };\n });\n };\n\n const techStack = fm['tech-stack'] as FrontmatterData | undefined;\n\n // Build full result\n const fullResult: Record<string, unknown> = {\n path: summaryPath,\n one_liner: fm['one-liner'] || null,\n key_files: fm['key-files'] || [],\n tech_added: (techStack && techStack.added) || [],\n patterns: fm['patterns-established'] || [],\n decisions: parseDecisions(fm['key-decisions']),\n requirements_completed: fm['requirements-completed'] || [],\n };\n\n // If fields specified, filter to only those fields\n if (fields && fields.length > 0) {\n const filtered: Record<string, unknown> = { path: summaryPath };\n for (const field of fields) {\n if (fullResult[field] !== undefined) {\n filtered[field] = fullResult[field];\n }\n }\n return cmdOk(filtered);\n }\n\n return cmdOk(fullResult);\n}\n\n// ─── Web search ─────────────────────────────────────────────────────────────\n\nexport async function cmdWebsearch(\n query: string | undefined,\n options: WebSearchOptions,\n raw: boolean,\n): Promise<CmdResult> {\n const apiKey = process.env.BRAVE_API_KEY;\n\n if (!apiKey) {\n return cmdOk({ available: false, reason: 'BRAVE_API_KEY not set' }, raw ? '' : undefined);\n }\n\n if (!query) {\n return cmdOk({ available: false, error: 'Query required' }, raw ? '' : undefined);\n }\n\n const params = new URLSearchParams({\n q: query,\n count: String(options.limit || 10),\n country: 'us',\n search_lang: 'en',\n text_decorations: 'false',\n });\n\n if (options.freshness) {\n params.set('freshness', options.freshness);\n }\n\n try {\n const response = await fetch(\n `https://api.search.brave.com/res/v1/web/search?${params}`,\n {\n headers: {\n Accept: 'application/json',\n 'X-Subscription-Token': apiKey,\n },\n },\n );\n\n if (!response.ok) {\n return cmdOk({ available: false, error: `API error: ${response.status}` }, raw ? '' : undefined);\n }\n\n const data = (await response.json()) as { web?: { results?: Array<{ title: string; url: string; description: string; age?: string }> } };\n\n const results: WebSearchResult[] = (data.web?.results || []).map(r => ({\n title: r.title,\n url: r.url,\n description: r.description,\n age: r.age || null,\n }));\n\n return cmdOk(\n {\n available: true,\n query,\n count: results.length,\n results,\n },\n raw ? results.map(r => `${r.title}\\n${r.url}\\n${r.description}`).join('\\n\\n') : undefined,\n );\n } catch (err: unknown) {\n rethrowCliSignals(err);\n return cmdOk({ available: false, error: (err as Error).message }, raw ? '' : undefined);\n }\n}\n\n// ─── Progress render ────────────────────────────────────────────────────────\n\nexport async function cmdProgressRender(cwd: string, format: string, raw: boolean): Promise<CmdResult> {\n const phasesDir = phasesPath(cwd);\n const milestone = await getMilestoneInfo(cwd);\n\n const phases: Array<{ number: string; name: string; plans: number; summaries: number; status: string }> = [];\n let totalPlans = 0;\n let totalSummaries = 0;\n\n // Try GitHub first for progress data\n let usedGitHub = false;\n try {\n const { loadMapping } = await import('../github/mapping.js');\n const mapping = loadMapping(cwd);\n if (mapping && Object.keys(mapping.phases).length > 0) {\n const { getAllPhasesProgress } = await import('../github/sync.js');\n const ghResult = await getAllPhasesProgress();\n if (ghResult.ok && ghResult.data.length > 0) {\n for (const p of ghResult.data) {\n const planCount = p.progress.total;\n const summaryCount = p.progress.completed;\n totalPlans += planCount;\n totalSummaries += summaryCount;\n\n let status: string;\n if (planCount === 0) status = 'Pending';\n else if (summaryCount >= planCount) status = 'Complete';\n else if (summaryCount > 0) status = 'In Progress';\n else status = 'Planned';\n\n // Extract name from title: \"[Phase XX] Name\" -> \"Name\"\n const titleMatch = p.title.match(/\\[Phase\\s+\\S+\\]\\s*(.*)/);\n const phaseName = titleMatch ? titleMatch[1].replace(/-/g, ' ') : '';\n\n phases.push({ number: p.phaseNumber, name: phaseName, plans: planCount, summaries: summaryCount, status });\n }\n usedGitHub = true;\n }\n }\n } catch (e) {\n // GitHub not available — fall through to local scanning\n debugLog('progress-render-github-fallback', e);\n }\n\n // GitHub is the single source of truth for progress data.\n // If GitHub data is unavailable, phases array remains empty.\n\n const percent = totalPlans > 0 ? Math.min(100, Math.round((totalSummaries / totalPlans) * 100)) : 0;\n\n if (format === 'table') {\n const barWidth = 10;\n const filled = Math.round((percent / 100) * barWidth);\n const bar = '\\u2588'.repeat(filled) + '\\u2591'.repeat(barWidth - filled);\n let out = `# ${milestone.version} ${milestone.name}\\n\\n`;\n out += `**Progress:** [${bar}] ${totalSummaries}/${totalPlans} plans (${percent}%)\\n\\n`;\n out += `| Phase | Name | Plans | Status |\\n`;\n out += `|-------|------|-------|--------|\\n`;\n for (const p of phases) {\n out += `| ${p.number} | ${p.name} | ${p.summaries}/${p.plans} | ${p.status} |\\n`;\n }\n return cmdOk({ rendered: out }, raw ? out : undefined);\n } else if (format === 'bar') {\n const barWidth = 20;\n const filled = Math.round((percent / 100) * barWidth);\n const bar = '\\u2588'.repeat(filled) + '\\u2591'.repeat(barWidth - filled);\n const text = `[${bar}] ${totalSummaries}/${totalPlans} plans (${percent}%)`;\n return cmdOk({ bar: text, percent, completed: totalSummaries, total: totalPlans }, raw ? text : undefined);\n } else if (format === 'phase-bars') {\n const doneCount = phases.filter(p => p.status === 'Complete').length;\n const inProgressCount = phases.filter(p => p.status === 'In Progress').length;\n const totalCount = phases.length;\n const header = chalk.bold(\n `Milestone: ${milestone.name} — ${doneCount}/${totalCount} phases complete (${percent}%)`\n );\n const lines: string[] = [header, ''];\n\n for (const p of phases) {\n const pPercent =\n p.plans > 0 ? Math.min(100, Math.round((p.summaries / p.plans) * 100)) : 0;\n const barWidth = 10;\n const filled = Math.round((pPercent / 100) * barWidth);\n const bar = '\\u2588'.repeat(filled) + '\\u2591'.repeat(barWidth - filled);\n const phaseLabel = `Phase ${p.number.padStart(2, '0')}`;\n const statusLabel =\n p.status === 'Complete'\n ? 'DONE'\n : p.status === 'In Progress'\n ? 'IN PROGRESS'\n : 'PLANNED';\n\n let line = `${phaseLabel} [${bar}] ${String(pPercent).padStart(3, ' ')}% — ${statusLabel}`;\n if (p.status === 'Complete') line = chalk.green(line);\n else if (p.status === 'In Progress') line = chalk.yellow(line);\n else line = chalk.dim(line);\n\n lines.push(line);\n }\n\n const rendered = lines.join('\\n');\n return cmdOk({ rendered, done: doneCount, in_progress: inProgressCount, total: totalCount, percent }, raw ? rendered : undefined);\n } else {\n return cmdOk({\n milestone_version: milestone.version,\n milestone_name: milestone.name,\n phases,\n total_plans: totalPlans,\n total_summaries: totalSummaries,\n percent,\n });\n }\n}\n\n// ─── Scaffold ───────────────────────────────────────────────────────────────\n\nexport async function cmdScaffold(\n cwd: string,\n type: string | undefined,\n options: ScaffoldOptions,\n raw: boolean,\n): Promise<CmdResult> {\n const { phase, name } = options;\n const padded = phase ? normalizePhaseName(phase) : '00';\n const today = todayISO();\n\n // Find phase directory\n const phaseInfo = phase ? await findPhaseInternal(cwd, phase) : null;\n const phaseDir = phaseInfo ? path.join(cwd, phaseInfo.directory) : null;\n\n if (phase && !phaseDir && type !== 'phase-dir') {\n return cmdErr(`Phase ${phase} directory not found`);\n }\n\n switch (type) {\n case 'context':\n case 'uat':\n case 'verification':\n return cmdErr(`Artifact type '${type}' is now stored as GitHub Issue comments. Use GitHub workflow commands instead.`);\n case 'phase-dir': {\n if (!phase || !name) {\n return cmdErr('phase and name required for phase-dir scaffold');\n }\n const slug = generateSlugInternal(name);\n const dirName = `${padded}-${slug}`;\n const phasesParent = phasesPath(cwd);\n fs.mkdirSync(phasesParent, { recursive: true });\n const dirPath = path.join(phasesParent, dirName);\n fs.mkdirSync(dirPath, { recursive: true });\n return cmdOk({ created: true, directory: `.planning/phases/${dirName}`, path: dirPath }, raw ? dirPath : undefined);\n }\n default:\n return cmdErr(`Unknown scaffold type: ${type}. Available: phase-dir`);\n }\n}\n","/**\n * Verify — Verification suite, consistency, and health validation\n *\n * Ported from maxsim/bin/lib/verify.cjs\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport {\n safeReadFile,\n normalizePhaseName,\n getPhasePattern,\n execGit,\n findPhaseInternal,\n getMilestoneInfo,\n planId,\n summaryId,\n roadmapPath as roadmapPathUtil,\n phasesPath,\n planningPath,\n statePath as statePathUtil,\n configPath as configPathUtil,\n listSubDirs,\n debugLog,\n todayISO,\n} from './core.js';\nimport { extractFrontmatter, parseMustHavesBlock } from './frontmatter.js';\nimport type { CmdResult, FrontmatterData } from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Interfaces ──────────────────────────────────────────────────────────────\n\nexport interface ValidationError {\n code?: string;\n message: string;\n fix?: string;\n repairable?: boolean;\n}\n\nexport interface ValidationWarning {\n code?: string;\n message: string;\n fix?: string;\n repairable?: boolean;\n}\n\nexport interface TaskInfo {\n name: string;\n hasFiles: boolean;\n hasAction: boolean;\n hasVerify: boolean;\n hasDone: boolean;\n}\n\nexport interface VerificationResult {\n passed: boolean;\n checks: {\n summary_exists: boolean;\n files_created: { checked: number; found: number; missing: string[] };\n commits_exist: boolean;\n self_check: 'not_found' | 'passed' | 'failed';\n };\n errors: string[];\n}\n\nexport interface PlanStructureResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n task_count: number;\n tasks: TaskInfo[];\n frontmatter_fields: string[];\n}\n\nexport interface PhaseCompletenessResult {\n complete: boolean;\n phase: string;\n plan_count: number;\n summary_count: number;\n incomplete_plans: string[];\n orphan_summaries: string[];\n errors: string[];\n warnings: string[];\n}\n\nexport interface ReferencesResult {\n valid: boolean;\n found: number;\n missing: string[];\n total: number;\n}\n\nexport interface CommitsResult {\n all_valid: boolean;\n valid: string[];\n invalid: string[];\n total: number;\n}\n\nexport interface ArtifactCheck {\n path: string;\n exists: boolean;\n issues: string[];\n passed: boolean;\n}\n\nexport interface ArtifactsResult {\n all_passed: boolean;\n passed: number;\n total: number;\n artifacts: ArtifactCheck[];\n}\n\nexport interface KeyLinkCheck {\n from: string;\n to: string;\n via: string;\n verified: boolean;\n detail: string;\n}\n\nexport interface KeyLinksResult {\n all_verified: boolean;\n verified: number;\n total: number;\n links: KeyLinkCheck[];\n}\n\nexport interface ConsistencyResult {\n passed: boolean;\n errors: string[];\n warnings: string[];\n warning_count: number;\n}\n\nexport interface HealthResult {\n status: 'healthy' | 'degraded' | 'broken';\n errors: ValidationError[];\n warnings: ValidationWarning[];\n info: ValidationError[];\n repairable_count: number;\n repairs_performed?: RepairAction[];\n}\n\ninterface RepairAction {\n action: string;\n success: boolean;\n path?: string;\n error?: string;\n}\n\ninterface HealthOptions {\n repair?: boolean;\n}\n\n// ─── Verify Summary ──────────────────────────────────────────────────────────\n\nexport async function cmdVerifySummary(\n cwd: string,\n summaryPath: string | null,\n checkFileCount: number | null,\n): Promise<CmdResult> {\n if (!summaryPath) {\n return cmdErr('summary-path required');\n }\n\n const fullPath = path.join(cwd, summaryPath);\n const checkCount = checkFileCount || 2;\n\n if (!fs.existsSync(fullPath)) {\n const result: VerificationResult = {\n passed: false,\n checks: {\n summary_exists: false,\n files_created: { checked: 0, found: 0, missing: [] },\n commits_exist: false,\n self_check: 'not_found',\n },\n errors: ['SUMMARY.md not found'],\n };\n return cmdOk(result, 'failed');\n }\n\n const content = fs.readFileSync(fullPath, 'utf-8');\n const errors: string[] = [];\n\n // Spot-check files mentioned in summary\n const mentionedFiles = new Set<string>();\n const patterns: RegExp[] = [\n /`([^`]+\\.[a-zA-Z]+)`/g,\n /(?:Created|Modified|Added|Updated|Edited):\\s*`?([^\\s`]+\\.[a-zA-Z]+)`?/gi,\n ];\n\n for (const pattern of patterns) {\n let m: RegExpExecArray | null;\n while ((m = pattern.exec(content)) !== null) {\n const filePath = m[1];\n if (filePath && !filePath.startsWith('http') && filePath.includes('/')) {\n mentionedFiles.add(filePath);\n }\n }\n }\n\n const filesToCheck = Array.from(mentionedFiles).slice(0, checkCount);\n const missing: string[] = [];\n for (const file of filesToCheck) {\n if (!fs.existsSync(path.join(cwd, file))) {\n missing.push(file);\n }\n }\n\n // Check commits exist\n const commitHashPattern = /\\b[0-9a-f]{7,40}\\b/g;\n const hashes = content.match(commitHashPattern) || [];\n let commitsExist = false;\n if (hashes.length > 0) {\n for (const hash of hashes.slice(0, 3)) {\n const result = await execGit(cwd, ['cat-file', '-t', hash]);\n if (result.exitCode === 0 && result.stdout === 'commit') {\n commitsExist = true;\n break;\n }\n }\n }\n\n // Self-check section\n let selfCheck: 'not_found' | 'passed' | 'failed' = 'not_found';\n const selfCheckPattern = /##\\s*(?:Self[- ]?Check|Verification|Quality Check)/i;\n if (selfCheckPattern.test(content)) {\n const passPattern = /(?:all\\s+)?(?:pass|✓|✅|complete|succeeded)/i;\n const failPattern = /(?:fail|✗|❌|incomplete|blocked)/i;\n const checkSection = content.slice(content.search(selfCheckPattern));\n if (failPattern.test(checkSection)) {\n selfCheck = 'failed';\n } else if (passPattern.test(checkSection)) {\n selfCheck = 'passed';\n }\n }\n\n if (missing.length > 0) errors.push('Missing files: ' + missing.join(', '));\n if (!commitsExist && hashes.length > 0) errors.push('Referenced commit hashes not found in git history');\n if (selfCheck === 'failed') errors.push('Self-check section indicates failure');\n\n const checks = {\n summary_exists: true,\n files_created: { checked: filesToCheck.length, found: filesToCheck.length - missing.length, missing },\n commits_exist: commitsExist,\n self_check: selfCheck,\n };\n\n const passed = missing.length === 0 && selfCheck !== 'failed';\n const result: VerificationResult = { passed, checks, errors };\n return cmdOk(result, passed ? 'passed' : 'failed');\n}\n\n// ─── Verify Plan Structure ───────────────────────────────────────────────────\n\nexport async function cmdVerifyPlanStructure(cwd: string, filePath: string | null): Promise<CmdResult> {\n if (!filePath) {\n return cmdErr('file path required');\n }\n const fullPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);\n const content = await safeReadFile(fullPath);\n if (!content) {\n return cmdOk({ error: 'File not found', path: filePath });\n }\n\n const fm = extractFrontmatter(content);\n const errors: string[] = [];\n const warnings: string[] = [];\n\n const required = ['phase', 'plan', 'type', 'wave', 'depends_on', 'files_modified', 'autonomous', 'must_haves'];\n for (const field of required) {\n if (fm[field] === undefined) errors.push(`Missing required frontmatter field: ${field}`);\n }\n\n const taskPattern = /<task[^>]*>([\\s\\S]*?)<\\/task>/g;\n const tasks: TaskInfo[] = [];\n let taskMatch: RegExpExecArray | null;\n while ((taskMatch = taskPattern.exec(content)) !== null) {\n const taskContent = taskMatch[1];\n const nameMatch = taskContent.match(/<name>([\\s\\S]*?)<\\/name>/);\n const taskName = nameMatch ? nameMatch[1].trim() : 'unnamed';\n const hasFiles = /<files>/.test(taskContent);\n const hasAction = /<action>/.test(taskContent);\n const hasVerify = /<verify>/.test(taskContent);\n const hasDone = /<done>/.test(taskContent);\n\n if (!nameMatch) errors.push('Task missing <name> element');\n if (!hasAction) errors.push(`Task '${taskName}' missing <action>`);\n if (!hasVerify) warnings.push(`Task '${taskName}' missing <verify>`);\n if (!hasDone) warnings.push(`Task '${taskName}' missing <done>`);\n if (!hasFiles) warnings.push(`Task '${taskName}' missing <files>`);\n\n tasks.push({ name: taskName, hasFiles, hasAction, hasVerify, hasDone });\n }\n\n if (tasks.length === 0) warnings.push('No <task> elements found');\n\n if (fm.wave && parseInt(String(fm.wave)) > 1 && (!fm.depends_on || (Array.isArray(fm.depends_on) && fm.depends_on.length === 0))) {\n warnings.push('Wave > 1 but depends_on is empty');\n }\n\n const hasCheckpoints = /<task\\s+type=[\"']?checkpoint/.test(content);\n if (hasCheckpoints && fm.autonomous !== 'false' && fm.autonomous !== false) {\n errors.push('Has checkpoint tasks but autonomous is not false');\n }\n\n const result: PlanStructureResult = {\n valid: errors.length === 0,\n errors,\n warnings,\n task_count: tasks.length,\n tasks,\n frontmatter_fields: Object.keys(fm),\n };\n return cmdOk(result, errors.length === 0 ? 'valid' : 'invalid');\n}\n\n// ─── Verify Phase Completeness ───────────────────────────────────────────────\n\nexport async function cmdVerifyPhaseCompleteness(cwd: string, phase: string | null): Promise<CmdResult> {\n if (!phase) {\n return cmdErr('phase required');\n }\n const phaseInfo = await findPhaseInternal(cwd, phase);\n if (!phaseInfo) {\n return cmdOk({ error: 'Phase not found', phase });\n }\n\n const errors: string[] = [];\n const warnings: string[] = [];\n\n // Use findPhaseInternal data (GitHub-first) for plan/summary info\n const plans = phaseInfo.plans;\n const summaries = phaseInfo.summaries;\n\n const planIds = new Set(plans.map(p => planId(p)));\n const summaryIds = new Set(summaries.map(s => summaryId(s)));\n\n const incompletePlans = [...planIds].filter(id => !summaryIds.has(id));\n if (incompletePlans.length > 0) {\n errors.push(`Plans without summaries: ${incompletePlans.join(', ')}`);\n }\n\n const orphanSummaries = [...summaryIds].filter(id => !planIds.has(id));\n if (orphanSummaries.length > 0) {\n warnings.push(`Summaries without plans: ${orphanSummaries.join(', ')}`);\n }\n\n const result: PhaseCompletenessResult = {\n complete: errors.length === 0,\n phase: phaseInfo.phase_number,\n plan_count: plans.length,\n summary_count: summaries.length,\n incomplete_plans: incompletePlans,\n orphan_summaries: orphanSummaries,\n errors,\n warnings,\n };\n return cmdOk(result, errors.length === 0 ? 'complete' : 'incomplete');\n}\n\n// ─── Verify References ───────────────────────────────────────────────────────\n\nexport async function cmdVerifyReferences(cwd: string, filePath: string | null): Promise<CmdResult> {\n if (!filePath) {\n return cmdErr('file path required');\n }\n const fullPath = path.isAbsolute(filePath) ? filePath : path.join(cwd, filePath);\n const content = await safeReadFile(fullPath);\n if (!content) {\n return cmdOk({ error: 'File not found', path: filePath });\n }\n\n const found: string[] = [];\n const missing: string[] = [];\n\n const atRefs = content.match(/@([^\\s\\n,)]+\\/[^\\s\\n,)]+)/g) || [];\n for (const ref of atRefs) {\n const cleanRef = ref.slice(1);\n const resolved = cleanRef.startsWith('~/')\n ? path.join(process.env.HOME || '', cleanRef.slice(2))\n : path.join(cwd, cleanRef);\n if (fs.existsSync(resolved)) {\n found.push(cleanRef);\n } else {\n missing.push(cleanRef);\n }\n }\n\n const backtickRefs = content.match(/`([^`]+\\/[^`]+\\.[a-zA-Z]{1,10})`/g) || [];\n for (const ref of backtickRefs) {\n const cleanRef = ref.slice(1, -1);\n if (cleanRef.startsWith('http') || cleanRef.includes('${') || cleanRef.includes('{{')) continue;\n if (found.includes(cleanRef) || missing.includes(cleanRef)) continue;\n const resolved = path.join(cwd, cleanRef);\n if (fs.existsSync(resolved)) {\n found.push(cleanRef);\n } else {\n missing.push(cleanRef);\n }\n }\n\n const result: ReferencesResult = {\n valid: missing.length === 0,\n found: found.length,\n missing,\n total: found.length + missing.length,\n };\n return cmdOk(result, missing.length === 0 ? 'valid' : 'invalid');\n}\n\n// ─── Verify Commits ──────────────────────────────────────────────────────────\n\nexport async function cmdVerifyCommits(cwd: string, hashes: string[]): Promise<CmdResult> {\n if (!hashes || hashes.length === 0) {\n return cmdErr('At least one commit hash required');\n }\n\n const valid: string[] = [];\n const invalid: string[] = [];\n for (const hash of hashes) {\n const result = await execGit(cwd, ['cat-file', '-t', hash]);\n if (result.exitCode === 0 && result.stdout.trim() === 'commit') {\n valid.push(hash);\n } else {\n invalid.push(hash);\n }\n }\n\n const commitResult: CommitsResult = {\n all_valid: invalid.length === 0,\n valid,\n invalid,\n total: hashes.length,\n };\n return cmdOk(commitResult, invalid.length === 0 ? 'valid' : 'invalid');\n}\n\n// ─── Verify Artifacts ────────────────────────────────────────────────────────\n\ninterface MustHaveArtifact {\n path?: string;\n min_lines?: number;\n contains?: string;\n exports?: string | string[];\n [key: string]: string | number | string[] | undefined;\n}\n\nexport async function cmdVerifyArtifacts(cwd: string, planFilePath: string | null): Promise<CmdResult> {\n if (!planFilePath) {\n return cmdErr('plan file path required');\n }\n const fullPath = path.isAbsolute(planFilePath) ? planFilePath : path.join(cwd, planFilePath);\n const content = await safeReadFile(fullPath);\n if (!content) {\n return cmdOk({ error: 'File not found', path: planFilePath });\n }\n\n const artifacts = parseMustHavesBlock(content, 'artifacts');\n if (artifacts.length === 0) {\n return cmdOk({ error: 'No must_haves.artifacts found in frontmatter', path: planFilePath });\n }\n\n const results: ArtifactCheck[] = [];\n for (const artifact of artifacts) {\n if (typeof artifact === 'string') continue;\n const artObj = artifact as MustHaveArtifact;\n const artPath = artObj.path;\n if (!artPath) continue;\n\n const artFullPath = path.join(cwd, artPath);\n const exists = fs.existsSync(artFullPath);\n const check: ArtifactCheck = { path: artPath, exists, issues: [], passed: false };\n\n if (exists) {\n const fileContent = await safeReadFile(artFullPath) || '';\n const lineCount = fileContent.split('\\n').length;\n\n if (artObj.min_lines && lineCount < artObj.min_lines) {\n check.issues.push(`Only ${lineCount} lines, need ${artObj.min_lines}`);\n }\n if (artObj.contains && !fileContent.includes(artObj.contains)) {\n check.issues.push(`Missing pattern: ${artObj.contains}`);\n }\n if (artObj.exports) {\n const exportList = Array.isArray(artObj.exports) ? artObj.exports : [artObj.exports];\n for (const exp of exportList) {\n if (!fileContent.includes(exp)) check.issues.push(`Missing export: ${exp}`);\n }\n }\n check.passed = check.issues.length === 0;\n } else {\n check.issues.push('File not found');\n }\n\n results.push(check);\n }\n\n const passed = results.filter(r => r.passed).length;\n const artifactsResult: ArtifactsResult = {\n all_passed: passed === results.length,\n passed,\n total: results.length,\n artifacts: results,\n };\n return cmdOk(artifactsResult, passed === results.length ? 'valid' : 'invalid');\n}\n\n// ─── Verify Key Links ────────────────────────────────────────────────────────\n\ninterface MustHaveKeyLink {\n from?: string;\n to?: string;\n via?: string;\n pattern?: string;\n [key: string]: string | number | string[] | undefined;\n}\n\nexport async function cmdVerifyKeyLinks(cwd: string, planFilePath: string | null): Promise<CmdResult> {\n if (!planFilePath) {\n return cmdErr('plan file path required');\n }\n const fullPath = path.isAbsolute(planFilePath) ? planFilePath : path.join(cwd, planFilePath);\n const content = await safeReadFile(fullPath);\n if (!content) {\n return cmdOk({ error: 'File not found', path: planFilePath });\n }\n\n const keyLinks = parseMustHavesBlock(content, 'key_links');\n if (keyLinks.length === 0) {\n return cmdOk({ error: 'No must_haves.key_links found in frontmatter', path: planFilePath });\n }\n\n const results: KeyLinkCheck[] = [];\n for (const link of keyLinks) {\n if (typeof link === 'string') continue;\n const linkObj = link as MustHaveKeyLink;\n const check: KeyLinkCheck = {\n from: linkObj.from || '',\n to: linkObj.to || '',\n via: linkObj.via || '',\n verified: false,\n detail: '',\n };\n\n const sourceContent = await safeReadFile(path.join(cwd, linkObj.from || ''));\n if (!sourceContent) {\n check.detail = 'Source file not found';\n } else if (linkObj.pattern) {\n try {\n const regex = new RegExp(linkObj.pattern);\n if (regex.test(sourceContent)) {\n check.verified = true;\n check.detail = 'Pattern found in source';\n } else {\n const targetContent = await safeReadFile(path.join(cwd, linkObj.to || ''));\n if (targetContent && regex.test(targetContent)) {\n check.verified = true;\n check.detail = 'Pattern found in target';\n } else {\n check.detail = `Pattern \"${linkObj.pattern}\" not found in source or target`;\n }\n }\n } catch {\n check.detail = `Invalid regex pattern: ${linkObj.pattern}`;\n }\n } else {\n if (sourceContent.includes(linkObj.to || '')) {\n check.verified = true;\n check.detail = 'Target referenced in source';\n } else {\n check.detail = 'Target not referenced in source';\n }\n }\n\n results.push(check);\n }\n\n const verified = results.filter(r => r.verified).length;\n const linksResult: KeyLinksResult = {\n all_verified: verified === results.length,\n verified,\n total: results.length,\n links: results,\n };\n return cmdOk(linksResult, verified === results.length ? 'valid' : 'invalid');\n}\n\n// ─── Requirement Validation ──────────────────────────────────────────────────\n\nexport interface RequirementExistenceResult {\n valid: boolean;\n missing: string[];\n found: string[];\n}\n\nexport interface RequirementStatusResult {\n valid: boolean;\n already_complete: string[];\n pending: string[];\n}\n\nexport interface EvidenceCompletenessResult {\n valid: boolean;\n missing_evidence: string[];\n has_evidence: string[];\n}\n\n/**\n * Gate G1: Validate that all requirement IDs from a plan's frontmatter exist in REQUIREMENTS.md.\n * Parses REQUIREMENTS.md for **{ID}**: patterns and checks each reqId is present.\n */\nexport async function validateRequirementExistence(\n cwd: string,\n reqIds: string[],\n): Promise<RequirementExistenceResult> {\n const reqPath = planningPath(cwd, 'REQUIREMENTS.md');\n const content = await safeReadFile(reqPath);\n if (!content) {\n return { valid: false, missing: reqIds, found: [] };\n }\n\n // Parse all requirement IDs from REQUIREMENTS.md (pattern: **{ID}**)\n const idPattern = /\\*\\*([A-Z]+-\\d+)\\*\\*/g;\n const existingIds = new Set<string>();\n let m: RegExpExecArray | null;\n while ((m = idPattern.exec(content)) !== null) {\n existingIds.add(m[1]);\n }\n\n const found: string[] = [];\n const missing: string[] = [];\n for (const id of reqIds) {\n const trimmed = id.trim();\n if (!trimmed) continue;\n if (existingIds.has(trimmed)) {\n found.push(trimmed);\n } else {\n missing.push(trimmed);\n }\n }\n\n return { valid: missing.length === 0, missing, found };\n}\n\nexport async function cmdValidateRequirementExistence(\n cwd: string,\n reqIds: string[],\n): Promise<CmdResult> {\n if (!reqIds || reqIds.length === 0) {\n return cmdErr('At least one requirement ID required');\n }\n const result = await validateRequirementExistence(cwd, reqIds);\n return cmdOk(result, result.valid ? 'valid' : 'invalid');\n}\n\n/**\n * Gate G2: Validate that requirement IDs are not already marked Complete in REQUIREMENTS.md.\n * Checks checkbox status: [x] = complete, [ ] = pending.\n */\nexport async function validateRequirementStatus(\n cwd: string,\n reqIds: string[],\n): Promise<RequirementStatusResult> {\n const reqPath = planningPath(cwd, 'REQUIREMENTS.md');\n const content = await safeReadFile(reqPath);\n if (!content) {\n return { valid: true, already_complete: [], pending: reqIds };\n }\n\n // Parse lines to find checkbox + requirement ID patterns\n // Pattern: - [x] **ID**: or - [ ] **ID**:\n const lines = content.split('\\n');\n const statusMap = new Map<string, boolean>();\n for (const line of lines) {\n const match = line.match(/^-\\s*\\[([ xX])\\]\\s*\\*\\*([A-Z]+-\\d+)\\*\\*/);\n if (match) {\n const isComplete = match[1].toLowerCase() === 'x';\n statusMap.set(match[2], isComplete);\n }\n }\n\n const already_complete: string[] = [];\n const pending: string[] = [];\n for (const id of reqIds) {\n const trimmed = id.trim();\n if (!trimmed) continue;\n if (statusMap.get(trimmed) === true) {\n already_complete.push(trimmed);\n } else {\n pending.push(trimmed);\n }\n }\n\n return { valid: already_complete.length === 0, already_complete, pending };\n}\n\nexport async function cmdValidateRequirementStatus(\n cwd: string,\n reqIds: string[],\n): Promise<CmdResult> {\n if (!reqIds || reqIds.length === 0) {\n return cmdErr('At least one requirement ID required');\n }\n const result = await validateRequirementStatus(cwd, reqIds);\n return cmdOk(result, result.valid ? 'valid' : 'invalid');\n}\n\n/**\n * Gate G6: Validate that SUMMARY.md has evidence for each requirement ID.\n * Parses the ## Requirement Evidence section table rows and checks Status != UNMET.\n */\nexport async function validateEvidenceCompleteness(\n summaryPath: string,\n reqIds: string[],\n): Promise<EvidenceCompletenessResult> {\n const content = await safeReadFile(summaryPath);\n if (!content) {\n return { valid: false, missing_evidence: reqIds, has_evidence: [] };\n }\n\n // Find the ## Requirement Evidence section (up to next heading, horizontal rule, or end of file)\n const sectionMatch = content.match(/##\\s*Requirement Evidence[\\s\\S]*?(?=\\n##\\s|\\n---\\s*\\n|$)/);\n if (!sectionMatch) {\n return { valid: false, missing_evidence: reqIds, has_evidence: [] };\n }\n\n const section = sectionMatch[0];\n\n // Parse table rows for requirement IDs and their status\n // Table format: | REQ-ID | evidence text | MET/PARTIAL/UNMET |\n const evidenceIds = new Map<string, string>();\n const rowPattern = /\\|\\s*([A-Z]+-\\d+)\\s*\\|[^|]*\\|\\s*(\\w+)\\s*\\|/g;\n let rm: RegExpExecArray | null;\n while ((rm = rowPattern.exec(section)) !== null) {\n evidenceIds.set(rm[1], rm[2].toUpperCase());\n }\n\n const has_evidence: string[] = [];\n const missing_evidence: string[] = [];\n for (const id of reqIds) {\n const trimmed = id.trim();\n if (!trimmed) continue;\n const status = evidenceIds.get(trimmed);\n if (status && status !== 'UNMET') {\n has_evidence.push(trimmed);\n } else {\n missing_evidence.push(trimmed);\n }\n }\n\n return { valid: missing_evidence.length === 0, missing_evidence, has_evidence };\n}\n\nexport async function cmdValidateEvidenceCompleteness(\n cwd: string,\n summaryFilePath: string | null,\n reqIds: string[],\n): Promise<CmdResult> {\n if (!summaryFilePath) {\n return cmdErr('summary file path required');\n }\n if (!reqIds || reqIds.length === 0) {\n return cmdErr('At least one requirement ID required');\n }\n const fullPath = path.isAbsolute(summaryFilePath) ? summaryFilePath : path.join(cwd, summaryFilePath);\n const result = await validateEvidenceCompleteness(fullPath, reqIds);\n return cmdOk(result, result.valid ? 'valid' : 'invalid');\n}\n\n// ─── Validate Consistency ────────────────────────────────────────────────────\n\nexport async function cmdValidateConsistency(cwd: string): Promise<CmdResult> {\n const rmPath = roadmapPathUtil(cwd);\n const phasesDir = phasesPath(cwd);\n const errors: string[] = [];\n const warnings: string[] = [];\n\n if (!fs.existsSync(rmPath)) {\n errors.push('ROADMAP.md not found');\n return cmdOk({ passed: false, errors, warnings }, 'failed');\n }\n\n const roadmapContent = fs.readFileSync(rmPath, 'utf-8');\n\n const roadmapPhases = new Set<string>();\n const phasePattern = getPhasePattern();\n let m: RegExpExecArray | null;\n while ((m = phasePattern.exec(roadmapContent)) !== null) {\n roadmapPhases.add(m[1]);\n }\n\n const diskPhases = new Set<string>();\n try {\n const dirs = await listSubDirs(phasesDir);\n for (const dir of dirs) {\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n if (dm) diskPhases.add(dm[1]);\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n\n for (const p of roadmapPhases) {\n if (!diskPhases.has(p) && !diskPhases.has(normalizePhaseName(p))) {\n warnings.push(`Phase ${p} in ROADMAP.md but no directory on disk`);\n }\n }\n\n for (const p of diskPhases) {\n const unpadded = String(parseInt(p, 10));\n if (!roadmapPhases.has(p) && !roadmapPhases.has(unpadded)) {\n warnings.push(`Phase ${p} exists on disk but not in ROADMAP.md`);\n }\n }\n\n const integerPhases = [...diskPhases]\n .filter(p => !p.includes('.'))\n .map(p => parseInt(p, 10))\n .sort((a, b) => a - b);\n\n for (let i = 1; i < integerPhases.length; i++) {\n if (integerPhases[i] !== integerPhases[i - 1] + 1) {\n warnings.push(`Gap in phase numbering: ${integerPhases[i - 1]} → ${integerPhases[i]}`);\n }\n }\n\n // Plan/summary consistency is now tracked via GitHub Issues.\n // Plan numbering and orphan summary checks are handled by findPhaseInternal.\n try {\n const dirs = await listSubDirs(phasesDir, true);\n for (const dir of dirs) {\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n if (!dm) continue;\n const phaseInfo = await findPhaseInternal(cwd, dm[1]);\n if (!phaseInfo) continue;\n\n const planIdsSet = new Set(phaseInfo.plans.map(p => planId(p)));\n const summaryIdsSet = new Set(phaseInfo.summaries.map(s => summaryId(s)));\n\n for (const sid of summaryIdsSet) {\n if (!planIdsSet.has(sid)) {\n warnings.push(`Summary ${sid}-SUMMARY.md in ${dir} has no matching PLAN.md`);\n }\n }\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n\n const passed = errors.length === 0;\n const result: ConsistencyResult = { passed, errors, warnings, warning_count: warnings.length };\n return cmdOk(result, passed ? 'passed' : 'failed');\n}\n\n// ─── Validate Health ─────────────────────────────────────────────────────────\n\nexport async function cmdValidateHealth(cwd: string, options: HealthOptions): Promise<CmdResult> {\n const planningDir = planningPath(cwd);\n const projectPath = planningPath(cwd, 'PROJECT.md');\n const rmPath = roadmapPathUtil(cwd);\n const stPath = statePathUtil(cwd);\n const cfgPath = configPathUtil(cwd);\n const phasesDir = phasesPath(cwd);\n\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n const info: ValidationError[] = [];\n const repairs: string[] = [];\n\n const addIssue = (\n severity: 'error' | 'warning' | 'info',\n code: string,\n message: string,\n fix: string,\n repairable = false,\n ): void => {\n const issue: ValidationError = { code, message, fix, repairable };\n if (severity === 'error') errors.push(issue);\n else if (severity === 'warning') warnings.push(issue);\n else info.push(issue);\n };\n\n // Check 1: .planning/ exists\n if (!fs.existsSync(planningDir)) {\n addIssue('error', 'E001', '.planning/ directory not found', 'Run /maxsim:new-project to initialize');\n return cmdOk({\n status: 'broken',\n errors,\n warnings,\n info,\n repairable_count: 0,\n });\n }\n\n // Check 2: PROJECT.md\n if (!fs.existsSync(projectPath)) {\n addIssue('error', 'E002', 'PROJECT.md not found', 'Run /maxsim:new-project to create');\n } else {\n const content = fs.readFileSync(projectPath, 'utf-8');\n const requiredSections = ['## What This Is', '## Core Value', '## Requirements'];\n for (const section of requiredSections) {\n if (!content.includes(section)) {\n addIssue('warning', 'W001', `PROJECT.md missing section: ${section}`, 'Add section manually');\n }\n }\n }\n\n // Check 3: ROADMAP.md\n if (!fs.existsSync(rmPath)) {\n addIssue('error', 'E003', 'ROADMAP.md not found', 'Run /maxsim:new-milestone to create roadmap');\n }\n\n // Check 4: STATE.md\n if (!fs.existsSync(stPath)) {\n addIssue('error', 'E004', 'STATE.md not found', 'Run /maxsim:health --repair to regenerate', true);\n repairs.push('regenerateState');\n } else {\n const stateContent = fs.readFileSync(stPath, 'utf-8');\n const phaseRefs = [...stateContent.matchAll(/[Pp]hase\\s+(\\d+(?:\\.\\d+)?)/g)].map(m => m[1]);\n const diskPhases = new Set<string>();\n try {\n for (const dir of await listSubDirs(phasesDir)) {\n const dm = dir.match(/^(\\d+(?:\\.\\d+)?)/);\n if (dm) diskPhases.add(dm[1]);\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n for (const ref of phaseRefs) {\n const normalizedRef = String(parseInt(ref, 10)).padStart(2, '0');\n if (!diskPhases.has(ref) && !diskPhases.has(normalizedRef) && !diskPhases.has(String(parseInt(ref, 10)))) {\n if (diskPhases.size > 0) {\n addIssue('warning', 'W002', `STATE.md references phase ${ref}, but only phases ${[...diskPhases].sort().join(', ')} exist`, 'Run /maxsim:health --repair to regenerate STATE.md', true);\n if (!repairs.includes('regenerateState')) repairs.push('regenerateState');\n }\n }\n }\n }\n\n // Check 5: config.json\n if (!fs.existsSync(cfgPath)) {\n addIssue('warning', 'W003', 'config.json not found', 'Run /maxsim:health --repair to create with defaults', true);\n repairs.push('createConfig');\n } else {\n try {\n const rawContent = fs.readFileSync(cfgPath, 'utf-8');\n const parsed: Record<string, unknown> = JSON.parse(rawContent) as Record<string, unknown>;\n const validProfiles = ['quality', 'balanced', 'budget', 'tokenburner'];\n if (parsed.model_profile && !validProfiles.includes(parsed.model_profile as string)) {\n addIssue('warning', 'W004', `config.json: invalid model_profile \"${parsed.model_profile}\"`, `Valid values: ${validProfiles.join(', ')}`);\n }\n } catch (thrown: unknown) {\n const parseErr = thrown as Error;\n addIssue('error', 'E005', `config.json: JSON parse error - ${parseErr.message}`, 'Run /maxsim:health --repair to reset to defaults', true);\n repairs.push('resetConfig');\n }\n }\n\n // Check 6: Phase directory naming\n try {\n for (const dirName of await listSubDirs(phasesDir)) {\n if (!dirName.match(/^\\d{2}(?:\\.\\d+)?-[\\w-]+$/)) {\n addIssue('warning', 'W005', `Phase directory \"${dirName}\" doesn't follow NN-name format`, 'Rename to match pattern (e.g., 01-setup)');\n }\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n\n // Check 7: Orphaned plans (via GitHub-first findPhaseInternal)\n try {\n const orphanDirs = await listSubDirs(phasesDir);\n for (const dirName of orphanDirs) {\n const dm = dirName.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n if (!dm) continue;\n const phaseInfo = await findPhaseInternal(cwd, dm[1]);\n if (!phaseInfo) continue;\n\n const summaryBases = new Set(phaseInfo.summaries.map(s => summaryId(s)));\n\n for (const plan of phaseInfo.plans) {\n const planBase = planId(plan);\n if (!summaryBases.has(planBase)) {\n addIssue('info', 'I001', `${dirName}/${plan} has no SUMMARY.md`, 'May be in progress');\n }\n }\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n\n // Check 8: Roadmap consistency\n if (fs.existsSync(rmPath)) {\n const roadmapContent = fs.readFileSync(rmPath, 'utf-8');\n const roadmapPhases = new Set<string>();\n const phasePattern = getPhasePattern();\n let m: RegExpExecArray | null;\n while ((m = phasePattern.exec(roadmapContent)) !== null) {\n roadmapPhases.add(m[1]);\n }\n\n const diskPhases = new Set<string>();\n try {\n for (const dir of await listSubDirs(phasesDir)) {\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n if (dm) diskPhases.add(dm[1]);\n }\n } catch (e) {\n /* optional op, ignore */\n debugLog(e);\n }\n\n for (const p of roadmapPhases) {\n const padded = String(parseInt(p, 10)).padStart(2, '0');\n if (!diskPhases.has(p) && !diskPhases.has(padded)) {\n addIssue('warning', 'W006', `Phase ${p} in ROADMAP.md but no directory on disk`, 'Create phase directory or remove from roadmap');\n }\n }\n\n for (const p of diskPhases) {\n const unpadded = String(parseInt(p, 10));\n if (!roadmapPhases.has(p) && !roadmapPhases.has(unpadded)) {\n addIssue('warning', 'W007', `Phase ${p} exists on disk but not in ROADMAP.md`, 'Add to roadmap or remove directory');\n }\n }\n }\n\n // Perform repairs if requested\n const repairActions: RepairAction[] = [];\n if (options.repair && repairs.length > 0) {\n for (const repair of repairs) {\n try {\n switch (repair) {\n case 'createConfig':\n case 'resetConfig': {\n const defaults = {\n model_profile: 'balanced',\n commit_docs: true,\n search_gitignored: false,\n branching_strategy: 'none',\n research: true,\n plan_checker: true,\n verifier: true,\n parallelization: true,\n };\n fs.writeFileSync(cfgPath, JSON.stringify(defaults, null, 2), 'utf-8');\n repairActions.push({ action: repair, success: true, path: 'config.json' });\n break;\n }\n case 'regenerateState': {\n if (fs.existsSync(stPath)) {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);\n const backupPath = `${stPath}.bak-${timestamp}`;\n fs.copyFileSync(stPath, backupPath);\n repairActions.push({ action: 'backupState', success: true, path: backupPath });\n }\n const milestone = await getMilestoneInfo(cwd);\n let stateContent = `# Session State\\n\\n`;\n stateContent += `## Project Reference\\n\\n`;\n stateContent += `See: .planning/PROJECT.md\\n\\n`;\n stateContent += `## Position\\n\\n`;\n stateContent += `**Milestone:** ${milestone.version} ${milestone.name}\\n`;\n stateContent += `**Current phase:** (determining...)\\n`;\n stateContent += `**Status:** Resuming\\n\\n`;\n stateContent += `## Session Log\\n\\n`;\n stateContent += `- ${todayISO()}: STATE.md regenerated by /maxsim:health --repair\\n`;\n fs.writeFileSync(stPath, stateContent, 'utf-8');\n repairActions.push({ action: repair, success: true, path: 'STATE.md' });\n break;\n }\n }\n } catch (thrown: unknown) {\n const repairErr = thrown as Error;\n repairActions.push({ action: repair, success: false, error: repairErr.message });\n }\n }\n }\n\n // Determine overall status\n let status: 'healthy' | 'degraded' | 'broken';\n if (errors.length > 0) {\n status = 'broken';\n } else if (warnings.length > 0) {\n status = 'degraded';\n } else {\n status = 'healthy';\n }\n\n const repairableCount = errors.filter(e => e.repairable).length +\n warnings.filter(w => w.repairable).length;\n\n const result: HealthResult = {\n status,\n errors,\n warnings,\n info,\n repairable_count: repairableCount,\n repairs_performed: repairActions.length > 0 ? repairActions : undefined,\n };\n return cmdOk(result);\n}\n","/**\n * Drift — Drift report CRUD, requirement extraction, and spec extraction\n *\n * Provides CLI tool commands for the drift-checker agent and realign workflow.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport {\n planningPath,\n safeReadFile,\n debugLog,\n} from './core.js';\nimport { extractFrontmatter } from './frontmatter.js';\nimport type { CmdResult } from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst DRIFT_REPORT_NAME = 'DRIFT-REPORT.md';\n\n// ─── Drift Report CRUD ──────────────────────────────────────────────────────\n\n/**\n * Read the drift report from .planning/DRIFT-REPORT.md.\n * Returns parsed frontmatter and body content, or structured error if not found.\n */\nexport async function cmdDriftReadReport(cwd: string): Promise<CmdResult> {\n const reportPath = planningPath(cwd, DRIFT_REPORT_NAME);\n const content = await safeReadFile(reportPath);\n\n if (!content) {\n return cmdOk({\n found: false,\n path: `.planning/${DRIFT_REPORT_NAME}`,\n error: 'Drift report not found',\n });\n }\n\n const frontmatter = extractFrontmatter(content);\n // Extract body (content after frontmatter)\n const bodyMatch = content.match(/^---\\n[\\s\\S]+?\\n---\\n?([\\s\\S]*)$/);\n const body = bodyMatch ? bodyMatch[1].trim() : content;\n\n return cmdOk({\n found: true,\n path: `.planning/${DRIFT_REPORT_NAME}`,\n frontmatter,\n body,\n });\n}\n\n/**\n * Write content to .planning/DRIFT-REPORT.md.\n * Supports direct content or reading from a file (tmpfile pattern for large reports).\n */\nexport async function cmdDriftWriteReport(\n cwd: string,\n content: string | null,\n contentFile: string | null,\n): Promise<CmdResult> {\n let reportContent: string;\n\n if (contentFile) {\n // Read from file (supports tmpfile pattern)\n const filePath = path.isAbsolute(contentFile) ? contentFile : path.join(cwd, contentFile);\n const fileContent = await safeReadFile(filePath);\n if (!fileContent) {\n return cmdErr(`Content file not found: ${contentFile}`);\n }\n reportContent = fileContent;\n } else if (content) {\n reportContent = content;\n } else {\n return cmdErr('Either --content or --content-file is required');\n }\n\n const reportPath = planningPath(cwd, DRIFT_REPORT_NAME);\n\n // Ensure .planning/ directory exists\n const planningDir = planningPath(cwd);\n if (!fs.existsSync(planningDir)) {\n return cmdErr('.planning/ directory does not exist');\n }\n\n try {\n fs.writeFileSync(reportPath, reportContent, 'utf-8');\n return cmdOk({\n written: true,\n path: `.planning/${DRIFT_REPORT_NAME}`,\n });\n } catch (e) {\n debugLog('drift-write-report-failed', e);\n return cmdErr(`Failed to write drift report: ${e instanceof Error ? e.message : String(e)}`);\n }\n}\n\n// ─── Spec Extraction Commands ────────────────────────────────────────────────\n\n/**\n * Extract all requirements from .planning/REQUIREMENTS.md.\n * Parses requirement lines matching `- [ ] **ID**: description` or `- [x] **ID**: description`.\n */\nexport async function cmdDriftExtractRequirements(cwd: string): Promise<CmdResult> {\n const reqPath = planningPath(cwd, 'REQUIREMENTS.md');\n const content = await safeReadFile(reqPath);\n\n if (!content) {\n return cmdOk({\n found: false,\n path: '.planning/REQUIREMENTS.md',\n requirements: [],\n });\n }\n\n const requirements: Array<{\n id: string;\n description: string;\n complete: boolean;\n line_number: number;\n }> = [];\n\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Match: - [ ] **ID**: description OR - [x] **ID**: description\n const match = line.match(/^-\\s+\\[([ xX])\\]\\s+\\*\\*([^*]+)\\*\\*[:\\s]+(.+)/);\n if (match) {\n requirements.push({\n id: match[2].trim(),\n description: match[3].trim(),\n complete: match[1].toLowerCase() === 'x',\n line_number: i + 1,\n });\n }\n }\n\n return cmdOk({\n found: true,\n path: '.planning/REQUIREMENTS.md',\n count: requirements.length,\n requirements,\n });\n}\n\n/**\n * Extract no-go rules from .planning/NO-GOS.md.\n * Returns array of no-go items with section context, or empty if file missing.\n */\nexport async function cmdDriftExtractNoGos(cwd: string): Promise<CmdResult> {\n const nogosPath = planningPath(cwd, 'NO-GOS.md');\n const content = await safeReadFile(nogosPath);\n\n if (!content) {\n return cmdOk({\n found: false,\n path: '.planning/NO-GOS.md',\n nogos: [],\n });\n }\n\n const nogos: Array<{\n rule: string;\n section: string;\n line_number: number;\n }> = [];\n\n const lines = content.split('\\n');\n let currentSection = 'General';\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n // Track sections (## or ### headings)\n const headingMatch = line.match(/^#{2,3}\\s+(.+)/);\n if (headingMatch) {\n currentSection = headingMatch[1].trim();\n continue;\n }\n\n // Match bullet points (-, *, or numbered items) that contain substantive text\n const bulletMatch = line.match(/^\\s*[-*]\\s+(.+)/);\n if (bulletMatch) {\n const ruleText = bulletMatch[1].trim();\n // Skip empty or very short items\n if (ruleText.length > 5) {\n nogos.push({\n rule: ruleText,\n section: currentSection,\n line_number: i + 1,\n });\n }\n }\n }\n\n return cmdOk({\n found: true,\n path: '.planning/NO-GOS.md',\n count: nogos.length,\n nogos,\n });\n}\n\n/**\n * Read .planning/CONVENTIONS.md and return its full content.\n * Returns the raw content for agent analysis, or null if missing.\n */\nexport async function cmdDriftExtractConventions(cwd: string): Promise<CmdResult> {\n const convPath = planningPath(cwd, 'CONVENTIONS.md');\n const content = await safeReadFile(convPath);\n\n if (!content) {\n return cmdOk({\n found: false,\n path: '.planning/CONVENTIONS.md',\n content: null,\n });\n }\n\n return cmdOk({\n found: true,\n path: '.planning/CONVENTIONS.md',\n content,\n });\n}\n\n/**\n * Read existing DRIFT-REPORT.md frontmatter for diff tracking.\n * Returns previous_hash and checked date, or null if no report exists.\n */\nexport async function cmdDriftPreviousHash(cwd: string): Promise<CmdResult> {\n const reportPath = planningPath(cwd, DRIFT_REPORT_NAME);\n const content = await safeReadFile(reportPath);\n\n if (!content) {\n return cmdOk({\n found: false,\n hash: null,\n checked_date: null,\n });\n }\n\n const frontmatter = extractFrontmatter(content);\n\n return cmdOk({\n found: true,\n hash: (frontmatter.previous_hash as string) ?? null,\n checked_date: (frontmatter.checked as string) ?? null,\n });\n}\n","/**\n * Phase — Phase CRUD, query, and lifecycle operations\n *\n * Ported from maxsim/bin/lib/phase.cjs\n */\n\nimport { promises as fsp } from 'node:fs';\nimport path from 'node:path';\n\nimport {\n normalizePhaseName,\n comparePhaseNum,\n getPhasePattern,\n findPhaseInternal,\n getArchivedPhaseDirs,\n pathExistsInternal,\n generateSlugInternal,\n phasesPath,\n roadmapPath,\n statePath,\n planningPath,\n planId,\n summaryId,\n listSubDirs,\n debugLog,\n errorMsg,\n todayISO,\n escapePhaseNum,\n archivePath,\n execGit,\n safeReadFile,\n} from './core.js';\nimport { extractFrontmatter } from './frontmatter.js';\nimport { cmdOk, cmdErr } from './types.js';\nimport type {\n PhasesListOptions,\n CmdResult,\n ArchivePreview,\n} from './types.js';\n\n// ─── Core result types ──────────────────────────────────────────────────────\n\nexport interface PhaseAddResult {\n phase_number: number;\n padded: string;\n slug: string;\n directory: string;\n description: string;\n}\n\nexport interface PhaseInsertResult {\n phase_number: string;\n after_phase: string;\n slug: string;\n directory: string;\n description: string;\n}\n\nexport interface PhaseCompleteResult {\n completed_phase: string;\n phase_name: string | null;\n plans_executed: string;\n next_phase: string | null;\n next_phase_name: string | null;\n is_last_phase: boolean;\n date: string;\n roadmap_updated: boolean;\n state_updated: boolean;\n requirements_updated: boolean;\n}\n\n// ─── Core functions ─────────────────────────────────────────────────────────\n\nexport async function phaseAddCore(cwd: string, description: string): Promise<PhaseAddResult> {\n const rmPath = roadmapPath(cwd);\n let content: string;\n try {\n content = await fsp.readFile(rmPath, 'utf-8');\n } catch {\n throw new Error('ROADMAP.md not found');\n }\n const slug = generateSlugInternal(description);\n\n const phasePattern = getPhasePattern();\n let maxPhase = 0;\n let m: RegExpExecArray | null;\n while ((m = phasePattern.exec(content)) !== null) {\n const num = parseInt(m[1], 10);\n if (num > maxPhase) maxPhase = num;\n }\n\n const newPhaseNum = maxPhase + 1;\n const paddedNum = String(newPhaseNum).padStart(2, '0');\n const dirName = `${paddedNum}-${slug}`;\n const dirPath = planningPath(cwd, 'phases', dirName);\n\n await fsp.mkdir(dirPath, { recursive: true });\n await fsp.writeFile(path.join(dirPath, '.gitkeep'), '');\n\n const phaseEntry = `\\n### Phase ${newPhaseNum}: ${description}\\n\\n**Goal:** [To be planned]\\n**Requirements**: TBD\\n**Depends on:** Phase ${maxPhase}\\n**Plans:** 0 plans\\n\\nPlans:\\n- [ ] TBD (run /maxsim:plan ${newPhaseNum} to break down)\\n`;\n\n let updatedContent: string;\n const lastSeparator = content.lastIndexOf('\\n---');\n if (lastSeparator > 0) {\n updatedContent = content.slice(0, lastSeparator) + phaseEntry + content.slice(lastSeparator);\n } else {\n updatedContent = content + phaseEntry;\n }\n\n await fsp.writeFile(rmPath, updatedContent, 'utf-8');\n\n return {\n phase_number: newPhaseNum,\n padded: paddedNum,\n slug,\n directory: `.planning/phases/${dirName}`,\n description,\n };\n}\n\nexport async function phaseInsertCore(cwd: string, afterPhase: string, description: string): Promise<PhaseInsertResult> {\n const rmPath = roadmapPath(cwd);\n let content: string;\n try {\n content = await fsp.readFile(rmPath, 'utf-8');\n } catch {\n throw new Error('ROADMAP.md not found');\n }\n const slug = generateSlugInternal(description);\n\n const normalizedAfter = normalizePhaseName(afterPhase);\n const unpadded = normalizedAfter.replace(/^0+/, '');\n const afterPhaseEscaped = '0*' + unpadded.replace(/\\./g, '\\\\.');\n const targetPattern = getPhasePattern(afterPhaseEscaped, 'i');\n if (!targetPattern.test(content)) {\n throw new Error(`Phase ${afterPhase} not found in ROADMAP.md`);\n }\n\n const phasesDirPath = phasesPath(cwd);\n const normalizedBase = normalizePhaseName(afterPhase);\n const existingDecimals: number[] = [];\n\n try {\n const dirs = await listSubDirs(phasesDirPath);\n const decimalPattern = new RegExp(`^${normalizedBase}\\\\.(\\\\d+)`);\n for (const dir of dirs) {\n const dm = dir.match(decimalPattern);\n if (dm) existingDecimals.push(parseInt(dm[1], 10));\n }\n } catch (e) {\n debugLog('phase-insert-decimal-scan-failed', e);\n }\n\n const nextDecimal = existingDecimals.length === 0 ? 1 : Math.max(...existingDecimals) + 1;\n const decimalPhase = `${normalizedBase}.${nextDecimal}`;\n const dirName = `${decimalPhase}-${slug}`;\n const dirPath = planningPath(cwd, 'phases', dirName);\n\n await fsp.mkdir(dirPath, { recursive: true });\n await fsp.writeFile(path.join(dirPath, '.gitkeep'), '');\n\n const phaseEntry = `\\n### Phase ${decimalPhase}: ${description} (INSERTED)\\n\\n**Goal:** [Urgent work - to be planned]\\n**Requirements**: TBD\\n**Depends on:** Phase ${afterPhase}\\n**Plans:** 0 plans\\n\\nPlans:\\n- [ ] TBD (run /maxsim:plan ${decimalPhase} to break down)\\n`;\n\n const headerPattern = new RegExp(`(#{2,4}\\\\s*Phase\\\\s+0*${afterPhaseEscaped}:[^\\\\n]*\\\\n)`, 'i');\n const headerMatch = content.match(headerPattern);\n if (!headerMatch) {\n throw new Error(`Could not find Phase ${afterPhase} header`);\n }\n\n const headerIdx = content.indexOf(headerMatch[0]);\n const afterHeader = content.slice(headerIdx + headerMatch[0].length);\n const nextPhaseMatch = afterHeader.match(/\\n#{2,4}\\s+Phase\\s+\\d/i);\n\n let insertIdx: number;\n if (nextPhaseMatch) {\n insertIdx = headerIdx + headerMatch[0].length + nextPhaseMatch.index!;\n } else {\n insertIdx = content.length;\n }\n\n const updatedContent = content.slice(0, insertIdx) + phaseEntry + content.slice(insertIdx);\n await fsp.writeFile(rmPath, updatedContent, 'utf-8');\n\n return {\n phase_number: decimalPhase,\n after_phase: afterPhase,\n slug,\n directory: `.planning/phases/${dirName}`,\n description,\n };\n}\n\nexport async function phaseCompleteCore(cwd: string, phaseNum: string): Promise<PhaseCompleteResult> {\n const rmPath = roadmapPath(cwd);\n const stPath = statePath(cwd);\n const phasesDirPath = phasesPath(cwd);\n const today = todayISO();\n\n const phaseInfo = await findPhaseInternal(cwd, phaseNum);\n if (!phaseInfo) {\n throw new Error(`Phase ${phaseNum} not found`);\n }\n\n const planCount = phaseInfo.plans.length;\n const summaryCount = phaseInfo.summaries.length;\n let requirementsUpdated = false;\n\n const rmExists = await pathExistsInternal(rmPath);\n if (rmExists) {\n let roadmapContent = await fsp.readFile(rmPath, 'utf-8');\n\n const checkboxPattern = new RegExp(\n `(-\\\\s*\\\\[)[ ](\\\\]\\\\s*.*Phase\\\\s+${escapePhaseNum(phaseNum)}[:\\\\s][^\\\\n]*)`,\n 'i',\n );\n roadmapContent = roadmapContent.replace(checkboxPattern, `$1x$2 (completed ${today})`);\n\n const phaseEscaped = escapePhaseNum(phaseNum);\n const tablePattern = new RegExp(\n `(\\\\|\\\\s*${phaseEscaped}\\\\.?\\\\s[^|]*\\\\|[^|]*\\\\|)\\\\s*[^|]*(\\\\|)\\\\s*[^|]*(\\\\|)`,\n 'i',\n );\n roadmapContent = roadmapContent.replace(\n tablePattern,\n `$1 Complete $2 ${today} $3`,\n );\n\n const planCountPattern = new RegExp(\n `(#{2,4}\\\\s*Phase\\\\s+${phaseEscaped}[\\\\s\\\\S]*?\\\\*\\\\*Plans:\\\\*\\\\*\\\\s*)[^\\\\n]+`,\n 'i',\n );\n roadmapContent = roadmapContent.replace(\n planCountPattern,\n `$1${summaryCount}/${planCount} plans complete`,\n );\n\n debugLog('phase-complete-write', `writing ROADMAP.md for phase ${phaseNum}`);\n await fsp.writeFile(rmPath, roadmapContent, 'utf-8');\n debugLog('phase-complete-write', `ROADMAP.md updated for phase ${phaseNum}`);\n\n // Update REQUIREMENTS.md\n const reqPath = planningPath(cwd, 'REQUIREMENTS.md');\n if (await pathExistsInternal(reqPath)) {\n const reqMatch = roadmapContent.match(\n new RegExp(`Phase\\\\s+${escapePhaseNum(phaseNum)}[\\\\s\\\\S]*?\\\\*\\\\*Requirements:\\\\*\\\\*\\\\s*([^\\\\n]+)`, 'i'),\n );\n\n if (reqMatch) {\n const reqIds = reqMatch[1].replace(/[\\[\\]]/g, '').split(/[,\\s]+/).map(r => r.trim()).filter(Boolean);\n let reqContent = await fsp.readFile(reqPath, 'utf-8');\n\n for (const reqId of reqIds) {\n reqContent = reqContent.replace(\n new RegExp(`(-\\\\s*\\\\[)[ ](\\\\]\\\\s*\\\\*\\\\*${reqId}\\\\*\\\\*)`, 'gi'),\n '$1x$2',\n );\n reqContent = reqContent.replace(\n new RegExp(`(\\\\|\\\\s*${reqId}\\\\s*\\\\|[^|]+\\\\|)\\\\s*Pending\\\\s*(\\\\|)`, 'gi'),\n '$1 Complete $2',\n );\n }\n\n debugLog('phase-complete-write', `writing REQUIREMENTS.md for phase ${phaseNum}`);\n await fsp.writeFile(reqPath, reqContent, 'utf-8');\n debugLog('phase-complete-write', `REQUIREMENTS.md updated for phase ${phaseNum}`);\n requirementsUpdated = true;\n }\n }\n }\n\n // Find next phase\n let nextPhaseNum: string | null = null;\n let nextPhaseName: string | null = null;\n let isLastPhase = true;\n\n try {\n const dirs = await listSubDirs(phasesDirPath, true);\n\n for (const dir of dirs) {\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)-?(.*)/i);\n if (dm) {\n if (comparePhaseNum(dm[1], phaseNum) > 0) {\n nextPhaseNum = dm[1];\n nextPhaseName = dm[2] || null;\n isLastPhase = false;\n break;\n }\n }\n }\n } catch (e) {\n debugLog('phase-complete-next-phase-scan-failed', e);\n }\n\n // Update STATE.md\n const stExists = await pathExistsInternal(stPath);\n if (stExists) {\n let stateContent = await fsp.readFile(stPath, 'utf-8');\n\n stateContent = stateContent.replace(\n /(\\*\\*Current Phase:\\*\\*\\s*).*/,\n `$1${nextPhaseNum || phaseNum}`,\n );\n\n if (nextPhaseName) {\n stateContent = stateContent.replace(\n /(\\*\\*Current Phase Name:\\*\\*\\s*).*/,\n `$1${nextPhaseName.replace(/-/g, ' ')}`,\n );\n }\n\n stateContent = stateContent.replace(\n /(\\*\\*Status:\\*\\*\\s*).*/,\n `$1${isLastPhase ? 'Milestone complete' : 'Ready to plan'}`,\n );\n\n stateContent = stateContent.replace(\n /(\\*\\*Current Plan:\\*\\*\\s*).*/,\n `$1Not started`,\n );\n\n stateContent = stateContent.replace(\n /(\\*\\*Last Activity:\\*\\*\\s*).*/,\n `$1${today}`,\n );\n\n stateContent = stateContent.replace(\n /(\\*\\*Last Activity Description:\\*\\*\\s*).*/,\n `$1Phase ${phaseNum} complete${nextPhaseNum ? `, transitioned to Phase ${nextPhaseNum}` : ''}`,\n );\n\n debugLog('phase-complete-write', `writing STATE.md for phase ${phaseNum}`);\n await fsp.writeFile(stPath, stateContent, 'utf-8');\n debugLog('phase-complete-write', `STATE.md updated for phase ${phaseNum}`);\n }\n\n return {\n completed_phase: phaseNum,\n phase_name: phaseInfo.phase_name,\n plans_executed: `${summaryCount}/${planCount}`,\n next_phase: nextPhaseNum,\n next_phase_name: nextPhaseName,\n is_last_phase: isLastPhase,\n date: today,\n roadmap_updated: rmExists,\n state_updated: stExists,\n requirements_updated: requirementsUpdated,\n };\n}\n\n// ─── Phase list ─────────────────────────────────────────────────────────────\n\nexport async function cmdPhasesList(cwd: string, options: PhasesListOptions): Promise<CmdResult> {\n const phasesDirPath = phasesPath(cwd);\n const { type, phase, includeArchived, offset, limit } = options;\n\n if (!(await pathExistsInternal(phasesDirPath))) {\n if (type) {\n return cmdOk({ files: [], count: 0, total: 0 }, '');\n } else {\n return cmdOk({ directories: [], count: 0, total: 0 }, '');\n }\n }\n\n try {\n let dirs = await listSubDirs(phasesDirPath);\n\n if (includeArchived) {\n const archived = await getArchivedPhaseDirs(cwd);\n for (const a of archived) {\n dirs.push(`${a.name} [${a.milestone}]`);\n }\n }\n\n dirs.sort((a, b) => comparePhaseNum(a, b));\n\n if (phase) {\n const normalized = normalizePhaseName(phase);\n const match = dirs.find(d => d.startsWith(normalized));\n if (!match) {\n return cmdOk({ files: [], count: 0, total: 0, phase_dir: null, error: 'Phase not found' }, '');\n }\n dirs = [match];\n }\n\n if (type) {\n // Use findPhaseInternal (GitHub-first) for plan/summary data\n const fileResults = await Promise.all(\n dirs.map(async (dir) => {\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n const phaseNum = dm ? dm[1] : dir;\n\n if (type === 'plans' || type === 'summaries') {\n const phaseInfo = await findPhaseInternal(cwd, phaseNum);\n if (phaseInfo) {\n return type === 'plans' ? phaseInfo.plans.sort() : phaseInfo.summaries.sort();\n }\n return [];\n }\n\n // For other types, list directory contents\n const dirPath = path.join(phasesDirPath, dir);\n const dirFiles = await fsp.readdir(dirPath);\n return dirFiles.sort();\n }),\n );\n const files = fileResults.flat();\n\n const result = {\n files,\n count: files.length,\n total: files.length,\n phase_dir: phase ? dirs[0].replace(/^\\d+(?:\\.\\d+)?-?/, '') : null,\n };\n return cmdOk(result, files.join('\\n'));\n }\n\n // Apply pagination\n const total = dirs.length;\n const start = offset ?? 0;\n const paginated = limit !== undefined ? dirs.slice(start, start + limit) : dirs.slice(start);\n\n return cmdOk({ directories: paginated, count: paginated.length, total }, paginated.join('\\n'));\n } catch (e: unknown) {\n return cmdErr('Failed to list phases: ' + (e as Error).message);\n }\n}\n\n// ─── Next decimal ───────────────────────────────────────────────────────────\n\nexport async function cmdPhaseNextDecimal(cwd: string, basePhase: string): Promise<CmdResult> {\n const phasesDirPath = phasesPath(cwd);\n const normalized = normalizePhaseName(basePhase);\n\n if (!(await pathExistsInternal(phasesDirPath))) {\n return cmdOk(\n { found: false, base_phase: normalized, next: `${normalized}.1`, existing: [] },\n `${normalized}.1`,\n );\n }\n\n try {\n const dirs = await listSubDirs(phasesDirPath);\n\n const baseExists = dirs.some(d => d.startsWith(normalized + '-') || d === normalized);\n\n const decimalPattern = new RegExp(`^${normalized}\\\\.(\\\\d+)`);\n const existingDecimals: string[] = [];\n\n for (const dir of dirs) {\n const match = dir.match(decimalPattern);\n if (match) {\n existingDecimals.push(`${normalized}.${match[1]}`);\n }\n }\n\n existingDecimals.sort((a, b) => {\n const aNum = parseFloat(a);\n const bNum = parseFloat(b);\n return aNum - bNum;\n });\n\n let nextDecimal: string;\n if (existingDecimals.length === 0) {\n nextDecimal = `${normalized}.1`;\n } else {\n const lastDecimal = existingDecimals[existingDecimals.length - 1];\n const lastNum = parseInt(lastDecimal.split('.')[1], 10);\n nextDecimal = `${normalized}.${lastNum + 1}`;\n }\n\n return cmdOk(\n { found: baseExists, base_phase: normalized, next: nextDecimal, existing: existingDecimals },\n nextDecimal,\n );\n } catch (e: unknown) {\n return cmdErr('Failed to calculate next decimal phase: ' + (e as Error).message);\n }\n}\n\n// ─── Find phase ─────────────────────────────────────────────────────────────\n\nexport async function cmdFindPhase(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) {\n return cmdErr('phase identifier required');\n }\n\n const notFound = { found: false, directory: null, phase_number: null, phase_name: null, plans: [] as string[], summaries: [] as string[] };\n\n try {\n // Delegates to findPhaseInternal which tries GitHub first, then local\n const info = await findPhaseInternal(cwd, phase);\n if (!info) {\n return cmdOk(notFound, '');\n }\n\n const result = {\n found: true,\n directory: info.directory,\n phase_number: info.phase_number,\n phase_name: info.phase_name,\n plans: info.plans,\n summaries: info.summaries,\n source: info.source ?? 'local',\n };\n\n return cmdOk(result, result.directory);\n } catch (e: unknown) {\n return cmdOk(notFound, '');\n }\n}\n\n// ─── Phase plan index ───────────────────────────────────────────────────────\n\nexport async function cmdPhasePlanIndex(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) {\n return cmdErr('phase required for phase-plan-index');\n }\n\n const normalized = normalizePhaseName(phase);\n\n // Use findPhaseInternal (GitHub-first, local archive fallback)\n const ghInfo = await findPhaseInternal(cwd, phase);\n if (!ghInfo) {\n return cmdOk({ phase: normalized, error: 'Phase not found', plans: [], waves: {}, incomplete: [], has_checkpoints: false });\n }\n\n // Build index from phase data (GitHub sub-issues or local archive)\n const plans: Array<{\n id: string;\n wave: number;\n autonomous: boolean;\n objective: string | null;\n files_modified: string[];\n task_count: number;\n has_summary: boolean;\n }> = [];\n const waves: Record<string, string[]> = {};\n const incomplete: string[] = [];\n\n const completedSet = new Set(ghInfo.summaries);\n\n for (const planName of ghInfo.plans) {\n const hasSummary = completedSet.has(planName);\n if (!hasSummary) {\n incomplete.push(planName);\n }\n\n plans.push({\n id: planName,\n wave: 1,\n autonomous: true,\n objective: null,\n files_modified: [],\n task_count: 1,\n has_summary: hasSummary,\n });\n\n if (!waves['1']) waves['1'] = [];\n waves['1'].push(planName);\n }\n\n return cmdOk({ phase: normalized, plans, waves, incomplete, has_checkpoints: false, source: ghInfo.source ?? 'local' });\n}\n\n// ─── Phase add ──────────────────────────────────────────────────────────────\n\nexport async function cmdPhaseAdd(cwd: string, description: string | undefined): Promise<CmdResult> {\n if (!description) {\n return cmdErr('description required for phase add');\n }\n\n try {\n const result = await phaseAddCore(cwd, description);\n return cmdOk(\n { phase_number: result.phase_number, padded: result.padded, name: result.description, slug: result.slug, directory: result.directory },\n result.padded,\n );\n } catch (e) {\n return cmdErr((e as Error).message);\n }\n}\n\n// ─── Phase insert ───────────────────────────────────────────────────────────\n\nexport async function cmdPhaseInsert(cwd: string, afterPhase: string | undefined, description: string | undefined): Promise<CmdResult> {\n if (!afterPhase || !description) {\n return cmdErr('after-phase and description required for phase insert');\n }\n\n try {\n const result = await phaseInsertCore(cwd, afterPhase, description);\n return cmdOk(\n { phase_number: result.phase_number, after_phase: result.after_phase, name: result.description, slug: result.slug, directory: result.directory },\n result.phase_number,\n );\n } catch (e) {\n return cmdErr((e as Error).message);\n }\n}\n\n// ─── Phase remove ───────────────────────────────────────────────────────────\n\nexport async function cmdPhaseRemove(\n cwd: string,\n targetPhase: string | undefined,\n options: { force: boolean },\n): Promise<CmdResult> {\n if (!targetPhase) {\n return cmdErr('phase number required for phase remove');\n }\n\n const rmPath = roadmapPath(cwd);\n const phasesDirPath = phasesPath(cwd);\n const force = options.force || false;\n\n if (!(await pathExistsInternal(rmPath))) {\n return cmdErr('ROADMAP.md not found');\n }\n\n const normalized = normalizePhaseName(targetPhase);\n const isDecimal = targetPhase.includes('.');\n\n let targetDir: string | null = null;\n try {\n const dirs = await listSubDirs(phasesDirPath, true);\n targetDir = dirs.find(d => d.startsWith(normalized + '-') || d === normalized) || null;\n } catch (e) {\n debugLog('phase-remove-find-target-failed', e);\n }\n\n if (targetDir && !force) {\n // Check via findPhaseInternal (GitHub-first) for executed plans\n const phaseInfo = await findPhaseInternal(cwd, targetPhase);\n const summaryCount = phaseInfo?.summaries?.length ?? 0;\n if (summaryCount > 0) {\n return cmdErr(`Phase ${targetPhase} has ${summaryCount} executed plan(s). Use --force to remove anyway.`);\n }\n }\n\n if (targetDir) {\n await fsp.rm(path.join(phasesDirPath, targetDir), { recursive: true, force: true });\n }\n\n const renamedDirs: Array<{ from: string; to: string }> = [];\n const renamedFiles: Array<{ from: string; to: string }> = [];\n\n if (isDecimal) {\n const baseParts = normalized.split('.');\n const baseInt = baseParts[0];\n const removedDecimal = parseInt(baseParts[1], 10);\n\n try {\n const dirs = await listSubDirs(phasesDirPath, true);\n\n const decPattern = new RegExp(`^${baseInt}\\\\.(\\\\d+)-(.+)$`);\n const toRename: Array<{ dir: string; oldDecimal: number; slug: string }> = [];\n for (const dir of dirs) {\n const dm = dir.match(decPattern);\n if (dm && parseInt(dm[1], 10) > removedDecimal) {\n toRename.push({ dir, oldDecimal: parseInt(dm[1], 10), slug: dm[2] });\n }\n }\n\n toRename.sort((a, b) => b.oldDecimal - a.oldDecimal);\n\n // Sequential renames — order matters\n for (const item of toRename) {\n const newDecimal = item.oldDecimal - 1;\n const oldPhaseId = `${baseInt}.${item.oldDecimal}`;\n const newPhaseId = `${baseInt}.${newDecimal}`;\n const newDirName = `${baseInt}.${newDecimal}-${item.slug}`;\n\n await fsp.rename(path.join(phasesDirPath, item.dir), path.join(phasesDirPath, newDirName));\n renamedDirs.push({ from: item.dir, to: newDirName });\n\n const dirFiles = await fsp.readdir(path.join(phasesDirPath, newDirName));\n for (const f of dirFiles) {\n if (f.includes(oldPhaseId)) {\n const newFileName = f.replace(oldPhaseId, newPhaseId);\n await fsp.rename(\n path.join(phasesDirPath, newDirName, f),\n path.join(phasesDirPath, newDirName, newFileName),\n );\n renamedFiles.push({ from: f, to: newFileName });\n }\n }\n }\n } catch (e) {\n debugLog('phase-remove-decimal-rename-failed', { phase: targetPhase, error: errorMsg(e) });\n }\n } else {\n const removedInt = parseInt(normalized, 10);\n\n try {\n const dirs = await listSubDirs(phasesDirPath, true);\n\n const toRename: Array<{ dir: string; oldInt: number; letter: string; decimal: number | null; slug: string }> = [];\n for (const dir of dirs) {\n const dm = dir.match(/^(\\d+)([A-Z])?(?:\\.(\\d+))?-(.+)$/i);\n if (!dm) continue;\n const dirInt = parseInt(dm[1], 10);\n if (dirInt > removedInt) {\n toRename.push({\n dir,\n oldInt: dirInt,\n letter: dm[2] ? dm[2].toUpperCase() : '',\n decimal: dm[3] ? parseInt(dm[3], 10) : null,\n slug: dm[4],\n });\n }\n }\n\n toRename.sort((a, b) => {\n if (a.oldInt !== b.oldInt) return b.oldInt - a.oldInt;\n return (b.decimal || 0) - (a.decimal || 0);\n });\n\n // Sequential renames — order matters\n for (const item of toRename) {\n const newInt = item.oldInt - 1;\n const newPadded = String(newInt).padStart(2, '0');\n const oldPadded = String(item.oldInt).padStart(2, '0');\n const letterSuffix = item.letter || '';\n const decimalSuffix = item.decimal !== null ? `.${item.decimal}` : '';\n const oldPrefix = `${oldPadded}${letterSuffix}${decimalSuffix}`;\n const newPrefix = `${newPadded}${letterSuffix}${decimalSuffix}`;\n const newDirName = `${newPrefix}-${item.slug}`;\n\n await fsp.rename(path.join(phasesDirPath, item.dir), path.join(phasesDirPath, newDirName));\n renamedDirs.push({ from: item.dir, to: newDirName });\n\n const dirFiles = await fsp.readdir(path.join(phasesDirPath, newDirName));\n for (const f of dirFiles) {\n if (f.startsWith(oldPrefix)) {\n const newFileName = newPrefix + f.slice(oldPrefix.length);\n await fsp.rename(\n path.join(phasesDirPath, newDirName, f),\n path.join(phasesDirPath, newDirName, newFileName),\n );\n renamedFiles.push({ from: f, to: newFileName });\n }\n }\n }\n } catch (e) {\n debugLog('phase-remove-int-rename-failed', { phase: targetPhase, error: errorMsg(e) });\n }\n }\n\n // Update ROADMAP.md\n let roadmapContent = await fsp.readFile(rmPath, 'utf-8');\n\n const targetEscaped = escapePhaseNum(targetPhase);\n const sectionPattern = new RegExp(\n `\\\\n?#{2,4}\\\\s*Phase\\\\s+${targetEscaped}\\\\s*:[\\\\s\\\\S]*?(?=\\\\n#{2,4}\\\\s+Phase\\\\s+\\\\d|$)`,\n 'i',\n );\n roadmapContent = roadmapContent.replace(sectionPattern, '');\n\n const checkboxPattern = new RegExp(`\\\\n?-\\\\s*\\\\[[ x]\\\\]\\\\s*.*Phase\\\\s+${targetEscaped}[:\\\\s][^\\\\n]*`, 'gi');\n roadmapContent = roadmapContent.replace(checkboxPattern, '');\n\n const tableRowPattern = new RegExp(`\\\\n?\\\\|\\\\s*${targetEscaped}\\\\.?\\\\s[^|]*\\\\|[^\\\\n]*`, 'gi');\n roadmapContent = roadmapContent.replace(tableRowPattern, '');\n\n if (!isDecimal) {\n const removedInt = parseInt(normalized, 10);\n const maxPhase = 99;\n for (let oldNum = maxPhase; oldNum > removedInt; oldNum--) {\n const newNum = oldNum - 1;\n const oldStr = String(oldNum);\n const newStr = String(newNum);\n const oldPad = oldStr.padStart(2, '0');\n const newPad = newStr.padStart(2, '0');\n\n roadmapContent = roadmapContent.replace(\n new RegExp(`(#{2,4}\\\\s*Phase\\\\s+)${oldStr}(\\\\s*:)`, 'gi'),\n `$1${newStr}$2`,\n );\n roadmapContent = roadmapContent.replace(\n new RegExp(`(Phase\\\\s+)${oldStr}([:\\\\s])`, 'g'),\n `$1${newStr}$2`,\n );\n roadmapContent = roadmapContent.replace(\n new RegExp(`${oldPad}-(\\\\d{2})`, 'g'),\n `${newPad}-$1`,\n );\n roadmapContent = roadmapContent.replace(\n new RegExp(`(\\\\|\\\\s*)${oldStr}\\\\.\\\\s`, 'g'),\n `$1${newStr}. `,\n );\n roadmapContent = roadmapContent.replace(\n new RegExp(`(Depends on:\\\\*\\\\*\\\\s*Phase\\\\s+)${oldStr}\\\\b`, 'gi'),\n `$1${newStr}`,\n );\n }\n }\n\n await fsp.writeFile(rmPath, roadmapContent, 'utf-8');\n\n // Update STATE.md phase count\n const stPath = statePath(cwd);\n const stExists = await pathExistsInternal(stPath);\n if (stExists) {\n let stateContent = await fsp.readFile(stPath, 'utf-8');\n const totalPattern = /(\\*\\*Total Phases:\\*\\*\\s*)(\\d+)/;\n const totalMatch = stateContent.match(totalPattern);\n if (totalMatch) {\n const oldTotal = parseInt(totalMatch[2], 10);\n stateContent = stateContent.replace(totalPattern, `$1${oldTotal - 1}`);\n }\n const ofPattern = /(\\bof\\s+)(\\d+)(\\s*(?:\\(|phases?))/i;\n const ofMatch = stateContent.match(ofPattern);\n if (ofMatch) {\n const oldTotal = parseInt(ofMatch[2], 10);\n stateContent = stateContent.replace(ofPattern, `$1${oldTotal - 1}$3`);\n }\n await fsp.writeFile(stPath, stateContent, 'utf-8');\n }\n\n return cmdOk({\n removed: targetPhase,\n directory_deleted: targetDir || null,\n renamed_directories: renamedDirs,\n renamed_files: renamedFiles,\n roadmap_updated: true,\n state_updated: stExists,\n });\n}\n\n// ─── Phase complete ─────────────────────────────────────────────────────────\n\nexport async function cmdPhaseComplete(cwd: string, phaseNum: string | undefined): Promise<CmdResult> {\n if (!phaseNum) {\n return cmdErr('phase number required for phase complete');\n }\n\n try {\n const result = await phaseCompleteCore(cwd, phaseNum);\n return cmdOk({\n completed_phase: result.completed_phase,\n phase_name: result.phase_name,\n plans_executed: result.plans_executed,\n next_phase: result.next_phase,\n next_phase_name: result.next_phase_name,\n is_last_phase: result.is_last_phase,\n date: result.date,\n roadmap_updated: result.roadmap_updated,\n state_updated: result.state_updated,\n });\n } catch (e) {\n return cmdErr((e as Error).message);\n }\n}\n\n// ─── Phase archive ──────────────────────────────────────────────────────────\n\n/**\n * Scan STATE.md for lines matching a phase-tagged pattern in a specific section.\n */\nfunction findPhaseTaggedLines(content: string, sectionPattern: RegExp, phaseNum: string): string[] {\n const match = content.match(sectionPattern);\n if (!match || !match[2]) return [];\n\n const escaped = escapePhaseNum(phaseNum);\n const tagPattern = new RegExp(`^\\\\s*-\\\\s*\\\\[Phase\\\\s+${escaped}\\\\]`, 'i');\n return match[2].split('\\n').filter(line => tagPattern.test(line));\n}\n\nconst DECISIONS_SECTION_PATTERN = /(#{2,3}\\s*(?:Decisions|Decisions Made|Accumulated.*Decisions)\\s*\\n)([\\s\\S]*?)(?=\\n#{2,3}\\s|\\n##[^#]|$)/i;\nconst BLOCKERS_SECTION_PATTERN = /(#{2,3}\\s*(?:Blockers|Blockers\\/Concerns|Concerns)\\s*\\n\\s*\\n?)([\\s\\S]*?)(?=\\n#{2,3}\\s|$)/i;\n\nexport async function archivePhasePreview(cwd: string, phaseNum: string, outcomeSummary: string): Promise<CmdResult> {\n const phaseInfo = await findPhaseInternal(cwd, phaseNum);\n if (!phaseInfo) {\n return cmdErr(`Phase ${phaseNum} not found`);\n }\n\n const archiveDir = await archivePath(cwd);\n const phaseDirName = path.basename(phaseInfo.directory);\n const archiveDest = path.join(archiveDir, phaseDirName);\n\n // Read STATE.md\n const stContent = await safeReadFile(statePath(cwd)) ?? '';\n const decisionsToRemove = findPhaseTaggedLines(stContent, DECISIONS_SECTION_PATTERN, phaseNum);\n const blockersToRemove = findPhaseTaggedLines(stContent, BLOCKERS_SECTION_PATTERN, phaseNum);\n\n // Read ROADMAP.md section\n const rmContent = await safeReadFile(roadmapPath(cwd)) ?? '';\n const escaped = escapePhaseNum(phaseNum);\n const sectionPattern = new RegExp(\n `#{2,4}\\\\s*Phase\\\\s+${escaped}\\\\s*:[\\\\s\\\\S]*?(?=\\\\n#{2,4}\\\\s+Phase\\\\s+\\\\d|\\\\n## |$)`,\n 'i',\n );\n const sectionMatch = rmContent.match(sectionPattern);\n const sectionToCollapse = sectionMatch ? sectionMatch[0].trim() : '';\n\n const phaseName = phaseInfo.phase_name ? phaseInfo.phase_name.replace(/-/g, ' ') : `Phase ${phaseNum}`;\n const collapsedLine = `- [x] Phase ${phaseNum}: ${phaseName} -- ${outcomeSummary}`;\n\n const preview: ArchivePreview = {\n phase_dir: phaseInfo.directory,\n archive_dir: path.relative(cwd, archiveDest).replace(/\\\\/g, '/'),\n decisions_to_prune: decisionsToRemove,\n blockers_to_prune: blockersToRemove,\n roadmap_section_to_collapse: sectionToCollapse,\n collapsed_line: collapsedLine,\n };\n\n return cmdOk(preview);\n}\n\n/**\n * Prune phase-tagged lines from a section in STATE.md content.\n */\nfunction pruneSection(content: string, sectionPattern: RegExp, phaseNum: string): string {\n const match = content.match(sectionPattern);\n if (!match || !match[2]) return content;\n\n const escaped = escapePhaseNum(phaseNum);\n const tagPattern = new RegExp(`^\\\\s*-\\\\s*\\\\[Phase\\\\s+${escaped}\\\\]`, 'i');\n const lines = match[2].split('\\n');\n const filtered = lines.filter(line => !tagPattern.test(line));\n\n let newBody = filtered.join('\\n');\n // Check if remaining body has any bullet content\n if (!newBody.trim() || !/^\\s*[-*]\\s+/m.test(newBody)) {\n newBody = '\\nNone.\\n';\n }\n\n return content.replace(sectionPattern, (_m, header) => `${header}${newBody}`);\n}\n\nexport async function archivePhaseExecute(cwd: string, phaseNum: string, outcomeSummary: string): Promise<CmdResult> {\n // Re-read all files fresh (pitfall #6)\n const phaseInfo = await findPhaseInternal(cwd, phaseNum);\n if (!phaseInfo) {\n return cmdErr(`Phase ${phaseNum} not found`);\n }\n\n const archiveDir = await archivePath(cwd);\n const phaseDirName = path.basename(phaseInfo.directory);\n const archiveDest = path.join(archiveDir, phaseDirName);\n const phaseDirFull = path.join(cwd, phaseInfo.directory);\n\n // 1. Create archive directory\n await fsp.mkdir(archiveDir, { recursive: true });\n\n // 2. Move phase directory (with EXDEV fallback)\n try {\n await fsp.rename(phaseDirFull, archiveDest);\n } catch (e: unknown) {\n if ((e as NodeJS.ErrnoException).code === 'EXDEV') {\n debugLog('archive-rename-exdev', 'falling back to copy+delete');\n await fsp.cp(phaseDirFull, archiveDest, { recursive: true });\n await fsp.rm(phaseDirFull, { recursive: true, force: true });\n } else {\n throw e;\n }\n }\n\n // 3. Prune STATE.md\n const stPath = statePath(cwd);\n let stContent = await safeReadFile(stPath);\n if (stContent) {\n stContent = pruneSection(stContent, DECISIONS_SECTION_PATTERN, phaseNum);\n stContent = pruneSection(stContent, BLOCKERS_SECTION_PATTERN, phaseNum);\n await fsp.writeFile(stPath, stContent, 'utf-8');\n }\n\n // 4. Collapse ROADMAP.md\n const rmPath = roadmapPath(cwd);\n let rmContent = await safeReadFile(rmPath);\n if (rmContent) {\n const escaped = escapePhaseNum(phaseNum);\n\n // Remove detail section\n const sectionPattern = new RegExp(\n `\\\\n?#{2,4}\\\\s*Phase\\\\s+${escaped}\\\\s*:[\\\\s\\\\S]*?(?=\\\\n#{2,4}\\\\s+Phase\\\\s+\\\\d|\\\\n## |$)`,\n 'i',\n );\n rmContent = rmContent.replace(sectionPattern, '');\n\n // Update checklist line — handle both bold and plain formats\n const phaseName = phaseInfo.phase_name ? phaseInfo.phase_name.replace(/-/g, ' ') : `Phase ${phaseNum}`;\n const checklistPattern = new RegExp(\n `-\\\\s*\\\\[[ x]\\\\]\\\\s*(?:\\\\*\\\\*)?Phase\\\\s+${escaped}[:\\\\s][^\\\\n]*`,\n 'i',\n );\n rmContent = rmContent.replace(checklistPattern,\n `- [x] Phase ${phaseNum}: ${phaseName} -- ${outcomeSummary}`,\n );\n\n await fsp.writeFile(rmPath, rmContent, 'utf-8');\n }\n\n // 5. Stage and commit\n const filesToStage = [\n phaseInfo.directory,\n path.relative(cwd, archiveDest).replace(/\\\\/g, '/'),\n '.planning/STATE.md',\n '.planning/ROADMAP.md',\n ];\n await execGit(cwd, ['add', ...filesToStage]);\n await execGit(cwd, ['commit', '-m', `chore(phase-${phaseNum}): archive completed phase`]);\n\n return cmdOk({\n archived: true,\n phase: phaseNum,\n archive_path: path.relative(cwd, archiveDest).replace(/\\\\/g, '/'),\n decisions_pruned: findPhaseTaggedLines(await safeReadFile(statePath(cwd)) ?? '', DECISIONS_SECTION_PATTERN, phaseNum).length === 0,\n blockers_pruned: true,\n roadmap_collapsed: true,\n });\n}\n\n// ─── Get archived phase ─────────────────────────────────────────────────────\n\nexport async function cmdGetArchivedPhase(cwd: string, phaseNum: string): Promise<CmdResult> {\n if (!phaseNum) {\n return cmdErr('phase number required');\n }\n\n const normalized = normalizePhaseName(phaseNum);\n\n // Search .planning/archive/\n const archiveDir = planningPath(cwd, 'archive');\n const found = await searchArchiveLocations(archiveDir, normalized);\n if (found) return cmdOk(found);\n\n return cmdErr(`Phase ${phaseNum} not found in archive`);\n}\n\nasync function searchArchiveLocations(archiveDir: string, normalized: string): Promise<Record<string, unknown> | null> {\n if (!(await pathExistsInternal(archiveDir))) return null;\n\n try {\n const entries = await fsp.readdir(archiveDir, { withFileTypes: true });\n const versionDirs = entries\n .filter(e => e.isDirectory())\n .map(e => e.name)\n .sort()\n .reverse();\n\n for (const versionName of versionDirs) {\n const versionPath = path.join(archiveDir, versionName);\n const result = await searchForPhaseInDir(versionPath, normalized, versionName);\n if (result) return result;\n }\n } catch (e) {\n debugLog('search-archive-locations-failed', e);\n }\n return null;\n}\n\nasync function searchForPhaseInDir(baseDir: string, normalized: string, milestone: string): Promise<Record<string, unknown> | null> {\n try {\n const dirs = await listSubDirs(baseDir, true);\n const match = dirs.find(d => d.startsWith(normalized));\n if (!match) return null;\n\n const phaseDir = path.join(baseDir, match);\n const files = await fsp.readdir(phaseDir);\n const mdFiles = files.filter(f => f.endsWith('.md'));\n\n const contents: Record<string, string> = {};\n for (const f of mdFiles) {\n contents[f] = await fsp.readFile(path.join(phaseDir, f), 'utf-8');\n }\n\n return {\n phase: normalized,\n milestone,\n directory: match,\n files: mdFiles,\n contents,\n };\n } catch (e) {\n debugLog('search-for-phase-in-dir-failed', e);\n return null;\n }\n}\n","/**\n * Template — Template selection and fill operations\n *\n * Ported from maxsim/bin/lib/template.cjs\n */\n\nimport {\n normalizePhaseName,\n findPhaseInternal,\n generateSlugInternal,\n todayISO,\n} from './core.js';\nimport { reconstructFrontmatter } from './frontmatter.js';\nimport type { FrontmatterData, CmdResult } from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Interfaces ──────────────────────────────────────────────────────────────\n\nexport interface TemplateSelectResult {\n template: string;\n type: 'minimal' | 'standard' | 'complex';\n taskCount: number;\n fileCount: number;\n hasDecisions: boolean;\n error?: string;\n}\n\nexport interface TemplateFillOptions {\n phase: string;\n name?: string;\n plan?: string;\n type?: string;\n wave?: string;\n fields?: FrontmatterData;\n}\n\nexport interface TemplateFillResult {\n created: boolean;\n content: string;\n template: string;\n phase: string;\n plan: string;\n}\n\n// ─── Template Select ─────────────────────────────────────────────────────────\n\nexport function cmdTemplateSelect(cwd: string, planPath: string | null): CmdResult {\n if (!planPath) {\n return cmdErr('plan-path required');\n }\n\n try {\n const fullPath = path.join(cwd, planPath);\n const content = fs.readFileSync(fullPath, 'utf-8');\n\n const taskMatch = content.match(/###\\s*Task\\s*\\d+/g) || [];\n const taskCount = taskMatch.length;\n\n const decisionMatch = content.match(/decision/gi) || [];\n const hasDecisions = decisionMatch.length > 0;\n\n const fileMentions = new Set<string>();\n const filePattern = /`([^`]+\\.[a-zA-Z]+)`/g;\n let m: RegExpExecArray | null;\n while ((m = filePattern.exec(content)) !== null) {\n if (m[1].includes('/') && !m[1].startsWith('http')) {\n fileMentions.add(m[1]);\n }\n }\n const fileCount = fileMentions.size;\n\n let template = 'templates/summary-standard.md';\n let type: 'minimal' | 'standard' | 'complex' = 'standard';\n\n if (taskCount <= 2 && fileCount <= 3 && !hasDecisions) {\n template = 'templates/summary-minimal.md';\n type = 'minimal';\n } else if (hasDecisions || fileCount > 6 || taskCount > 5) {\n template = 'templates/summary-complex.md';\n type = 'complex';\n }\n\n const result: TemplateSelectResult = { template, type, taskCount, fileCount, hasDecisions };\n return cmdOk(result, template);\n } catch (thrown: unknown) {\n const selectErr = thrown as Error;\n return cmdOk(\n { template: 'templates/summary-standard.md', type: 'standard', error: selectErr.message } as TemplateSelectResult,\n 'templates/summary-standard.md',\n );\n }\n}\n\n// ─── Template Fill ───────────────────────────────────────────────────────────\n\nexport async function cmdTemplateFill(\n cwd: string,\n templateType: string | null,\n options: TemplateFillOptions,\n): Promise<CmdResult> {\n if (!templateType) {\n return cmdErr('template type required: summary, plan, or verification');\n }\n if (!options.phase) {\n return cmdErr('--phase required');\n }\n\n const phaseInfo = await findPhaseInternal(cwd, options.phase);\n if (!phaseInfo) {\n return cmdOk({ error: 'Phase not found', phase: options.phase });\n }\n\n const padded = normalizePhaseName(options.phase);\n const today = todayISO();\n const phaseName = options.name || phaseInfo.phase_name || 'Unnamed';\n const phaseSlug = phaseInfo.phase_slug || generateSlugInternal(phaseName);\n const phaseId = `${padded}-${phaseSlug}`;\n const planNum = (options.plan || '01').padStart(2, '0');\n const fields = options.fields || {};\n\n let frontmatter: FrontmatterData;\n let body: string;\n let fileName: string;\n\n switch (templateType) {\n case 'summary': {\n frontmatter = {\n phase: phaseId,\n plan: planNum,\n subsystem: '[primary category]',\n tags: [],\n provides: [],\n affects: [],\n 'tech-stack': { added: [], patterns: [] },\n 'key-files': { created: [], modified: [] },\n 'key-decisions': [],\n 'patterns-established': [],\n duration: '[X]min',\n completed: today,\n ...fields,\n };\n body = [\n `# Phase ${options.phase}: ${phaseName} Summary`,\n '',\n '**[Substantive one-liner describing outcome]**',\n '',\n '## Performance',\n '- **Duration:** [time]',\n '- **Tasks:** [count completed]',\n '- **Files modified:** [count]',\n '',\n '## Accomplishments',\n '- [Key outcome 1]',\n '- [Key outcome 2]',\n '',\n '## Task Commits',\n '1. **Task 1: [task name]** - `hash`',\n '',\n '## Files Created/Modified',\n '- `path/to/file.ts` - What it does',\n '',\n '## Decisions & Deviations',\n '[Key decisions or \"None - followed plan as specified\"]',\n '',\n '## Next Phase Readiness',\n '[What\\'s ready for next phase]',\n ].join('\\n');\n fileName = `${padded}-${planNum}-SUMMARY.md`;\n break;\n }\n case 'plan': {\n const planType = options.type || 'execute';\n const wave = parseInt(options.wave || '1') || 1;\n frontmatter = {\n phase: phaseId,\n plan: planNum,\n type: planType,\n wave,\n depends_on: [],\n files_modified: [],\n autonomous: true,\n user_setup: [],\n must_haves: { truths: [], artifacts: [], key_links: [] },\n ...fields,\n };\n body = [\n `# Phase ${options.phase} Plan ${planNum}: [Title]`,\n '',\n '## Objective',\n '- **What:** [What this plan builds]',\n '- **Why:** [Why it matters for the phase goal]',\n '- **Output:** [Concrete deliverable]',\n '',\n '## Context',\n '@.planning/PROJECT.md',\n '@.planning/ROADMAP.md',\n '@.planning/STATE.md',\n '',\n '## Tasks',\n '',\n '<task type=\"code\">',\n ' <name>[Task name]</name>',\n ' <files>[file paths]</files>',\n ' <action>[What to do]</action>',\n ' <verify>[How to verify]</verify>',\n ' <done>[Definition of done]</done>',\n '</task>',\n '',\n '## Verification',\n '[How to verify this plan achieved its objective]',\n '',\n '## Success Criteria',\n '- [ ] [Criterion 1]',\n '- [ ] [Criterion 2]',\n ].join('\\n');\n fileName = `${padded}-${planNum}-PLAN.md`;\n break;\n }\n case 'verification': {\n frontmatter = {\n phase: phaseId,\n verified: new Date().toISOString(),\n status: 'pending',\n score: '0/0 must-haves verified',\n ...fields,\n };\n body = [\n `# Phase ${options.phase}: ${phaseName} — Verification`,\n '',\n '## Observable Truths',\n '| # | Truth | Status | Evidence |',\n '|---|-------|--------|----------|',\n '| 1 | [Truth] | pending | |',\n '',\n '## Required Artifacts',\n '| Artifact | Expected | Status | Details |',\n '|----------|----------|--------|---------|',\n '| [path] | [what] | pending | |',\n '',\n '## Key Link Verification',\n '| From | To | Via | Status | Details |',\n '|------|----|----|--------|---------|',\n '| [source] | [target] | [connection] | pending | |',\n '',\n '## Requirements Coverage',\n '| Requirement | Status | Blocking Issue |',\n '|-------------|--------|----------------|',\n '| [req] | pending | |',\n '',\n '## Result',\n '[Pending verification]',\n ].join('\\n');\n fileName = `${padded}-VERIFICATION.md`;\n break;\n }\n default:\n return cmdErr(`Unknown template type: ${templateType}. Available: summary, plan, verification`);\n }\n\n const fullContent = `---\\n${reconstructFrontmatter(frontmatter)}\\n---\\n\\n${body}\\n`;\n\n // Return generated content — callers (workflows) post it to GitHub Issue comments\n const result: TemplateFillResult = { created: false, content: fullContent, template: templateType, phase: padded, plan: planNum };\n return cmdOk(result);\n}\n","/**\n * Artefakte — CRUD operations for project-level artefakte files\n *\n * Manages DECISIONS.md, ACCEPTANCE-CRITERIA.md, and NO-GOS.md\n * at both project level (.planning/) and phase level (.planning/phases/<phase>/).\n */\n\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport {\n safeReadFile,\n planningPath,\n findPhaseInternal,\n todayISO,\n} from './core.js';\nimport type { CmdResult } from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\ntype ArtefaktType = 'decisions' | 'acceptance-criteria' | 'no-gos';\n\nconst ARTEFAKT_FILES: Record<ArtefaktType, string> = {\n 'decisions': 'DECISIONS.md',\n 'acceptance-criteria': 'ACCEPTANCE-CRITERIA.md',\n 'no-gos': 'NO-GOS.md',\n};\n\n// ─── Internal helpers ────────────────────────────────────────────────────────\n\nfunction isValidType(type: string | undefined): type is ArtefaktType {\n return !!type && type in ARTEFAKT_FILES;\n}\n\nasync function resolveArtefaktPath(cwd: string, type: ArtefaktType, phase?: string): Promise<string | null> {\n const filename = ARTEFAKT_FILES[type];\n if (phase) {\n const phaseInfo = await findPhaseInternal(cwd, phase);\n if (!phaseInfo?.directory) return null;\n return path.join(cwd, phaseInfo.directory, filename);\n }\n return planningPath(cwd, filename);\n}\n\nconst TEMPLATE_FILES: Record<ArtefaktType, string> = {\n 'decisions': 'decisions.md',\n 'acceptance-criteria': 'acceptance-criteria.md',\n 'no-gos': 'no-gos.md',\n};\n\nasync function getTemplate(type: ArtefaktType): Promise<string> {\n // Try loading from installed template files first\n const templatePath = path.join(os.homedir(), '.claude', 'maxsim', 'templates', TEMPLATE_FILES[type]);\n const content = await safeReadFile(templatePath);\n if (content) {\n return content.replace(/\\{\\{date\\}\\}/g, todayISO());\n }\n\n // Fallback to hardcoded templates\n return getHardcodedTemplate(type);\n}\n\nfunction getHardcodedTemplate(type: ArtefaktType): string {\n const today = todayISO();\n switch (type) {\n case 'decisions':\n return `# Decisions\\n\\n> Architectural and design decisions for this project.\\n\\n**Created:** ${today}\\n\\n## Decision Log\\n\\n| # | Decision | Rationale | Date | Phase |\\n|---|----------|-----------|------|-------|\\n`;\n case 'acceptance-criteria':\n return `# Acceptance Criteria\\n\\n> Conditions that must be met for deliverables to be accepted.\\n\\n**Created:** ${today}\\n\\n## Criteria\\n\\n| # | Criterion | Status | Verified |\\n|---|-----------|--------|----------|\\n`;\n case 'no-gos':\n return `# No-Gos\\n\\n> Things explicitly out of scope or forbidden.\\n\\n**Created:** ${today}\\n\\n## Boundaries\\n\\n- _No entries yet._\\n`;\n }\n}\n\n// ─── Commands ────────────────────────────────────────────────────────────────\n\nexport async function cmdArtefakteRead(\n cwd: string,\n type: string | undefined,\n phase: string | undefined,\n raw: boolean,\n): Promise<CmdResult> {\n if (!isValidType(type)) {\n return cmdErr(`Invalid artefakt type: ${type}. Available: ${Object.keys(ARTEFAKT_FILES).join(', ')}`);\n }\n\n const filePath = await resolveArtefaktPath(cwd, type, phase);\n if (!filePath) return cmdErr(`Phase ${phase} not found`);\n\n const content = await safeReadFile(filePath);\n if (content === null) {\n return cmdOk({ exists: false, type, phase: phase ?? null, content: null }, raw ? '' : undefined);\n }\n\n return cmdOk({ exists: true, type, phase: phase ?? null, content }, raw ? content : undefined);\n}\n\nexport async function cmdArtefakteWrite(\n cwd: string,\n type: string | undefined,\n content: string | undefined,\n phase: string | undefined,\n raw: boolean,\n): Promise<CmdResult> {\n if (!isValidType(type)) {\n return cmdErr(`Invalid artefakt type: ${type}. Available: ${Object.keys(ARTEFAKT_FILES).join(', ')}`);\n }\n\n const fileContent = content ?? await getTemplate(type);\n const filePath = await resolveArtefaktPath(cwd, type, phase);\n if (!filePath) return cmdErr(`Phase ${phase} not found`);\n\n // Ensure parent directory exists\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n\n fs.writeFileSync(filePath, fileContent, 'utf-8');\n const relPath = path.relative(cwd, filePath);\n return cmdOk({ written: true, type, phase: phase ?? null, path: relPath }, raw ? relPath : undefined);\n}\n\nexport async function cmdArtefakteAppend(\n cwd: string,\n type: string | undefined,\n entry: string | undefined,\n phase: string | undefined,\n raw: boolean,\n): Promise<CmdResult> {\n if (!entry) {\n return cmdErr('entry required for artefakte append');\n }\n\n if (!isValidType(type)) {\n return cmdErr(`Invalid artefakt type: ${type}. Available: ${Object.keys(ARTEFAKT_FILES).join(', ')}`);\n }\n\n const filePath = await resolveArtefaktPath(cwd, type, phase);\n if (!filePath) return cmdErr(`Phase ${phase} not found`);\n\n let fileContent = await safeReadFile(filePath);\n if (fileContent === null) {\n // Auto-create from template\n fileContent = await getTemplate(type);\n }\n\n // Remove placeholder lines like \"- _No entries yet._\"\n fileContent = fileContent.replace(/^-\\s*_No entries yet\\._\\s*$/m, '');\n\n // Append the entry\n const today = todayISO();\n let appendLine: string;\n\n if (type === 'decisions') {\n const rowCount = (fileContent.match(/^\\|\\s*\\d+/gm) || []).length;\n appendLine = `| ${rowCount + 1} | ${entry} | - | ${today} | - |`;\n } else if (type === 'acceptance-criteria') {\n const rowCount = (fileContent.match(/^\\|\\s*\\d+/gm) || []).length;\n appendLine = `| ${rowCount + 1} | ${entry} | pending | - |`;\n } else {\n appendLine = `- ${entry}`;\n }\n\n fileContent = fileContent.trimEnd() + '\\n' + appendLine + '\\n';\n fs.writeFileSync(filePath, fileContent, 'utf-8');\n\n const relPath = path.relative(cwd, filePath);\n return cmdOk({ appended: true, type, phase: phase ?? null, entry: appendLine, path: relPath }, raw ? 'true' : undefined);\n}\n\nexport async function cmdArtefakteList(\n cwd: string,\n phase: string | undefined,\n raw: boolean,\n): Promise<CmdResult> {\n const results: Array<{ type: ArtefaktType; exists: boolean; path: string }> = [];\n\n for (const [type, filename] of Object.entries(ARTEFAKT_FILES)) {\n let filePath: string;\n if (phase) {\n const phaseInfo = await findPhaseInternal(cwd, phase);\n if (!phaseInfo?.directory) {\n return cmdOk({ error: `Phase ${phase} not found` });\n }\n filePath = path.join(cwd, phaseInfo.directory, filename);\n } else {\n filePath = planningPath(cwd, filename);\n }\n\n results.push({\n type: type as ArtefaktType,\n exists: fs.existsSync(filePath),\n path: path.relative(cwd, filePath),\n });\n }\n\n return cmdOk({ phase: phase ?? null, artefakte: results });\n}\n","/**\n * Context Loader — Intelligent file selection for workflow context assembly\n *\n * Selects relevant planning files based on the current task/phase domain,\n * preventing context overload by loading only what matters.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport {\n safeReadFile,\n planningPath,\n phasesPath,\n findPhaseInternal,\n debugLog,\n listSubDirs,\n} from './core.js';\nimport type { CmdResult } from './types.js';\nimport { cmdOk } from './types.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ContextFile {\n path: string;\n role: string;\n size: number;\n}\n\nexport interface ContextLoadResult {\n files: ContextFile[];\n total_size: number;\n phase: string | null;\n topic: string | null;\n codebase_docs_selected: string[];\n}\n\n// ─── Internal helpers ────────────────────────────────────────────────────────\n\nfunction fileEntry(cwd: string, relPath: string, role: string): ContextFile | null {\n const fullPath = path.join(cwd, relPath);\n try {\n const stats = fs.statSync(fullPath);\n return { path: relPath, role, size: stats.size };\n } catch {\n return null;\n }\n}\n\nfunction addIfExists(files: ContextFile[], cwd: string, relPath: string, role: string): void {\n const entry = fileEntry(cwd, relPath, role);\n if (entry) files.push(entry);\n}\n\n// ─── Topic-based codebase doc selection ──────────────────────────────────────\n\nconst TOPIC_TO_CODEBASE_DOCS: Record<string, string[]> = {\n ui: ['CONVENTIONS.md', 'STRUCTURE.md'],\n frontend: ['CONVENTIONS.md', 'STRUCTURE.md'],\n component: ['CONVENTIONS.md', 'STRUCTURE.md'],\n api: ['ARCHITECTURE.md', 'CONVENTIONS.md'],\n backend: ['ARCHITECTURE.md', 'CONVENTIONS.md'],\n server: ['ARCHITECTURE.md', 'CONVENTIONS.md'],\n database: ['ARCHITECTURE.md', 'STACK.md'],\n schema: ['ARCHITECTURE.md', 'STACK.md'],\n data: ['ARCHITECTURE.md', 'STACK.md'],\n testing: ['TESTING.md', 'CONVENTIONS.md'],\n test: ['TESTING.md', 'CONVENTIONS.md'],\n integration: ['INTEGRATIONS.md', 'STACK.md'],\n deploy: ['INTEGRATIONS.md', 'STACK.md'],\n refactor: ['CONCERNS.md', 'ARCHITECTURE.md'],\n cleanup: ['CONCERNS.md', 'ARCHITECTURE.md'],\n setup: ['STACK.md', 'STRUCTURE.md'],\n config: ['STACK.md', 'STRUCTURE.md'],\n auth: ['ARCHITECTURE.md', 'INTEGRATIONS.md'],\n performance: ['ARCHITECTURE.md', 'STACK.md'],\n install: ['STACK.md', 'STRUCTURE.md'],\n};\n\nconst DEFAULT_CODEBASE_DOCS = ['STACK.md', 'ARCHITECTURE.md'];\n\nfunction selectCodebaseDocs(topic: string | undefined): string[] {\n if (!topic) return DEFAULT_CODEBASE_DOCS;\n\n const topicLower = topic.toLowerCase();\n const matched = new Set<string>();\n\n for (const [keyword, docs] of Object.entries(TOPIC_TO_CODEBASE_DOCS)) {\n if (topicLower.includes(keyword)) {\n for (const doc of docs) matched.add(doc);\n }\n }\n\n return matched.size > 0 ? Array.from(matched) : DEFAULT_CODEBASE_DOCS;\n}\n\n// ─── Context loading strategies ──────────────────────────────────────────────\n\nfunction loadProjectContext(cwd: string): ContextFile[] {\n const files: ContextFile[] = [];\n addIfExists(files, cwd, '.planning/PROJECT.md', 'project-vision');\n addIfExists(files, cwd, '.planning/REQUIREMENTS.md', 'requirements');\n addIfExists(files, cwd, '.planning/STATE.md', 'state');\n addIfExists(files, cwd, '.planning/config.json', 'config');\n return files;\n}\n\nfunction loadRoadmapContext(cwd: string): ContextFile[] {\n const files: ContextFile[] = [];\n addIfExists(files, cwd, '.planning/ROADMAP.md', 'roadmap');\n return files;\n}\n\nasync function loadPhaseContext(_cwd: string, _phase: string): Promise<ContextFile[]> {\n // Phase artifacts (CONTEXT, RESEARCH, PLAN, SUMMARY, VERIFICATION) are now\n // stored as GitHub Issue comments. Workflows load them directly from GitHub.\n return [];\n}\n\nasync function loadArtefakteContext(cwd: string, phase?: string): Promise<ContextFile[]> {\n const files: ContextFile[] = [];\n const artefakte = ['DECISIONS.md', 'ACCEPTANCE-CRITERIA.md', 'NO-GOS.md'];\n\n for (const filename of artefakte) {\n if (phase) {\n const phaseInfo = await findPhaseInternal(cwd, phase);\n if (phaseInfo?.directory) {\n addIfExists(files, cwd, path.join(phaseInfo.directory, filename), `artefakt-${filename.toLowerCase()}`);\n }\n }\n // Always include project-level artefakte\n addIfExists(files, cwd, `.planning/${filename}`, `artefakt-${filename.toLowerCase()}`);\n }\n\n return files;\n}\n\nfunction loadCodebaseContext(cwd: string, topic?: string): ContextFile[] {\n const files: ContextFile[] = [];\n const codebaseDir = planningPath(cwd, 'codebase');\n\n try {\n const existing = fs.readdirSync(codebaseDir).filter(f => f.endsWith('.md'));\n const selected = selectCodebaseDocs(topic);\n\n for (const filename of selected) {\n if (existing.includes(filename)) {\n addIfExists(files, cwd, `.planning/codebase/${filename}`, `codebase-${filename.replace('.md', '').toLowerCase()}`);\n }\n }\n } catch {\n // No codebase directory — skip silently\n }\n\n return files;\n}\n\nasync function loadHistoryContext(cwd: string, currentPhase?: string): Promise<ContextFile[]> {\n const files: ContextFile[] = [];\n const pd = phasesPath(cwd);\n\n try {\n const dirs = await listSubDirs(pd, true);\n for (const dir of dirs) {\n // Skip current phase — it's loaded separately\n if (currentPhase) {\n const dirPhase = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i)?.[1];\n if (dirPhase === currentPhase) continue;\n }\n\n // Use findPhaseInternal (GitHub-first) for summary discovery\n const dm = dir.match(/^(\\d+[A-Z]?(?:\\.\\d+)?)/i);\n if (!dm) continue;\n const phaseInfo = await findPhaseInternal(cwd, dm[1]);\n if (!phaseInfo) continue;\n\n // Only load summaries from completed phases (lightweight history)\n for (const s of phaseInfo.summaries) {\n addIfExists(files, cwd, path.join('.planning', 'phases', dir, s), 'history-summary');\n }\n }\n } catch (e) {\n debugLog('context-loader-history-failed', e);\n }\n\n return files;\n}\n\n// ─── Commands ────────────────────────────────────────────────────────────────\n\nexport async function cmdContextLoad(\n cwd: string,\n phase: string | undefined,\n topic: string | undefined,\n includeHistory: boolean,\n): Promise<CmdResult> {\n const allFiles: ContextFile[] = [];\n\n // Always load core project context\n allFiles.push(...loadProjectContext(cwd));\n allFiles.push(...loadRoadmapContext(cwd));\n\n // Load artefakte\n allFiles.push(...await loadArtefakteContext(cwd, phase));\n\n // Load relevant codebase docs based on topic\n const selectedDocs = selectCodebaseDocs(topic);\n allFiles.push(...loadCodebaseContext(cwd, topic));\n\n // Phase-specific context\n if (phase) {\n allFiles.push(...await loadPhaseContext(cwd, phase));\n }\n\n // History from completed phases\n if (includeHistory) {\n allFiles.push(...await loadHistoryContext(cwd, phase));\n }\n\n // Deduplicate by path\n const seen = new Set<string>();\n const deduped = allFiles.filter(f => {\n if (seen.has(f.path)) return false;\n seen.add(f.path);\n return true;\n });\n\n const totalSize = deduped.reduce((sum, f) => sum + f.size, 0);\n\n const result: ContextLoadResult = {\n files: deduped,\n total_size: totalSize,\n phase: phase ?? null,\n topic: topic ?? null,\n codebase_docs_selected: selectedDocs,\n };\n\n return cmdOk(result);\n}\n","/**\n * Skills — List, install, and update skill templates\n *\n * Skills are installed to `.claude/skills/<name>/SKILL.md`.\n * Source templates live in `templates/skills/<name>/SKILL.md`.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { safeReadFile } from './core.js';\nimport { extractFrontmatter } from './frontmatter.js';\nimport { cmdOk, cmdErr, type CmdResult } from './types.js';\n\n// ─── Internal helpers ────────────────────────────────────────────────────────\n\n/**\n * Resolve the installed skills directory for the current project.\n * Skills live at `.claude/skills/` relative to cwd.\n */\nfunction skillsDir(cwd: string): string {\n return path.join(cwd, '.claude', 'skills');\n}\n\n/**\n * Resolve the templates source directory for skills.\n * At runtime (from dist/cli.cjs), templates are bundled at dist/assets/templates/skills/.\n */\nfunction skillsTemplateDir(): string {\n return path.resolve(__dirname, 'assets', 'templates', 'skills');\n}\n\ninterface SkillInfo {\n name: string;\n description: string;\n directory: string;\n}\n\n/**\n * Read a single skill's metadata from its SKILL.md frontmatter.\n */\nasync function readSkillInfo(skillDir: string, dirName: string): Promise<SkillInfo | null> {\n const skillMd = path.join(skillDir, 'SKILL.md');\n const content = await safeReadFile(skillMd);\n if (!content) return null;\n\n const fm = extractFrontmatter(content);\n return {\n name: (fm.name as string) ?? dirName,\n description: (fm.description as string) ?? '',\n directory: dirName,\n };\n}\n\n// ─── Commands ────────────────────────────────────────────────────────────────\n\n/**\n * List all installed skills from `.claude/skills/`.\n */\nexport async function cmdSkillList(cwd: string): Promise<CmdResult> {\n const dir = skillsDir(cwd);\n\n if (!fs.existsSync(dir)) {\n return cmdOk({ skills: [], count: 0 }, 'No skills installed.');\n }\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const skills: SkillInfo[] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const info = await readSkillInfo(path.join(dir, entry.name), entry.name);\n if (info) skills.push(info);\n }\n\n return cmdOk({ skills, count: skills.length }, skills.map(s => `${s.name}: ${s.description}`).join('\\n'));\n}\n\n/**\n * Install a specific skill from the templates directory.\n */\nexport function cmdSkillInstall(cwd: string, skillName: string | undefined): CmdResult {\n if (!skillName) {\n return cmdErr('skill name required. Usage: skill-install <name>');\n }\n\n const srcFile = path.join(skillsTemplateDir(), skillName, 'SKILL.md');\n\n if (!fs.existsSync(srcFile)) {\n // List available skills for a helpful error\n const available = listAvailableTemplates();\n return cmdErr(`Skill \"${skillName}\" not found in templates. Available: ${available.join(', ')}`);\n }\n\n const destDir = path.join(skillsDir(cwd), skillName);\n const destFile = path.join(destDir, 'SKILL.md');\n\n fs.mkdirSync(destDir, { recursive: true });\n fs.copyFileSync(srcFile, destFile);\n\n return cmdOk({ installed: true, skill: skillName, path: path.relative(cwd, destFile) }, `Installed skill: ${skillName}`);\n}\n\n/**\n * Update one or all installed skills from the templates source.\n */\nexport function cmdSkillUpdate(cwd: string, skillName: string | undefined): CmdResult {\n const dir = skillsDir(cwd);\n const templateDir = skillsTemplateDir();\n\n if (skillName) {\n // Update a single skill\n const srcFile = path.join(templateDir, skillName, 'SKILL.md');\n if (!fs.existsSync(srcFile)) {\n return cmdErr(`Skill template \"${skillName}\" not found.`);\n }\n\n const destDir = path.join(dir, skillName);\n if (!fs.existsSync(destDir)) {\n return cmdErr(`Skill \"${skillName}\" is not installed. Use skill-install first.`);\n }\n\n const destFile = path.join(destDir, 'SKILL.md');\n fs.copyFileSync(srcFile, destFile);\n\n return cmdOk({ updated: [skillName], skipped: [], not_found: [] }, `Updated skill: ${skillName}`);\n }\n\n // Update all installed skills\n if (!fs.existsSync(dir)) {\n return cmdOk({ updated: [], skipped: [], not_found: [] }, 'No skills installed.');\n }\n\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n const updated: string[] = [];\n const skipped: string[] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const name = entry.name;\n const srcFile = path.join(templateDir, name, 'SKILL.md');\n\n if (!fs.existsSync(srcFile)) {\n // Custom/user skill — no template to update from\n skipped.push(name);\n continue;\n }\n\n const destFile = path.join(dir, name, 'SKILL.md');\n fs.copyFileSync(srcFile, destFile);\n updated.push(name);\n }\n\n const summary = updated.length > 0\n ? `Updated ${updated.length} skill(s): ${updated.join(', ')}`\n : 'No skills updated.';\n\n return cmdOk({ updated, skipped }, summary);\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction listAvailableTemplates(): string[] {\n const dir = skillsTemplateDir();\n if (!fs.existsSync(dir)) return [];\n return fs.readdirSync(dir, { withFileTypes: true })\n .filter(e => e.isDirectory())\n .map(e => e.name);\n}\n","/**\n * Init — Compound init commands for workflow bootstrapping\n *\n * Ported from maxsim/bin/lib/init.cjs\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\nimport {\n loadConfig,\n resolveModelInternal,\n findPhaseInternal,\n getRoadmapPhaseInternal,\n pathExistsInternal,\n generateSlugInternal,\n getMilestoneInfo,\n getArchivedPhaseDirs,\n debugLog,\n planningPath,\n phasesPath,\n todayISO,\n listSubDirs,\n} from './core.js';\n\nimport { cmdOk, cmdErr } from './types.js';\nimport type {\n AgentType,\n BranchingStrategy,\n ModelResolution,\n PhaseSearchResult,\n MilestoneInfo,\n AppConfig,\n CmdResult,\n ExecutorAgentContext,\n PlannerAgentContext,\n ResearcherAgentContext,\n VerifierAgentContext,\n DebuggerAgentContext,\n CheckDriftContext,\n RealignContext,\n WorktreeMode,\n ReviewConfig,\n} from './types.js';\n\nimport { loadMapping } from '../github/mapping.js';\nimport type { IssueMappingFile } from '../github/types.js';\n\n// ─── GitHub context helper ───────────────────────────────────────────────────\n\nfunction getGitHubContext(cwd: string): {\n github_ready: boolean;\n project_number: number | null;\n mapping: IssueMappingFile | null;\n} {\n try {\n const mapping = loadMapping(cwd);\n if (!mapping || !mapping.project_number) {\n return { github_ready: false, project_number: null, mapping: null };\n }\n return { github_ready: true, project_number: mapping.project_number, mapping };\n } catch {\n return { github_ready: false, project_number: null, mapping: null };\n }\n}\n\n// ─── Init result types ──────────────────────────────────────────────────────\n\nexport type WorkflowType =\n | 'execute-phase'\n | 'plan-phase'\n | 'new-project'\n | 'new-milestone'\n | 'quick'\n | 'resume'\n | 'verify-work'\n | 'phase-op'\n | 'milestone-op'\n | 'map-codebase'\n | 'init-existing'\n | 'progress'\n | 'check-drift'\n | 'realign';\n\nexport interface ExecutePhaseContext {\n executor_model: ModelResolution;\n verifier_model: ModelResolution;\n commit_docs: boolean;\n parallelization: boolean;\n branching_strategy: BranchingStrategy;\n phase_branch_template: string;\n milestone_branch_template: string;\n verifier_enabled: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n phase_slug: string | null;\n phase_req_ids: string | null;\n plans: string[];\n summaries: string[];\n incomplete_plans: string[];\n plan_count: number;\n incomplete_count: number;\n branch_name: string | null;\n milestone_version: string;\n milestone_name: string;\n milestone_slug: string | null;\n state_exists: boolean;\n roadmap_exists: boolean;\n config_exists: boolean;\n has_verification: boolean;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n config_path: string;\n worktree_mode: WorktreeMode;\n max_parallel_agents: number;\n review_config: ReviewConfig;\n github_ready: boolean;\n project_number: number | null;\n phase_issue_number: number | null;\n phase_item_id: string | null;\n task_mappings: Record<string, { number: number; id: number; item_id: string; status: string }> | null;\n}\n\nexport interface PlanPhaseContext {\n researcher_model: ModelResolution;\n planner_model: ModelResolution;\n checker_model: ModelResolution;\n research_enabled: boolean;\n plan_checker_enabled: boolean;\n commit_docs: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n phase_slug: string | null;\n padded_phase: string | null;\n phase_req_ids: string | null;\n has_research: boolean;\n has_context: boolean;\n has_plans: boolean;\n plan_count: number;\n planning_exists: boolean;\n roadmap_exists: boolean;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n conventions_path?: string;\n verification_path?: string;\n uat_path?: string;\n github_ready: boolean;\n project_number: number | null;\n phase_issue_number: number | null;\n phase_item_id: string | null;\n}\n\nexport interface NewProjectContext {\n researcher_model: ModelResolution;\n synthesizer_model: ModelResolution;\n roadmapper_model: ModelResolution;\n commit_docs: boolean;\n project_exists: boolean;\n has_codebase_map: boolean;\n planning_exists: boolean;\n has_existing_code: boolean;\n has_package_file: boolean;\n is_brownfield: boolean;\n needs_codebase_map: boolean;\n has_git: boolean;\n brave_search_available: boolean;\n project_path: string;\n github_ready: boolean;\n has_github_remote: boolean;\n gh_authenticated: boolean;\n}\n\nexport interface NewMilestoneContext {\n researcher_model: ModelResolution;\n synthesizer_model: ModelResolution;\n roadmapper_model: ModelResolution;\n commit_docs: boolean;\n research_enabled: boolean;\n current_milestone: string;\n current_milestone_name: string;\n project_exists: boolean;\n roadmap_exists: boolean;\n state_exists: boolean;\n project_path: string;\n roadmap_path: string;\n state_path: string;\n}\n\nexport interface QuickContext {\n planner_model: ModelResolution;\n executor_model: ModelResolution;\n checker_model: ModelResolution;\n verifier_model: ModelResolution;\n commit_docs: boolean;\n next_num: number;\n slug: string | null;\n description: string | null;\n date: string;\n timestamp: string;\n quick_dir: string;\n task_dir: string | null;\n roadmap_exists: boolean;\n planning_exists: boolean;\n}\n\nexport interface ResumeContext {\n state_exists: boolean;\n roadmap_exists: boolean;\n project_exists: boolean;\n planning_exists: boolean;\n state_path: string;\n roadmap_path: string;\n project_path: string;\n has_interrupted_agent: boolean;\n interrupted_agent_id: string | null;\n commit_docs: boolean;\n}\n\nexport interface VerifyWorkContext {\n planner_model: ModelResolution;\n checker_model: ModelResolution;\n commit_docs: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n has_verification: boolean;\n}\n\nexport interface PhaseOpContext {\n commit_docs: boolean;\n brave_search: boolean;\n phase_found: boolean;\n phase_dir: string | null;\n phase_number: string | null;\n phase_name: string | null;\n phase_slug: string | null;\n padded_phase: string | null;\n has_research: boolean;\n has_context: boolean;\n has_plans: boolean;\n has_verification: boolean;\n plan_count: number;\n roadmap_exists: boolean;\n planning_exists: boolean;\n state_path: string;\n roadmap_path: string;\n requirements_path: string;\n conventions_path?: string;\n verification_path?: string;\n uat_path?: string;\n}\n\nexport interface MilestoneOpContext {\n commit_docs: boolean;\n milestone_version: string;\n milestone_name: string;\n milestone_slug: string | null;\n phase_count: number;\n completed_phases: number;\n all_phases_complete: boolean;\n archived_milestones: string[];\n archive_count: number;\n project_exists: boolean;\n roadmap_exists: boolean;\n state_exists: boolean;\n archive_exists: boolean;\n phases_dir_exists: boolean;\n}\n\nexport interface MapCodebaseContext {\n mapper_model: ModelResolution;\n commit_docs: boolean;\n search_gitignored: boolean;\n parallelization: boolean;\n codebase_dir: string;\n existing_maps: string[];\n has_maps: boolean;\n planning_exists: boolean;\n codebase_dir_exists: boolean;\n}\n\nexport interface InitExistingContext {\n researcher_model: ModelResolution;\n synthesizer_model: ModelResolution;\n roadmapper_model: ModelResolution;\n mapper_model: ModelResolution;\n commit_docs: boolean;\n project_exists: boolean;\n planning_exists: boolean;\n planning_files: string[];\n has_codebase_map: boolean;\n has_existing_code: boolean;\n has_package_file: boolean;\n has_git: boolean;\n has_readme: boolean;\n conflict_detected: boolean;\n existing_file_count: number;\n brave_search_available: boolean;\n parallelization: boolean;\n project_path: string;\n codebase_dir: string;\n github_ready: boolean;\n has_github_remote: boolean;\n gh_authenticated: boolean;\n}\n\ninterface ProgressPhaseInfo {\n number: string;\n name: string | null;\n directory: string;\n status: string;\n plan_count: number;\n summary_count: number;\n has_research: boolean;\n}\n\nexport interface ProgressContext {\n executor_model: ModelResolution;\n planner_model: ModelResolution;\n commit_docs: boolean;\n milestone_version: string;\n milestone_name: string;\n phases: ProgressPhaseInfo[];\n phase_count: number;\n completed_count: number;\n in_progress_count: number;\n current_phase: ProgressPhaseInfo | null;\n next_phase: ProgressPhaseInfo | null;\n paused_at: string | null;\n has_work_in_progress: boolean;\n project_exists: boolean;\n roadmap_exists: boolean;\n state_exists: boolean;\n state_path: string;\n roadmap_path: string;\n project_path: string;\n config_path: string;\n github_ready: boolean;\n project_number: number | null;\n phase_mappings: Record<string, { issue_number: number; item_id: string }> | null;\n}\n\nexport type InitContext =\n | ExecutePhaseContext\n | PlanPhaseContext\n | NewProjectContext\n | NewMilestoneContext\n | QuickContext\n | ResumeContext\n | VerifyWorkContext\n | PhaseOpContext\n | MilestoneOpContext\n | MapCodebaseContext\n | InitExistingContext\n | ProgressContext\n | CheckDriftContext\n | RealignContext;\n\n// ─── Helper: extract requirement IDs from roadmap phase section ─────────────\n\nasync function extractReqIds(cwd: string, phase: string): Promise<string | null> {\n const roadmapPhase = await getRoadmapPhaseInternal(cwd, phase);\n const reqMatch = roadmapPhase?.section?.match(/^\\*\\*Requirements\\*\\*:[^\\S\\n]*([^\\n]*)$/m);\n const reqExtracted = reqMatch ? reqMatch[1].replace(/[\\[\\]]/g, '').split(',').map((s: string) => s.trim()).filter(Boolean).join(', ') : null;\n return (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;\n}\n\n// ─── Helper: cross-platform code file detection ─────────────────────────────\n\nconst CODE_EXTENSIONS = new Set(['.ts', '.js', '.py', '.go', '.rs', '.swift', '.java']);\nconst EXCLUDED_DIRS = new Set(['node_modules', '.git']);\n\nfunction findCodeFiles(dir: string, maxDepth: number = 3, limit: number = 5): string[] {\n const results: string[] = [];\n function walk(currentDir: string, depth: number): void {\n if (depth > maxDepth || results.length >= limit) return;\n let entries: fs.Dirent[];\n try { entries = fs.readdirSync(currentDir, { withFileTypes: true }); } catch { return; }\n for (const entry of entries) {\n if (results.length >= limit) return;\n if (EXCLUDED_DIRS.has(entry.name)) continue;\n const fullPath = path.join(currentDir, entry.name);\n if (entry.isDirectory()) { walk(fullPath, depth + 1); }\n else if (entry.isFile()) { const ext = path.extname(entry.name).toLowerCase(); if (CODE_EXTENSIONS.has(ext)) results.push(fullPath); }\n }\n }\n walk(dir, 1);\n return results;\n}\n\n// ─── Init commands ──────────────────────────────────────────────────────────\n\nexport async function cmdInitExecutePhase(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init execute-phase');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase!);\n const milestone = await getMilestoneInfo(cwd);\n const phase_req_ids = await extractReqIds(cwd, phase!);\n const ghCtx = getGitHubContext(cwd);\n const phaseNum = phaseInfo?.phase_number ?? phase;\n const phaseMapping = ghCtx.mapping?.phases[phaseNum] ?? null;\n const result: ExecutePhaseContext = {\n executor_model: await resolveModelInternal(cwd, 'executor'),\n verifier_model: await resolveModelInternal(cwd, 'verifier'),\n commit_docs: config.commit_docs,\n parallelization: config.parallelization,\n branching_strategy: config.branching_strategy,\n phase_branch_template: config.phase_branch_template,\n milestone_branch_template: config.milestone_branch_template,\n verifier_enabled: config.verifier,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n phase_slug: phaseInfo?.phase_slug ?? null,\n phase_req_ids,\n plans: phaseInfo?.plans ?? [],\n summaries: phaseInfo?.summaries ?? [],\n incomplete_plans: phaseInfo?.incomplete_plans ?? [],\n plan_count: phaseInfo?.plans?.length ?? 0,\n incomplete_count: phaseInfo?.incomplete_plans?.length ?? 0,\n branch_name: config.branching_strategy === 'phase' && phaseInfo\n ? config.phase_branch_template.replace('{phase}', phaseInfo.phase_number).replace('{slug}', phaseInfo.phase_slug || 'phase')\n : config.branching_strategy === 'milestone'\n ? config.milestone_branch_template.replace('{milestone}', milestone.version).replace('{slug}', generateSlugInternal(milestone.name) || 'milestone')\n : null,\n milestone_version: milestone.version,\n milestone_name: milestone.name,\n milestone_slug: generateSlugInternal(milestone.name),\n state_exists: await pathExistsInternal(planningPath(cwd, 'STATE.md')),\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n config_exists: await pathExistsInternal(planningPath(cwd, 'config.json')),\n has_verification: phaseInfo?.has_verification ?? false,\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n config_path: '.planning/config.json',\n worktree_mode: config.worktree_mode ?? 'auto',\n max_parallel_agents: config.max_parallel_agents ?? 10,\n review_config: config.review ?? {\n spec_review: true,\n code_review: true,\n simplify_review: true,\n retry_limit: 3,\n },\n github_ready: ghCtx.github_ready,\n project_number: ghCtx.project_number,\n phase_issue_number: phaseMapping?.tracking_issue.number ?? null,\n phase_item_id: phaseMapping?.tracking_issue.item_id ?? null,\n task_mappings: phaseMapping?.tasks\n ? Object.fromEntries(\n Object.entries(phaseMapping.tasks).map(([k, v]) => [\n k,\n { number: v.number, id: v.id, item_id: v.item_id, status: v.status },\n ]),\n )\n : null,\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitPlanPhase(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init plan-phase');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase!);\n const phase_req_ids = await extractReqIds(cwd, phase!);\n const ghCtx = getGitHubContext(cwd);\n const phaseNum = phaseInfo?.phase_number ?? phase;\n const phaseMapping = ghCtx.mapping?.phases[phaseNum] ?? null;\n const result: PlanPhaseContext = {\n researcher_model: await resolveModelInternal(cwd, 'researcher'),\n planner_model: await resolveModelInternal(cwd, 'planner'),\n checker_model: await resolveModelInternal(cwd, 'planner'),\n research_enabled: config.research,\n plan_checker_enabled: config.plan_checker,\n commit_docs: config.commit_docs,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n phase_slug: phaseInfo?.phase_slug ?? null,\n padded_phase: phaseInfo?.phase_number?.padStart(2, '0') ?? null,\n phase_req_ids,\n has_research: phaseInfo?.has_research ?? false,\n has_context: phaseInfo?.has_context ?? false,\n has_plans: (phaseInfo?.plans?.length ?? 0) > 0,\n plan_count: phaseInfo?.plans?.length ?? 0,\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n github_ready: ghCtx.github_ready,\n project_number: ghCtx.project_number,\n phase_issue_number: phaseMapping?.tracking_issue.number ?? null,\n phase_item_id: phaseMapping?.tracking_issue.item_id ?? null,\n };\n if (await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'))) {\n result.conventions_path = '.planning/CONVENTIONS.md';\n }\n return cmdOk(result);\n}\n\nexport async function cmdInitNewProject(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const homedir = os.homedir();\n const braveKeyFile = path.join(homedir, '.maxsim', 'brave_api_key');\n const hasBraveSearch = !!(process.env.BRAVE_API_KEY || fs.existsSync(braveKeyFile));\n const hasCode = findCodeFiles(cwd).length > 0;\n const hasPackageFile = await pathExistsInternal(path.join(cwd, 'package.json')) || await pathExistsInternal(path.join(cwd, 'requirements.txt')) || await pathExistsInternal(path.join(cwd, 'Cargo.toml')) || await pathExistsInternal(path.join(cwd, 'go.mod')) || await pathExistsInternal(path.join(cwd, 'Package.swift'));\n const hasCodebaseMap = await pathExistsInternal(planningPath(cwd, 'codebase'));\n const ghCtx = getGitHubContext(cwd);\n let hasGitHubRemote = false;\n try {\n const { spawnSync } = await import('node:child_process');\n const remoteResult = spawnSync('git', ['remote', 'get-url', 'origin'], { cwd, encoding: 'utf-8' });\n hasGitHubRemote = remoteResult.status === 0 && !!remoteResult.stdout.trim();\n } catch { /* no git remote */ }\n let ghAuthenticated = false;\n try {\n const { spawnSync } = await import('node:child_process');\n const authResult = spawnSync('gh', ['auth', 'status'], { cwd, encoding: 'utf-8' });\n ghAuthenticated = authResult.status === 0;\n } catch { /* gh not installed or not authenticated */ }\n const result: NewProjectContext = {\n researcher_model: await resolveModelInternal(cwd, 'researcher'),\n synthesizer_model: await resolveModelInternal(cwd, 'researcher'),\n roadmapper_model: await resolveModelInternal(cwd, 'planner'),\n commit_docs: config.commit_docs,\n project_exists: await pathExistsInternal(planningPath(cwd, 'PROJECT.md')),\n has_codebase_map: hasCodebaseMap,\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n has_existing_code: hasCode,\n has_package_file: hasPackageFile,\n is_brownfield: hasCode || hasPackageFile,\n needs_codebase_map: (hasCode || hasPackageFile) && !hasCodebaseMap,\n has_git: await pathExistsInternal(path.join(cwd, '.git')),\n brave_search_available: hasBraveSearch,\n project_path: '.planning/PROJECT.md',\n github_ready: ghCtx.github_ready,\n has_github_remote: hasGitHubRemote,\n gh_authenticated: ghAuthenticated,\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitNewMilestone(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const milestone = await getMilestoneInfo(cwd);\n const result: NewMilestoneContext = {\n researcher_model: await resolveModelInternal(cwd, 'researcher'),\n synthesizer_model: await resolveModelInternal(cwd, 'researcher'),\n roadmapper_model: await resolveModelInternal(cwd, 'planner'),\n commit_docs: config.commit_docs,\n research_enabled: config.research,\n current_milestone: milestone.version,\n current_milestone_name: milestone.name,\n project_exists: await pathExistsInternal(planningPath(cwd, 'PROJECT.md')),\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n state_exists: await pathExistsInternal(planningPath(cwd, 'STATE.md')),\n project_path: '.planning/PROJECT.md',\n roadmap_path: '.planning/ROADMAP.md',\n state_path: '.planning/STATE.md',\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitQuick(cwd: string, description: string | undefined): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const now = new Date();\n const slug = description ? generateSlugInternal(description)?.substring(0, 40) ?? null : null;\n const quickDir = planningPath(cwd, 'quick');\n let nextNum = 1;\n try {\n const existing = fs.readdirSync(quickDir).filter(f => /^\\d+-/.test(f)).map(f => parseInt(f.split('-')[0], 10)).filter(n => !isNaN(n));\n if (existing.length > 0) nextNum = Math.max(...existing) + 1;\n } catch (e) { debugLog(e); }\n const result: QuickContext = {\n planner_model: await resolveModelInternal(cwd, 'planner'),\n executor_model: await resolveModelInternal(cwd, 'executor'),\n checker_model: await resolveModelInternal(cwd, 'planner'),\n verifier_model: await resolveModelInternal(cwd, 'verifier'),\n commit_docs: config.commit_docs,\n next_num: nextNum,\n slug,\n description: description ?? null,\n date: todayISO(),\n timestamp: now.toISOString(),\n quick_dir: '.planning/quick',\n task_dir: slug ? `.planning/quick/${nextNum}-${slug}` : null,\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitResume(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n let interruptedAgentId: string | null = null;\n try { interruptedAgentId = fs.readFileSync(planningPath(cwd, 'current-agent-id.txt'), 'utf-8').trim(); } catch (e) { debugLog(e); }\n const result: ResumeContext = {\n state_exists: await pathExistsInternal(planningPath(cwd, 'STATE.md')),\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n project_exists: await pathExistsInternal(planningPath(cwd, 'PROJECT.md')),\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n project_path: '.planning/PROJECT.md',\n has_interrupted_agent: !!interruptedAgentId,\n interrupted_agent_id: interruptedAgentId,\n commit_docs: config.commit_docs,\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitVerifyWork(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init verify-work');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase!);\n const result: VerifyWorkContext = {\n planner_model: await resolveModelInternal(cwd, 'planner'),\n checker_model: await resolveModelInternal(cwd, 'planner'),\n commit_docs: config.commit_docs,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n has_verification: phaseInfo?.has_verification ?? false,\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitPhaseOp(cwd: string, phase: string | undefined): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n let phaseInfo = await findPhaseInternal(cwd, phase ?? '');\n if (!phaseInfo) {\n const roadmapPhase = await getRoadmapPhaseInternal(cwd, phase ?? '');\n if (roadmapPhase?.found) {\n const phaseName = roadmapPhase.phase_name;\n phaseInfo = { found: true, directory: '', phase_number: roadmapPhase.phase_number, phase_name: phaseName, phase_slug: phaseName ? phaseName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') : null, plans: [], summaries: [], incomplete_plans: [], has_research: false, has_context: false, has_verification: false };\n }\n }\n const result: PhaseOpContext = {\n commit_docs: config.commit_docs,\n brave_search: config.brave_search,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory || null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n phase_slug: phaseInfo?.phase_slug ?? null,\n padded_phase: phaseInfo?.phase_number?.padStart(2, '0') ?? null,\n has_research: phaseInfo?.has_research ?? false,\n has_context: phaseInfo?.has_context ?? false,\n has_plans: (phaseInfo?.plans?.length ?? 0) > 0,\n has_verification: phaseInfo?.has_verification ?? false,\n plan_count: phaseInfo?.plans?.length ?? 0,\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n };\n if (await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'))) {\n result.conventions_path = '.planning/CONVENTIONS.md';\n }\n return cmdOk(result);\n}\n\nexport async function cmdInitMilestoneOp(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const milestone = await getMilestoneInfo(cwd);\n let phaseCount = 0;\n let completedPhases = 0;\n\n // Try GitHub first for phase completion data\n let ghSourced = false;\n try {\n const { getAllPhasesProgress } = await import('../github/sync.js');\n const ghResult = await getAllPhasesProgress();\n if (ghResult.ok && ghResult.data.length > 0) {\n phaseCount = ghResult.data.length;\n completedPhases = ghResult.data.filter(p => p.progress.completed === p.progress.total && p.progress.total > 0).length;\n ghSourced = true;\n }\n } catch { /* GitHub not available */ }\n\n // GitHub is the single source of truth for phase progress.\n // If GitHub data is unavailable, counts remain 0.\n const archiveDir = planningPath(cwd, 'archive');\n let archivedMilestones: string[] = [];\n try { archivedMilestones = await listSubDirs(archiveDir); } catch (e) { debugLog(e); }\n const result: MilestoneOpContext = {\n commit_docs: config.commit_docs,\n milestone_version: milestone.version,\n milestone_name: milestone.name,\n milestone_slug: generateSlugInternal(milestone.name),\n phase_count: phaseCount,\n completed_phases: completedPhases,\n all_phases_complete: phaseCount > 0 && phaseCount === completedPhases,\n archived_milestones: archivedMilestones,\n archive_count: archivedMilestones.length,\n project_exists: await pathExistsInternal(planningPath(cwd, 'PROJECT.md')),\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n state_exists: await pathExistsInternal(planningPath(cwd, 'STATE.md')),\n archive_exists: await pathExistsInternal(planningPath(cwd, 'archive')),\n phases_dir_exists: await pathExistsInternal(planningPath(cwd, 'phases')),\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitMapCodebase(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const codebaseDir = planningPath(cwd, 'codebase');\n let existingMaps: string[] = [];\n try { existingMaps = fs.readdirSync(codebaseDir).filter(f => f.endsWith('.md')); } catch (e) { debugLog(e); }\n const result: MapCodebaseContext = {\n mapper_model: await resolveModelInternal(cwd, 'researcher'),\n commit_docs: config.commit_docs,\n search_gitignored: config.search_gitignored,\n parallelization: config.parallelization,\n codebase_dir: '.planning/codebase',\n existing_maps: existingMaps,\n has_maps: existingMaps.length > 0,\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n codebase_dir_exists: await pathExistsInternal(planningPath(cwd, 'codebase')),\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitExisting(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const homedir = os.homedir();\n const braveKeyFile = path.join(homedir, '.maxsim', 'brave_api_key');\n const hasBraveSearch = !!(process.env.BRAVE_API_KEY || fs.existsSync(braveKeyFile));\n const hasCode = findCodeFiles(cwd).length > 0;\n const hasPackageFile = await pathExistsInternal(path.join(cwd, 'package.json')) || await pathExistsInternal(path.join(cwd, 'requirements.txt')) || await pathExistsInternal(path.join(cwd, 'Cargo.toml')) || await pathExistsInternal(path.join(cwd, 'go.mod')) || await pathExistsInternal(path.join(cwd, 'Package.swift'));\n let planningFiles: string[] = [];\n try { const planDir = planningPath(cwd); if (fs.existsSync(planDir)) planningFiles = fs.readdirSync(planDir, { recursive: true }).map((f) => String(f)).filter((f) => !f.startsWith('.')); } catch (e) { debugLog(e); }\n const ghCtx = getGitHubContext(cwd);\n let hasGitHubRemote = false;\n try {\n const { spawnSync } = await import('node:child_process');\n const remoteResult = spawnSync('git', ['remote', 'get-url', 'origin'], { cwd, encoding: 'utf-8' });\n hasGitHubRemote = remoteResult.status === 0 && !!remoteResult.stdout.trim();\n } catch { /* no git remote */ }\n let ghAuthenticated = false;\n try {\n const { spawnSync } = await import('node:child_process');\n const authResult = spawnSync('gh', ['auth', 'status'], { cwd, encoding: 'utf-8' });\n ghAuthenticated = authResult.status === 0;\n } catch { /* gh not installed or not authenticated */ }\n const result: InitExistingContext = {\n researcher_model: await resolveModelInternal(cwd, 'researcher'),\n synthesizer_model: await resolveModelInternal(cwd, 'researcher'),\n roadmapper_model: await resolveModelInternal(cwd, 'planner'),\n mapper_model: await resolveModelInternal(cwd, 'researcher'),\n commit_docs: config.commit_docs,\n project_exists: await pathExistsInternal(planningPath(cwd, 'PROJECT.md')),\n planning_exists: await pathExistsInternal(planningPath(cwd)),\n planning_files: planningFiles,\n has_codebase_map: await pathExistsInternal(planningPath(cwd, 'codebase')),\n has_existing_code: hasCode,\n has_package_file: hasPackageFile,\n has_git: await pathExistsInternal(path.join(cwd, '.git')),\n has_readme: await pathExistsInternal(path.join(cwd, 'README.md')),\n conflict_detected: planningFiles.length > 0,\n existing_file_count: planningFiles.length,\n brave_search_available: hasBraveSearch,\n parallelization: config.parallelization,\n project_path: '.planning/PROJECT.md',\n codebase_dir: '.planning/codebase',\n github_ready: ghCtx.github_ready,\n has_github_remote: hasGitHubRemote,\n gh_authenticated: ghAuthenticated,\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitProgress(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const milestone = await getMilestoneInfo(cwd);\n const ghCtx = getGitHubContext(cwd);\n const phases: ProgressPhaseInfo[] = [];\n let currentPhase: ProgressPhaseInfo | null = null;\n let nextPhase: ProgressPhaseInfo | null = null;\n\n // Try GitHub first for phase progress data\n let ghSourced = false;\n try {\n const { getAllPhasesProgress } = await import('../github/sync.js');\n const ghResult = await getAllPhasesProgress();\n if (ghResult.ok && ghResult.data.length > 0) {\n for (const entry of ghResult.data) {\n const { total, completed, tasks } = entry.progress;\n const hasResearch = false; // GitHub progress doesn't track research separately\n const status = completed === total && total > 0 ? 'complete' : completed > 0 ? 'in_progress' : 'pending';\n const titleMatch = entry.title.match(/\\[Phase\\s+\\S+\\]\\s*(.*)/);\n const phaseName = titleMatch ? titleMatch[1].trim() : null;\n const phaseInfoItem: ProgressPhaseInfo = { number: entry.phaseNumber, name: phaseName, directory: `.planning/phases/${entry.phaseNumber}-${phaseName ? phaseName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') : 'unknown'}`, status, plan_count: total, summary_count: completed, has_research: hasResearch };\n phases.push(phaseInfoItem);\n if (!currentPhase && (status === 'in_progress')) currentPhase = phaseInfoItem;\n if (!nextPhase && status === 'pending') nextPhase = phaseInfoItem;\n }\n ghSourced = true;\n }\n } catch { /* GitHub not available */ }\n\n // GitHub is the single source of truth for phase progress.\n // If GitHub data is unavailable, phases array remains empty.\n let pausedAt: string | null = null;\n try { const state = fs.readFileSync(planningPath(cwd, 'STATE.md'), 'utf-8'); const pauseMatch = state.match(/\\*\\*Paused At:\\*\\*\\s*(.+)/); if (pauseMatch) pausedAt = pauseMatch[1].trim(); } catch (e) { debugLog(e); }\n const result: ProgressContext = {\n executor_model: await resolveModelInternal(cwd, 'executor'),\n planner_model: await resolveModelInternal(cwd, 'planner'),\n commit_docs: config.commit_docs,\n milestone_version: milestone.version,\n milestone_name: milestone.name,\n phases,\n phase_count: phases.length,\n completed_count: phases.filter(p => p.status === 'complete').length,\n in_progress_count: phases.filter(p => p.status === 'in_progress').length,\n current_phase: currentPhase,\n next_phase: nextPhase,\n paused_at: pausedAt,\n has_work_in_progress: !!currentPhase,\n project_exists: await pathExistsInternal(planningPath(cwd, 'PROJECT.md')),\n roadmap_exists: await pathExistsInternal(planningPath(cwd, 'ROADMAP.md')),\n state_exists: await pathExistsInternal(planningPath(cwd, 'STATE.md')),\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n project_path: '.planning/PROJECT.md',\n config_path: '.planning/config.json',\n github_ready: ghCtx.github_ready,\n project_number: ghCtx.project_number,\n phase_mappings: ghCtx.mapping\n ? Object.fromEntries(\n Object.entries(ghCtx.mapping.phases).map(([phaseNum, phaseMap]) => [\n phaseNum,\n { issue_number: phaseMap.tracking_issue.number, item_id: phaseMap.tracking_issue.item_id },\n ]),\n )\n : null,\n };\n return cmdOk(result);\n}\n\n// ─── Helper: list codebase docs ──────────────────────────────────────────────\n\n/**\n * Scan .planning/codebase/ for .md files and return relative paths.\n * Returns empty array if the directory does not exist.\n */\nexport function listCodebaseDocs(cwd: string): string[] {\n const codebaseDir = planningPath(cwd, 'codebase');\n try {\n const files = fs.readdirSync(codebaseDir).filter(f => f.endsWith('.md'));\n return files.map(f => path.join('.planning', 'codebase', f));\n } catch {\n return [];\n }\n}\n\n// ─── Agent-level init commands ───────────────────────────────────────────────\n\nexport async function cmdInitExecutor(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init executor');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase);\n const codebaseDocs = listCodebaseDocs(cwd);\n const result: ExecutorAgentContext = {\n executor_model: await resolveModelInternal(cwd, 'executor'),\n verifier_model: await resolveModelInternal(cwd, 'verifier'),\n commit_docs: config.commit_docs,\n parallelization: config.parallelization,\n branching_strategy: config.branching_strategy,\n phase_branch_template: config.phase_branch_template,\n milestone_branch_template: config.milestone_branch_template,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n state_path: '.planning/STATE.md',\n codebase_docs: codebaseDocs,\n };\n if (await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'))) {\n result.conventions_path = '.planning/CONVENTIONS.md';\n }\n return cmdOk(result);\n}\n\nexport async function cmdInitPlanner(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init planner');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase);\n const phase_req_ids = await extractReqIds(cwd, phase);\n const codebaseDocs = listCodebaseDocs(cwd);\n const result: PlannerAgentContext = {\n planner_model: await resolveModelInternal(cwd, 'planner'),\n checker_model: await resolveModelInternal(cwd, 'planner'),\n commit_docs: config.commit_docs,\n research_enabled: config.research,\n plan_checker_enabled: config.plan_checker,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n phase_req_ids,\n has_research: phaseInfo?.has_research ?? false,\n has_context: phaseInfo?.has_context ?? false,\n has_plans: (phaseInfo?.plans?.length ?? 0) > 0,\n plan_count: phaseInfo?.plans?.length ?? 0,\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n codebase_docs: codebaseDocs,\n };\n if (await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'))) {\n result.conventions_path = '.planning/CONVENTIONS.md';\n }\n return cmdOk(result);\n}\n\nexport async function cmdInitResearcher(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init researcher');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase);\n const phase_req_ids = await extractReqIds(cwd, phase);\n const codebaseDocs = listCodebaseDocs(cwd);\n const result: ResearcherAgentContext = {\n researcher_model: await resolveModelInternal(cwd, 'researcher'),\n commit_docs: config.commit_docs,\n brave_search: config.brave_search,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n padded_phase: phaseInfo?.phase_number?.padStart(2, '0') ?? null,\n phase_req_ids,\n has_research: phaseInfo?.has_research ?? false,\n has_context: phaseInfo?.has_context ?? false,\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n codebase_docs: codebaseDocs,\n };\n if (await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'))) {\n result.conventions_path = '.planning/CONVENTIONS.md';\n }\n return cmdOk(result);\n}\n\nexport async function cmdInitVerifier(cwd: string, phase: string | undefined): Promise<CmdResult> {\n if (!phase) return cmdErr('phase required for init verifier');\n const config = await loadConfig(cwd);\n const phaseInfo = await findPhaseInternal(cwd, phase);\n const phase_req_ids = await extractReqIds(cwd, phase);\n const codebaseDocs = listCodebaseDocs(cwd);\n const result: VerifierAgentContext = {\n verifier_model: await resolveModelInternal(cwd, 'verifier'),\n commit_docs: config.commit_docs,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n phase_req_ids,\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n codebase_docs: codebaseDocs,\n };\n return cmdOk(result);\n}\n\nexport async function cmdInitDebugger(cwd: string, phase: string | undefined): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const phaseInfo = phase ? await findPhaseInternal(cwd, phase) : null;\n const codebaseDocs = listCodebaseDocs(cwd);\n const result: DebuggerAgentContext = {\n debugger_model: await resolveModelInternal(cwd, 'debugger'),\n commit_docs: config.commit_docs,\n phase_found: !!phaseInfo,\n phase_dir: phaseInfo?.directory ?? null,\n phase_number: phaseInfo?.phase_number ?? null,\n phase_name: phaseInfo?.phase_name ?? null,\n state_path: '.planning/STATE.md',\n codebase_docs: codebaseDocs,\n };\n if (await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'))) {\n result.conventions_path = '.planning/CONVENTIONS.md';\n }\n return cmdOk(result);\n}\n\n// ─── Drift-related init commands ─────────────────────────────────────────────\n\nexport async function cmdInitCheckDrift(cwd: string): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const driftModel = await resolveModelInternal(cwd, 'verifier');\n\n const hasPlanning = await pathExistsInternal(planningPath(cwd));\n const hasRequirements = await pathExistsInternal(planningPath(cwd, 'REQUIREMENTS.md'));\n const hasRoadmap = await pathExistsInternal(planningPath(cwd, 'ROADMAP.md'));\n const hasNogos = await pathExistsInternal(planningPath(cwd, 'NO-GOS.md'));\n const hasConventions = await pathExistsInternal(planningPath(cwd, 'CONVENTIONS.md'));\n const hasPreviousReport = await pathExistsInternal(planningPath(cwd, 'DRIFT-REPORT.md'));\n\n // Collect spec files that exist\n const specFiles: string[] = [];\n if (hasRequirements) specFiles.push('.planning/REQUIREMENTS.md');\n if (hasRoadmap) specFiles.push('.planning/ROADMAP.md');\n if (await pathExistsInternal(planningPath(cwd, 'STATE.md'))) specFiles.push('.planning/STATE.md');\n if (hasNogos) specFiles.push('.planning/NO-GOS.md');\n if (hasConventions) specFiles.push('.planning/CONVENTIONS.md');\n\n // Collect active phase directories\n let phaseDirs: string[] = [];\n try {\n const dirs = await listSubDirs(phasesPath(cwd), true);\n phaseDirs = dirs.map(d => `.planning/phases/${d}`);\n } catch { /* no phases dir */ }\n\n // Collect archived milestone directories\n let archivedMilestoneDirs: string[] = [];\n try {\n const archived = await getArchivedPhaseDirs(cwd);\n archivedMilestoneDirs = archived.map(a => a.basePath);\n // De-duplicate\n archivedMilestoneDirs = [...new Set(archivedMilestoneDirs)];\n } catch { /* no archived dirs */ }\n\n const codebaseDocs = listCodebaseDocs(cwd);\n\n const result: CheckDriftContext = {\n drift_model: driftModel,\n commit_docs: config.commit_docs,\n has_planning: hasPlanning,\n has_requirements: hasRequirements,\n has_roadmap: hasRoadmap,\n has_nogos: hasNogos,\n has_conventions: hasConventions,\n has_previous_report: hasPreviousReport,\n previous_report_path: hasPreviousReport ? '.planning/DRIFT-REPORT.md' : null,\n spec_files: specFiles,\n phase_dirs: phaseDirs,\n archived_milestone_dirs: archivedMilestoneDirs,\n state_path: '.planning/STATE.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n roadmap_path: '.planning/ROADMAP.md',\n nogos_path: hasNogos ? '.planning/NO-GOS.md' : null,\n conventions_path: hasConventions ? '.planning/CONVENTIONS.md' : null,\n codebase_docs: codebaseDocs,\n };\n\n return cmdOk(result);\n}\n\nexport async function cmdInitRealign(cwd: string, direction: string | undefined): Promise<CmdResult> {\n const config = await loadConfig(cwd);\n const hasReport = await pathExistsInternal(planningPath(cwd, 'DRIFT-REPORT.md'));\n const hasPlanning = await pathExistsInternal(planningPath(cwd));\n\n // Collect active phase directories\n let phaseDirs: string[] = [];\n try {\n const dirs = await listSubDirs(phasesPath(cwd), true);\n phaseDirs = dirs.map(d => `.planning/phases/${d}`);\n } catch { /* no phases dir */ }\n\n const codebaseDocs = listCodebaseDocs(cwd);\n\n const result: RealignContext = {\n commit_docs: config.commit_docs,\n direction: direction ?? null,\n has_report: hasReport,\n report_path: '.planning/DRIFT-REPORT.md',\n has_planning: hasPlanning,\n state_path: '.planning/STATE.md',\n roadmap_path: '.planning/ROADMAP.md',\n requirements_path: '.planning/REQUIREMENTS.md',\n phase_dirs: phaseDirs,\n codebase_docs: codebaseDocs,\n };\n\n return cmdOk(result);\n}\n","/**\n * Worktree — Git worktree lifecycle management for parallel execution\n *\n * Provides functions to create, list, cleanup worktrees and to assign\n * plans to worktree slots for batch execution.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { simpleGit } from 'simple-git';\n\nimport type {\n WorktreeInfo,\n WorktreeAssignment,\n WorktreeMode,\n ExecutionMode,\n CmdResult,\n} from './types.js';\nimport { cmdOk, cmdErr } from './types.js';\nimport { debugLog, errorMsg } from './core.js';\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst WORKTREE_DIR = '.maxsim-worktrees';\nconst WORKTREE_BRANCH_PREFIX = 'maxsim/worktree';\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Ensure .maxsim-worktrees/ directory exists */\nfunction ensureWorktreeDir(cwd: string): string {\n const dir = path.join(cwd, WORKTREE_DIR);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n return dir;\n}\n\n/** Add .maxsim-worktrees/ to .gitignore if not already present */\nfunction ensureGitignoreEntry(cwd: string): void {\n const gitignorePath = path.join(cwd, '.gitignore');\n const entry = WORKTREE_DIR + '/';\n\n try {\n if (fs.existsSync(gitignorePath)) {\n const content = fs.readFileSync(gitignorePath, 'utf-8');\n if (content.includes(WORKTREE_DIR)) return;\n fs.appendFileSync(gitignorePath, '\\n' + entry + '\\n', 'utf-8');\n } else {\n fs.writeFileSync(gitignorePath, entry + '\\n', 'utf-8');\n }\n } catch (e) {\n debugLog('worktree-gitignore-failed', errorMsg(e));\n }\n}\n\n// ─── Core functions ──────────────────────────────────────────────────────────\n\n/**\n * Create a new git worktree for a plan.\n * Branch: maxsim/worktree-{phaseNum}-{planId}\n * Path: {cwd}/.maxsim-worktrees/{planId}\n */\nexport async function createWorktree(\n cwd: string,\n phaseNum: string,\n planId: string,\n wave: number,\n): Promise<WorktreeInfo> {\n ensureWorktreeDir(cwd);\n ensureGitignoreEntry(cwd);\n\n const branch = `${WORKTREE_BRANCH_PREFIX}-${phaseNum}-${planId}`;\n const worktreePath = path.join(cwd, WORKTREE_DIR, planId);\n\n const git = simpleGit(cwd);\n\n try {\n // Create worktree with a new branch from HEAD\n await git.raw(['worktree', 'add', '-b', branch, worktreePath]);\n } catch (e) {\n const msg = errorMsg(e);\n // If branch already exists, try without -b\n if (msg.includes('already exists')) {\n try {\n await git.raw(['worktree', 'add', worktreePath, branch]);\n } catch (e2) {\n throw new Error(`Failed to create worktree: ${errorMsg(e2)}`);\n }\n } else {\n throw new Error(`Failed to create worktree: ${msg}`);\n }\n }\n\n const info: WorktreeInfo = {\n id: planId,\n path: worktreePath,\n branch,\n wave,\n plan_id: planId,\n status: 'active',\n created_at: new Date().toISOString(),\n };\n\n return info;\n}\n\n/**\n * List all MAXSIM-managed worktrees.\n * Parses `git worktree list --porcelain` and filters to .maxsim-worktrees/.\n */\nexport async function listWorktrees(cwd: string): Promise<WorktreeInfo[]> {\n const git = simpleGit(cwd);\n const worktrees: WorktreeInfo[] = [];\n\n try {\n const raw = await git.raw(['worktree', 'list', '--porcelain']);\n const blocks = raw.split('\\n\\n').filter(b => b.trim());\n\n for (const block of blocks) {\n const lines = block.split('\\n');\n let wtPath = '';\n let branch = '';\n\n for (const line of lines) {\n if (line.startsWith('worktree ')) {\n wtPath = line.slice('worktree '.length).trim();\n } else if (line.startsWith('branch ')) {\n branch = line.slice('branch '.length).trim().replace('refs/heads/', '');\n }\n }\n\n // Only include worktrees under .maxsim-worktrees/\n if (!wtPath || !wtPath.includes(WORKTREE_DIR)) continue;\n\n const planId = path.basename(wtPath);\n worktrees.push({\n id: planId,\n path: wtPath,\n branch,\n wave: 0, // Wave info not stored in git metadata; caller provides\n plan_id: planId,\n status: 'active',\n created_at: '', // Not available from git porcelain output\n });\n }\n } catch (e) {\n debugLog('worktree-list-failed', errorMsg(e));\n }\n\n return worktrees;\n}\n\n/**\n * Remove a single worktree by its ID (directory name under .maxsim-worktrees/).\n * Removes the worktree and deletes the branch.\n */\nexport async function cleanupWorktree(cwd: string, worktreeId: string): Promise<void> {\n const git = simpleGit(cwd);\n const worktreePath = path.join(cwd, WORKTREE_DIR, worktreeId);\n\n try {\n await git.raw(['worktree', 'remove', worktreePath]);\n } catch (e) {\n const msg = errorMsg(e);\n debugLog('worktree-remove-failed', msg);\n // Force remove if locked\n try {\n await git.raw(['worktree', 'remove', '--force', worktreePath]);\n } catch (e2) {\n debugLog('worktree-force-remove-failed', errorMsg(e2));\n // Last resort: manual cleanup\n try {\n if (fs.existsSync(worktreePath)) {\n fs.rmSync(worktreePath, { recursive: true, force: true });\n }\n await git.raw(['worktree', 'prune']);\n } catch (e3) {\n throw new Error(`Failed to cleanup worktree ${worktreeId}: ${errorMsg(e3)}`);\n }\n }\n }\n\n // Delete the associated branch\n try {\n // Find branch name matching this worktree ID\n const branches = await git.raw(['branch', '--list', `${WORKTREE_BRANCH_PREFIX}-*${worktreeId}*`]);\n const branchName = branches.trim().replace(/^\\*?\\s*/, '').split('\\n')[0]?.trim();\n if (branchName) {\n await git.raw(['branch', '-D', branchName]);\n }\n } catch (e) {\n debugLog('worktree-branch-delete-failed', errorMsg(e));\n // Branch cleanup is best-effort\n }\n}\n\n/**\n * Remove all MAXSIM-managed worktrees.\n * Returns the count of worktrees removed.\n */\nexport async function cleanupAllWorktrees(cwd: string): Promise<number> {\n const worktrees = await listWorktrees(cwd);\n let removed = 0;\n\n for (const wt of worktrees) {\n try {\n await cleanupWorktree(cwd, wt.id);\n removed++;\n } catch (e) {\n debugLog('worktree-cleanup-failed', { id: wt.id, error: errorMsg(e) });\n }\n }\n\n // Clean up the directory if empty\n const worktreeDir = path.join(cwd, WORKTREE_DIR);\n try {\n if (fs.existsSync(worktreeDir)) {\n const remaining = fs.readdirSync(worktreeDir);\n if (remaining.length === 0) {\n fs.rmSync(worktreeDir, { recursive: true, force: true });\n }\n }\n } catch (e) {\n debugLog('worktree-dir-cleanup-failed', errorMsg(e));\n }\n\n return removed;\n}\n\n/**\n * Pure function: assign plans to worktree slots.\n * Given plans and max parallel count, assigns plans to worktree slots.\n * If plans.length > maxParallel, batches them.\n * Returns assignment array without creating worktrees.\n */\nexport function assignPlansToWorktrees(\n plans: Array<{ id: string; wave: number }>,\n maxParallel: number,\n): WorktreeAssignment[] {\n const assignments: WorktreeAssignment[] = [];\n\n for (const plan of plans) {\n // Create a placeholder WorktreeInfo (actual worktree created later)\n const worktree: WorktreeInfo = {\n id: plan.id,\n path: '', // Resolved at creation time\n branch: '', // Resolved at creation time\n wave: plan.wave,\n plan_id: plan.id,\n status: 'active',\n created_at: '',\n };\n\n assignments.push({\n plan_id: plan.id,\n worktree,\n wave: plan.wave,\n });\n }\n\n // If more plans than max parallel, mark overflow for sequential batching\n // The caller handles actual batching; we just provide the assignments\n if (assignments.length > maxParallel) {\n debugLog('worktree-overflow', `${assignments.length} plans exceed max_parallel=${maxParallel}, caller should batch`);\n }\n\n return assignments;\n}\n\n/**\n * Pure function: decide whether to use batch (worktree) or standard execution mode.\n *\n * Returns 'batch' if:\n * - flagOverride is 'worktrees', OR\n * - worktree_mode is 'always', OR\n * - worktree_mode is 'auto' AND waveCount === 1 AND planCount > 2\n *\n * Returns 'standard' if:\n * - flagOverride is 'no-worktrees', OR\n * - worktree_mode is 'never', OR\n * - auto-detect doesn't trigger\n */\nexport function decideExecutionMode(\n planCount: number,\n waveCount: number,\n config: { worktree_mode: WorktreeMode; flagOverride?: 'worktrees' | 'no-worktrees' },\n): ExecutionMode {\n // Explicit flag overrides everything\n if (config.flagOverride === 'worktrees') return 'batch';\n if (config.flagOverride === 'no-worktrees') return 'standard';\n\n // Config-based decision\n if (config.worktree_mode === 'always') return 'batch';\n if (config.worktree_mode === 'never') return 'standard';\n\n // Auto-detect: single wave with 3+ plans\n if (config.worktree_mode === 'auto' && waveCount === 1 && planCount > 2) {\n return 'batch';\n }\n\n return 'standard';\n}\n\n/**\n * Pure function: validate that plans are independent (no file overlaps).\n * Returns conflicts if any file appears in multiple plans.\n */\nexport function validatePlanIndependence(\n plans: Array<{ id: string; files_modified: string[] }>,\n): { valid: boolean; conflicts: Array<{ file: string; plans: string[] }> } {\n const fileMap = new Map<string, string[]>();\n\n for (const plan of plans) {\n for (const file of plan.files_modified) {\n const normalized = file.replace(/\\\\/g, '/');\n const existing = fileMap.get(normalized) || [];\n existing.push(plan.id);\n fileMap.set(normalized, existing);\n }\n }\n\n const conflicts: Array<{ file: string; plans: string[] }> = [];\n for (const [file, planIds] of fileMap) {\n if (planIds.length > 1) {\n conflicts.push({ file, plans: planIds });\n }\n }\n\n return {\n valid: conflicts.length === 0,\n conflicts,\n };\n}\n\n// ─── CLI command wrappers ────────────────────────────────────────────────────\n\nexport async function cmdWorktreeCreate(\n cwd: string,\n phaseNum: string | undefined,\n planId: string | undefined,\n wave: string | undefined,\n): Promise<CmdResult> {\n if (!phaseNum) return cmdErr('phaseNum required for worktree-create');\n if (!planId) return cmdErr('planId required for worktree-create');\n const waveNum = wave ? parseInt(wave, 10) : 1;\n\n try {\n const info = await createWorktree(cwd, phaseNum, planId, waveNum);\n return cmdOk(info);\n } catch (e) {\n return cmdErr(`worktree-create failed: ${errorMsg(e)}`);\n }\n}\n\nexport async function cmdWorktreeList(cwd: string): Promise<CmdResult> {\n try {\n const worktrees = await listWorktrees(cwd);\n return cmdOk(worktrees);\n } catch (e) {\n return cmdErr(`worktree-list failed: ${errorMsg(e)}`);\n }\n}\n\nexport async function cmdWorktreeCleanup(\n cwd: string,\n worktreeId: string | undefined,\n all: boolean,\n): Promise<CmdResult> {\n try {\n if (all) {\n const count = await cleanupAllWorktrees(cwd);\n return cmdOk({ removed: count, all: true });\n }\n if (!worktreeId) return cmdErr('worktreeId required for worktree-cleanup (or use --all)');\n await cleanupWorktree(cwd, worktreeId);\n return cmdOk({ removed: 1, worktree_id: worktreeId });\n } catch (e) {\n return cmdErr(`worktree-cleanup failed: ${errorMsg(e)}`);\n }\n}\n\nexport function cmdDecideExecutionMode(\n planCount: string | undefined,\n waveCount: string | undefined,\n worktreeMode: string | undefined,\n flagOverride: string | undefined,\n): CmdResult {\n if (!planCount || !waveCount) return cmdErr('planCount and waveCount required');\n\n const mode = decideExecutionMode(\n parseInt(planCount, 10),\n parseInt(waveCount, 10),\n {\n worktree_mode: (worktreeMode as WorktreeMode) || 'auto',\n flagOverride: flagOverride as 'worktrees' | 'no-worktrees' | undefined,\n },\n );\n return cmdOk({ mode });\n}\n\nexport function cmdValidatePlanIndependence(plansJson: string | undefined): CmdResult {\n if (!plansJson) return cmdErr('plans JSON required');\n\n try {\n const plans = JSON.parse(plansJson) as Array<{ id: string; files_modified: string[] }>;\n const result = validatePlanIndependence(plans);\n return cmdOk(result);\n } catch (e) {\n return cmdErr(`validate-plan-independence failed: ${errorMsg(e)}`);\n }\n}\n","/**\n * MAXSIM Tools — CLI utility for MAXSIM workflow operations\n *\n * Usage: node maxsim-tools.cjs <command> [args] [--raw]\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport type { TimestampFormat, CmdResult } from './core/index.js';\n\nimport {\n cmdGitHubSetup,\n cmdGitHubCreatePhase,\n cmdGitHubCreateTask,\n cmdGitHubBatchCreateTasks,\n cmdGitHubPostPlanComment,\n cmdGitHubPostComment,\n cmdGitHubPostCompletion,\n cmdGitHubGetIssue,\n cmdGitHubListSubIssues,\n cmdGitHubCloseIssue,\n cmdGitHubReopenIssue,\n cmdGitHubBounceIssue,\n cmdGitHubMoveIssue,\n cmdGitHubDetectExternalEdits,\n cmdGitHubQueryBoard,\n cmdGitHubAddToBoard,\n cmdGitHubSearchIssues,\n cmdGitHubSyncCheck,\n cmdGitHubPhaseProgress,\n cmdGitHubAllProgress,\n cmdGitHubDetectInterrupted,\n cmdGitHubStatus,\n cmdGitHubSync,\n cmdGitHubOverview,\n} from './github/commands.js';\n\nimport {\n output,\n error,\n CliOutput,\n CliError,\n writeOutput,\n cmdFrontmatterGet,\n cmdFrontmatterSet,\n cmdFrontmatterMerge,\n cmdFrontmatterValidate,\n cmdConfigEnsureSection,\n cmdConfigSet,\n cmdConfigGet,\n cmdGenerateSlug,\n cmdCurrentTimestamp,\n cmdVerifyPathExists,\n cmdHistoryDigest,\n cmdResolveModel,\n cmdCommit,\n cmdSummaryExtract,\n cmdWebsearch,\n cmdProgressRender,\n cmdScaffold,\n cmdStateLoad,\n cmdStateGet,\n cmdStatePatch,\n cmdStateUpdate,\n cmdStateAdvancePlan,\n cmdStateRecordMetric,\n cmdStateUpdateProgress,\n cmdStateAddDecision,\n cmdStateAddBlocker,\n cmdStateResolveBlocker,\n cmdStateRecordSession,\n cmdStateSnapshot,\n cmdRoadmapGetPhase,\n cmdRoadmapAnalyze,\n cmdRoadmapUpdatePlanProgress,\n cmdRequirementsMarkComplete,\n cmdMilestoneComplete,\n cmdVerifySummary,\n cmdVerifyPlanStructure,\n cmdVerifyPhaseCompleteness,\n cmdVerifyReferences,\n cmdVerifyCommits,\n cmdVerifyArtifacts,\n cmdVerifyKeyLinks,\n cmdValidateRequirementExistence,\n cmdValidateRequirementStatus,\n cmdValidateEvidenceCompleteness,\n cmdValidateConsistency,\n cmdValidateHealth,\n cmdPhasesList,\n cmdPhaseNextDecimal,\n cmdFindPhase,\n cmdPhasePlanIndex,\n cmdPhaseAdd,\n cmdPhaseInsert,\n cmdPhaseRemove,\n cmdPhaseComplete,\n cmdTemplateSelect,\n cmdTemplateFill,\n cmdInitExecutePhase,\n cmdInitPlanPhase,\n cmdInitNewProject,\n cmdInitNewMilestone,\n cmdInitQuick,\n cmdInitResume,\n cmdInitVerifyWork,\n cmdInitPhaseOp,\n cmdInitMilestoneOp,\n cmdInitMapCodebase,\n cmdInitExisting,\n cmdInitProgress,\n cmdInitExecutor,\n cmdInitPlanner,\n cmdInitResearcher,\n cmdInitVerifier,\n cmdInitDebugger,\n cmdArtefakteRead,\n cmdArtefakteWrite,\n cmdArtefakteAppend,\n cmdArtefakteList,\n cmdContextLoad,\n cmdSkillList,\n cmdSkillInstall,\n cmdSkillUpdate,\n archivePhasePreview,\n archivePhaseExecute,\n cmdGetArchivedPhase,\n cmdDetectStaleContext,\n cmdDriftReadReport,\n cmdDriftWriteReport,\n cmdDriftExtractRequirements,\n cmdDriftExtractNoGos,\n cmdDriftExtractConventions,\n cmdDriftPreviousHash,\n cmdInitCheckDrift,\n cmdInitRealign,\n cmdWorktreeCreate,\n cmdWorktreeList,\n cmdWorktreeCleanup,\n cmdDecideExecutionMode,\n cmdValidatePlanIndependence,\n} from './core/index.js';\n\n// ─── Arg parsing utilities ───────────────────────────────────────────────────\n\n/** Extract a single named flag's value from args */\nfunction getFlag(args: string[], flag: string): string | null {\n const idx = args.indexOf(flag);\n return idx !== -1 ? args[idx + 1] ?? null : null;\n}\n\n/** Extract multiple named flags at once. Keys are flag names without -- prefix. */\nfunction getFlags(args: string[], ...flags: string[]): Record<string, string | null> {\n const result: Record<string, string | null> = {};\n for (const flag of flags) {\n const idx = args.indexOf(`--${flag}`);\n result[flag] = idx !== -1 ? args[idx + 1] ?? null : null;\n }\n return result;\n}\n\n/** Check if a boolean flag is present */\nfunction hasFlag(args: string[], flag: string): boolean {\n return args.includes(`--${flag}`);\n}\n\n// ─── Result dispatcher ───────────────────────────────────────────────────────\n\n/** Convert a CmdResult into the appropriate output()/error() call. */\nfunction handleResult(r: CmdResult, raw: boolean): never {\n if (r.ok) output(r.result, raw, r.rawValue);\n else error(r.error);\n}\n\n// ─── Command handler type ────────────────────────────────────────────────────\n\ntype Handler = (args: string[], cwd: string, raw: boolean) => void | Promise<void>;\n\n// ─── Subcommand handlers ─────────────────────────────────────────────────────\n\nconst handleState: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => CmdResult | Promise<CmdResult>> = {\n 'update': () => cmdStateUpdate(cwd, args[2], args[3]),\n 'get': () => cmdStateGet(cwd, args[2], raw),\n 'patch': () => {\n const patches: Record<string, string> = {};\n for (let i = 2; i < args.length; i += 2) {\n const key = args[i].replace(/^--/, '');\n const value = args[i + 1];\n if (key && value !== undefined) patches[key] = value;\n }\n return cmdStatePatch(cwd, patches, raw);\n },\n 'advance-plan': () => cmdStateAdvancePlan(cwd, raw),\n 'record-metric': () => {\n const f = getFlags(args, 'phase', 'plan', 'duration', 'tasks', 'files');\n return cmdStateRecordMetric(cwd, {\n phase: f.phase ?? '', plan: f.plan ?? '', duration: f.duration ?? '',\n tasks: f.tasks ?? undefined, files: f.files ?? undefined,\n }, raw);\n },\n 'update-progress': () => cmdStateUpdateProgress(cwd, raw),\n 'add-decision': () => {\n const f = getFlags(args, 'phase', 'summary', 'summary-file', 'rationale', 'rationale-file');\n return cmdStateAddDecision(cwd, {\n phase: f.phase ?? undefined, summary: f.summary ?? undefined,\n summary_file: f['summary-file'] ?? undefined,\n rationale: f.rationale ?? '', rationale_file: f['rationale-file'] ?? undefined,\n }, raw);\n },\n 'add-blocker': () => {\n const f = getFlags(args, 'text', 'text-file');\n return cmdStateAddBlocker(cwd, { text: f.text ?? undefined, text_file: f['text-file'] ?? undefined }, raw);\n },\n 'resolve-blocker': () => cmdStateResolveBlocker(cwd, getFlag(args, '--text'), raw),\n 'record-session': () => {\n const f = getFlags(args, 'stopped-at', 'resume-file');\n return cmdStateRecordSession(cwd, {\n stopped_at: f['stopped-at'] ?? undefined,\n resume_file: f['resume-file'] ?? 'None',\n }, raw);\n },\n };\n\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handleResult(await handler(), raw);\n return handleResult(await cmdStateLoad(cwd, raw), raw);\n};\n\nconst handleTemplate: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n if (sub === 'select') {\n handleResult(cmdTemplateSelect(cwd, args[2]), raw);\n } else if (sub === 'fill') {\n const f = getFlags(args, 'phase', 'plan', 'name', 'type', 'wave', 'fields');\n handleResult(await cmdTemplateFill(cwd, args[2], {\n phase: f.phase ?? '', plan: f.plan ?? undefined, name: f.name ?? undefined,\n type: f.type ?? 'execute', wave: f.wave ?? '1',\n fields: f.fields ? JSON.parse(f.fields) : {},\n }), raw);\n } else {\n error('Unknown template subcommand. Available: select, fill');\n }\n};\n\nconst handleFrontmatter: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const file = args[2];\n const handlers: Record<string, () => void | Promise<void>> = {\n 'get': async () => handleResult(await cmdFrontmatterGet(cwd, file, getFlag(args, '--field')), raw),\n 'set': () => handleResult(cmdFrontmatterSet(cwd, file, getFlag(args, '--field'), getFlag(args, '--value') ?? undefined), raw),\n 'merge': () => handleResult(cmdFrontmatterMerge(cwd, file, getFlag(args, '--data')), raw),\n 'validate': async () => handleResult(await cmdFrontmatterValidate(cwd, file, getFlag(args, '--schema')), raw),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handler();\n error('Unknown frontmatter subcommand. Available: get, set, merge, validate');\n};\n\nconst handleVerify: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => void | Promise<void>> = {\n 'plan-structure': async () => handleResult(await cmdVerifyPlanStructure(cwd, args[2]), raw),\n 'phase-completeness': async () => handleResult(await cmdVerifyPhaseCompleteness(cwd, args[2]), raw),\n 'references': async () => handleResult(await cmdVerifyReferences(cwd, args[2]), raw),\n 'commits': async () => handleResult(await cmdVerifyCommits(cwd, args.slice(2)), raw),\n 'artifacts': async () => handleResult(await cmdVerifyArtifacts(cwd, args[2]), raw),\n 'key-links': async () => handleResult(await cmdVerifyKeyLinks(cwd, args[2]), raw),\n 'requirement-existence': async () => handleResult(await cmdValidateRequirementExistence(cwd, args.slice(2)), raw),\n 'requirement-status': async () => handleResult(await cmdValidateRequirementStatus(cwd, args.slice(2)), raw),\n 'evidence-completeness': async () => handleResult(await cmdValidateEvidenceCompleteness(cwd, args[2], args.slice(3)), raw),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handler();\n error('Unknown verify subcommand. Available: plan-structure, phase-completeness, references, commits, artifacts, key-links, requirement-existence, requirement-status, evidence-completeness');\n};\n\nconst handlePhases: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n if (sub === 'list') {\n const f = getFlags(args, 'type', 'phase', 'offset', 'limit');\n handleResult(await cmdPhasesList(cwd, {\n type: f.type,\n phase: f.phase,\n includeArchived: hasFlag(args, 'include-archived'),\n offset: f.offset !== null ? parseInt(f.offset, 10) : undefined,\n limit: f.limit !== null ? parseInt(f.limit, 10) : undefined,\n }), raw);\n } else {\n error('Unknown phases subcommand. Available: list');\n }\n};\n\nconst handleRoadmap: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => CmdResult | Promise<CmdResult>> = {\n 'get-phase': () => cmdRoadmapGetPhase(cwd, args[2]),\n 'analyze': () => cmdRoadmapAnalyze(cwd),\n 'update-plan-progress': () => cmdRoadmapUpdatePlanProgress(cwd, args[2]),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handleResult(await handler(), raw);\n error('Unknown roadmap subcommand. Available: get-phase, analyze, update-plan-progress');\n};\n\nconst handlePhase: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => Promise<CmdResult>> = {\n 'next-decimal': () => cmdPhaseNextDecimal(cwd, args[2]),\n 'add': () => cmdPhaseAdd(cwd, args.slice(2).join(' ')),\n 'insert': () => cmdPhaseInsert(cwd, args[2], args.slice(3).join(' ')),\n 'remove': () => cmdPhaseRemove(cwd, args[2], { force: hasFlag(args, 'force') }),\n 'complete': () => cmdPhaseComplete(cwd, args[2]),\n 'archive-preview': () => archivePhasePreview(cwd, args[2], args.slice(3).join(' ')),\n 'archive-execute': () => archivePhaseExecute(cwd, args[2], args.slice(3).join(' ')),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handleResult(await handler(), raw);\n error('Unknown phase subcommand. Available: next-decimal, add, insert, remove, complete, archive-preview, archive-execute');\n};\n\nconst handleMilestone: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n if (sub === 'complete') {\n const nameIndex = args.indexOf('--name');\n let milestoneName: string | null = null;\n if (nameIndex !== -1) {\n const nameArgs: string[] = [];\n for (let i = nameIndex + 1; i < args.length; i++) {\n if (args[i].startsWith('--')) break;\n nameArgs.push(args[i]);\n }\n milestoneName = nameArgs.join(' ') || null;\n }\n handleResult(await cmdMilestoneComplete(cwd, args[2], {\n name: milestoneName ?? undefined,\n archivePhases: hasFlag(args, 'archive-phases'),\n }), raw);\n } else {\n error('Unknown milestone subcommand. Available: complete');\n }\n};\n\nconst handleValidate: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => Promise<void>> = {\n 'consistency': async () => handleResult(await cmdValidateConsistency(cwd), raw),\n 'health': async () => handleResult(await cmdValidateHealth(cwd, { repair: hasFlag(args, 'repair') }), raw),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handler();\n error('Unknown validate subcommand. Available: consistency, health');\n};\n\nconst handleDrift: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => Promise<CmdResult>> = {\n 'read-report': () => cmdDriftReadReport(cwd),\n 'extract-requirements': () => cmdDriftExtractRequirements(cwd),\n 'extract-nogos': () => cmdDriftExtractNoGos(cwd),\n 'extract-conventions': () => cmdDriftExtractConventions(cwd),\n 'write-report': () => cmdDriftWriteReport(cwd, getFlag(args, '--content'), getFlag(args, '--content-file')),\n 'previous-hash': () => cmdDriftPreviousHash(cwd),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handleResult(await handler(), raw);\n error('Unknown drift subcommand. Available: read-report, extract-requirements, extract-nogos, extract-conventions, write-report, previous-hash');\n};\n\nconst handleWorktree: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n const handlers: Record<string, () => CmdResult | Promise<CmdResult>> = {\n 'create': () => cmdWorktreeCreate(cwd, args[2], args[3], args[4]),\n 'list': () => cmdWorktreeList(cwd),\n 'cleanup': () => cmdWorktreeCleanup(cwd, args[2], hasFlag(args, 'all')),\n };\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handleResult(await handler(), raw);\n error('Unknown worktree subcommand. Available: create, list, cleanup');\n};\n\nconst handleInit: Handler = async (args, cwd, raw) => {\n const workflow = args[1];\n const handlers: Record<string, () => CmdResult | Promise<CmdResult>> = {\n 'execute-phase': () => cmdInitExecutePhase(cwd, args[2]),\n 'plan-phase': () => cmdInitPlanPhase(cwd, args[2]),\n 'new-project': () => cmdInitNewProject(cwd),\n 'new-milestone': () => cmdInitNewMilestone(cwd),\n 'quick': () => cmdInitQuick(cwd, args.slice(2).join(' ')),\n 'resume': () => cmdInitResume(cwd),\n 'verify-work': () => cmdInitVerifyWork(cwd, args[2]),\n 'phase-op': () => cmdInitPhaseOp(cwd, args[2]),\n 'milestone-op': () => cmdInitMilestoneOp(cwd),\n 'map-codebase': () => cmdInitMapCodebase(cwd),\n 'init-existing': () => cmdInitExisting(cwd),\n 'progress': () => cmdInitProgress(cwd),\n // Agent-level inits\n 'executor': () => cmdInitExecutor(cwd, args[2]),\n 'planner': () => cmdInitPlanner(cwd, args[2]),\n 'researcher': () => cmdInitResearcher(cwd, args[2]),\n 'verifier': () => cmdInitVerifier(cwd, args[2]),\n 'debugger': () => cmdInitDebugger(cwd, args[2]),\n // Drift-related inits\n 'check-drift': () => cmdInitCheckDrift(cwd),\n 'realign': () => cmdInitRealign(cwd, args[2]),\n };\n const handler = workflow ? handlers[workflow] : undefined;\n if (handler) return handleResult(await handler(), raw);\n error(`Unknown init workflow: ${workflow}\\nAvailable: execute-phase, plan-phase, new-project, new-milestone, quick, resume, verify-work, phase-op, milestone-op, map-codebase, init-existing, progress, executor, planner, researcher, verifier, debugger, check-drift, realign`);\n};\n\nconst handleGitHub: Handler = async (args, cwd, raw) => {\n const sub = args[1];\n\n /**\n * Read content from --flag or --flag-file variant.\n * If --flag-file is provided, read file contents. Otherwise use --flag value.\n */\n const getFlagOrFile = (flagName: string): string | null => {\n const direct = getFlag(args, `--${flagName}`);\n if (direct !== null) return direct;\n const filePath = getFlag(args, `--${flagName}-file`);\n if (filePath) {\n return fs.readFileSync(filePath, 'utf-8');\n }\n return null;\n };\n\n const handlers: Record<string, () => CmdResult | Promise<CmdResult>> = {\n 'setup': () => cmdGitHubSetup(cwd, getFlag(args, '--milestone-title')),\n 'create-phase': () => {\n const f = getFlags(args, 'phase-number', 'phase-name', 'goal', 'requirements', 'success-criteria');\n return cmdGitHubCreatePhase(cwd,\n f['phase-number'] ?? '',\n f['phase-name'] ?? '',\n f.goal ?? '',\n f.requirements ? f.requirements.split(',') : [],\n f['success-criteria'] ? f['success-criteria'].split(',') : [],\n );\n },\n 'create-task': () => {\n const f = getFlags(args, 'phase-number', 'task-id', 'title', 'parent-issue-number');\n const body = getFlagOrFile('body') ?? '';\n return cmdGitHubCreateTask(cwd,\n f['phase-number'] ?? '',\n f['task-id'] ?? '',\n f.title ?? '',\n body,\n parseInt(f['parent-issue-number'] ?? '0', 10),\n );\n },\n 'batch-create-tasks': () => {\n const f = getFlags(args, 'phase-number', 'parent-issue-number', 'tasks');\n const tasksFile = getFlag(args, '--tasks-file');\n let tasksJson: Array<{ task_id: string; title: string; body: string }>;\n if (tasksFile) {\n tasksJson = JSON.parse(fs.readFileSync(tasksFile, 'utf-8'));\n } else {\n tasksJson = JSON.parse(f.tasks ?? '[]');\n }\n return cmdGitHubBatchCreateTasks(cwd,\n f['phase-number'] ?? '',\n parseInt(f['parent-issue-number'] ?? '0', 10),\n tasksJson,\n );\n },\n 'post-plan-comment': () => {\n const f = getFlags(args, 'phase-issue-number', 'plan-number');\n const planContent = getFlagOrFile('plan-content') ?? '';\n return cmdGitHubPostPlanComment(\n parseInt(f['phase-issue-number'] ?? '0', 10),\n f['plan-number'] ?? '',\n planContent,\n );\n },\n 'post-comment': () => {\n const f = getFlags(args, 'issue-number', 'type');\n const body = getFlagOrFile('body') ?? '';\n return cmdGitHubPostComment(\n parseInt(f['issue-number'] ?? '0', 10),\n body,\n f.type,\n );\n },\n 'post-completion': () => {\n const f = getFlags(args, 'issue-number', 'commit-sha', 'files-changed');\n const files = f['files-changed'] ? f['files-changed'].split(',') : [];\n return cmdGitHubPostCompletion(\n parseInt(f['issue-number'] ?? '0', 10),\n f['commit-sha'] ?? '',\n files,\n );\n },\n 'get-issue': () => {\n const f = getFlags(args, 'issue-number');\n return cmdGitHubGetIssue(\n parseInt(f['issue-number'] ?? '0', 10),\n hasFlag(args, 'include-comments'),\n );\n },\n 'list-sub-issues': () => {\n const f = getFlags(args, 'phase-issue-number');\n return cmdGitHubListSubIssues(\n parseInt(f['phase-issue-number'] ?? '0', 10),\n );\n },\n 'close-issue': () => {\n const f = getFlags(args, 'issue-number', 'reason', 'state-reason');\n return cmdGitHubCloseIssue(\n parseInt(f['issue-number'] ?? '0', 10),\n f.reason,\n f['state-reason'],\n );\n },\n 'reopen-issue': () => {\n const f = getFlags(args, 'issue-number');\n return cmdGitHubReopenIssue(\n parseInt(f['issue-number'] ?? '0', 10),\n );\n },\n 'bounce-issue': () => {\n const f = getFlags(args, 'issue-number');\n const reason = getFlagOrFile('reason') ?? '';\n return cmdGitHubBounceIssue(cwd,\n parseInt(f['issue-number'] ?? '0', 10),\n reason,\n );\n },\n 'move-issue': () => {\n const f = getFlags(args, 'issue-number', 'status');\n return cmdGitHubMoveIssue(\n cwd,\n parseInt(f['issue-number'] ?? '0', 10),\n f.status ?? '',\n );\n },\n 'detect-external-edits': () => {\n const f = getFlags(args, 'phase-number');\n return cmdGitHubDetectExternalEdits(cwd, f['phase-number'] ?? '');\n },\n 'query-board': () => {\n const f = getFlags(args, 'project-number', 'status', 'phase');\n return cmdGitHubQueryBoard(\n parseInt(f['project-number'] ?? '0', 10),\n f.status,\n f.phase,\n );\n },\n 'add-to-board': () => {\n const f = getFlags(args, 'project-number', 'issue-number');\n return cmdGitHubAddToBoard(\n parseInt(f['project-number'] ?? '0', 10),\n parseInt(f['issue-number'] ?? '0', 10),\n );\n },\n 'search-issues': () => {\n const f = getFlags(args, 'labels', 'state', 'query');\n return cmdGitHubSearchIssues(\n f.labels ? f.labels.split(',') : null,\n f.state,\n f.query,\n );\n },\n 'sync-check': () => cmdGitHubSyncCheck(cwd),\n 'phase-progress': () => {\n const f = getFlags(args, 'phase-issue-number');\n return cmdGitHubPhaseProgress(\n parseInt(f['phase-issue-number'] ?? '0', 10),\n );\n },\n 'all-progress': () => cmdGitHubAllProgress(),\n 'detect-interrupted': () => {\n const f = getFlags(args, 'phase-issue-number');\n return cmdGitHubDetectInterrupted(\n parseInt(f['phase-issue-number'] ?? '0', 10),\n );\n },\n 'status': () => cmdGitHubStatus(cwd),\n 'sync': () => cmdGitHubSync(cwd),\n 'overview': () => cmdGitHubOverview(cwd),\n };\n\n const handler = sub ? handlers[sub] : undefined;\n if (handler) return handleResult(await handler(), raw);\n error(`Unknown github subcommand: ${sub ?? '(none)'}\\nAvailable: ${Object.keys(handlers).join(', ')}`);\n};\n\n// ─── Command registry ────────────────────────────────────────────────────────\n\nconst COMMANDS: Record<string, Handler> = {\n 'state': handleState,\n 'resolve-model': async (args, cwd, raw) => handleResult(await cmdResolveModel(cwd, args[1], raw), raw),\n 'find-phase': async (args, cwd, raw) => handleResult(await cmdFindPhase(cwd, args[1]), raw),\n 'commit': async (args, cwd, raw) => {\n const files = args.indexOf('--files') !== -1\n ? args.slice(args.indexOf('--files') + 1).filter(a => !a.startsWith('--'))\n : [];\n handleResult(await cmdCommit(cwd, args[1], files, raw, hasFlag(args, 'amend')), raw);\n },\n 'verify-summary': async (args, cwd, raw) => {\n const countIndex = args.indexOf('--check-count');\n const checkCount = countIndex !== -1 ? parseInt(args[countIndex + 1], 10) : 2;\n handleResult(await cmdVerifySummary(cwd, args[1], checkCount), raw);\n },\n 'template': handleTemplate,\n 'frontmatter': handleFrontmatter,\n 'verify': handleVerify,\n 'generate-slug': (args, _cwd, raw) => handleResult(cmdGenerateSlug(args[1], raw), raw),\n 'current-timestamp': (args, _cwd, raw) => handleResult(cmdCurrentTimestamp((args[1] || 'full') as TimestampFormat, raw), raw),\n 'verify-path-exists': (args, cwd, raw) => handleResult(cmdVerifyPathExists(cwd, args[1], raw), raw),\n 'config-ensure-section': (_args, cwd, raw) => handleResult(cmdConfigEnsureSection(cwd, raw), raw),\n 'config-set': (args, cwd, raw) => handleResult(cmdConfigSet(cwd, args[1], args[2], raw), raw),\n 'config-get': (args, cwd, raw) => handleResult(cmdConfigGet(cwd, args[1], raw), raw),\n 'history-digest': async (_args, cwd, raw) => handleResult(await cmdHistoryDigest(cwd, raw), raw),\n 'phases': handlePhases,\n 'roadmap': handleRoadmap,\n 'requirements': (args, cwd, raw) => {\n if (args[1] === 'mark-complete') handleResult(cmdRequirementsMarkComplete(cwd, args.slice(2)), raw);\n else error('Unknown requirements subcommand. Available: mark-complete');\n },\n 'phase': handlePhase,\n 'milestone': handleMilestone,\n 'validate': handleValidate,\n 'drift': handleDrift,\n 'worktree': handleWorktree,\n 'decide-execution-mode': (args, _cwd, raw) => {\n const f = getFlags(args, 'worktree-mode', 'flag-override');\n handleResult(cmdDecideExecutionMode(args[1], args[2], f['worktree-mode'] ?? undefined, f['flag-override'] ?? undefined), raw);\n },\n 'validate-plan-independence': (args, _cwd, raw) => handleResult(cmdValidatePlanIndependence(args[1]), raw),\n 'progress': async (args, cwd, raw) => handleResult(await cmdProgressRender(cwd, args[1] || 'json', raw), raw),\n 'scaffold': async (args, cwd, raw) => {\n const f = getFlags(args, 'phase', 'name');\n handleResult(await cmdScaffold(cwd, args[1], { phase: f.phase, name: f.name ? args.slice(args.indexOf('--name') + 1).join(' ') : null }, raw), raw);\n },\n 'init': handleInit,\n 'github': handleGitHub,\n 'detect-stale-context': async (_args, cwd, raw) => handleResult(await cmdDetectStaleContext(cwd), raw),\n 'get-archived-phase': async (args, cwd, raw) => handleResult(await cmdGetArchivedPhase(cwd, args[1]), raw),\n 'phase-plan-index': async (args, cwd, raw) => handleResult(await cmdPhasePlanIndex(cwd, args[1]), raw),\n 'state-snapshot': async (_args, cwd, raw) => handleResult(await cmdStateSnapshot(cwd, raw), raw),\n 'summary-extract': (args, cwd, raw) => {\n const fieldsIndex = args.indexOf('--fields');\n const fields = fieldsIndex !== -1 ? args[fieldsIndex + 1].split(',') : null;\n handleResult(cmdSummaryExtract(cwd, args[1], fields, raw), raw);\n },\n 'websearch': async (args, _cwd, raw) => {\n const f = getFlags(args, 'limit', 'freshness');\n handleResult(await cmdWebsearch(args[1], {\n limit: f.limit ? parseInt(f.limit, 10) : 10,\n freshness: f.freshness ?? undefined,\n }, raw), raw);\n },\n 'artefakte-read': async (args, cwd, raw) => handleResult(await cmdArtefakteRead(cwd, args[1], getFlag(args, '--phase') ?? undefined, raw), raw),\n 'artefakte-write': async (args, cwd, raw) => handleResult(await cmdArtefakteWrite(cwd, args[1], getFlag(args, '--content') ?? undefined, getFlag(args, '--phase') ?? undefined, raw), raw),\n 'artefakte-append': async (args, cwd, raw) => handleResult(await cmdArtefakteAppend(cwd, args[1], getFlag(args, '--entry') ?? undefined, getFlag(args, '--phase') ?? undefined, raw), raw),\n 'artefakte-list': async (args, cwd, raw) => handleResult(await cmdArtefakteList(cwd, getFlag(args, '--phase') ?? undefined, raw), raw),\n 'context-load': async (args, cwd, raw) => handleResult(await cmdContextLoad(cwd, getFlag(args, '--phase') ?? undefined, getFlag(args, '--topic') ?? undefined, hasFlag(args, 'include-history')), raw),\n 'skill-list': async (_args, cwd, raw) => handleResult(await cmdSkillList(cwd), raw),\n 'skill-install': (args, cwd, raw) => handleResult(cmdSkillInstall(cwd, args[1]), raw),\n 'skill-update': (args, cwd, raw) => handleResult(cmdSkillUpdate(cwd, args[1]), raw),\n};\n\n// ─── Main ────────────────────────────────────────────────────────────────────\n\nasync function main(): Promise<void> {\n try {\n const args: string[] = process.argv.slice(2);\n\n // Optional cwd override for sandboxed subagents running outside project root.\n let cwd: string = process.cwd();\n const cwdEqArg = args.find(arg => arg.startsWith('--cwd='));\n const cwdIdx = args.indexOf('--cwd');\n if (cwdEqArg) {\n const value = cwdEqArg.slice('--cwd='.length).trim();\n if (!value) error('Missing value for --cwd');\n args.splice(args.indexOf(cwdEqArg), 1);\n cwd = path.resolve(value);\n } else if (cwdIdx !== -1) {\n const value = args[cwdIdx + 1];\n if (!value || value.startsWith('--')) error('Missing value for --cwd');\n args.splice(cwdIdx, 2);\n cwd = path.resolve(value);\n }\n\n if (!fs.existsSync(cwd) || !fs.statSync(cwd).isDirectory()) {\n error(`Invalid --cwd: ${cwd}`);\n }\n\n const rawIndex = args.indexOf('--raw');\n const raw: boolean = rawIndex !== -1;\n if (rawIndex !== -1) args.splice(rawIndex, 1);\n\n const command: string | undefined = args[0];\n\n if (!command) {\n error(`Usage: maxsim-tools <command> [args] [--raw] [--cwd <path>]\\nCommands: ${Object.keys(COMMANDS).join(', ')}`);\n }\n\n const handler = COMMANDS[command];\n if (!handler) {\n error(`Unknown command: ${command}`);\n }\n\n await handler(args, cwd, raw);\n } catch (thrown: unknown) {\n if (thrown instanceof CliOutput) {\n writeOutput(thrown);\n process.exit(0);\n }\n if (thrown instanceof CliError) {\n process.stderr.write('Error: ' + thrown.message + '\\n');\n process.exit(1);\n }\n // Re-throw unexpected errors\n throw thrown;\n }\n}\n\nmain();\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,33,34,35,36,37,38,39,40,41,42,43,44,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,124,128,129,130,131],"mappings":"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B,SAAS;EACP,yCAAyC,CACvC,sDACD;EACD,0CAA0C,CACxC,gEACD;EACD,2CAA2C,CACzC,uFACD;EACD,4BAA4B,CAC1B,6EACD;EACD,8BAA8B,CAC5B,wEACD;EACD,oBAAoB,CAClB,2DACD;EACD,mBAAmB,CACjB,0DACD;EACD,2BAA2B,CACzB,uEACD;EACD,0BAA0B,CAAC,0CAA0C;EACrE,iCAAiC,CAC/B,kFACD;EACD,yBAAyB,CAAC,gDAAgD;EAC1E,0BAA0B,CACxB,0DACD;EACD,mBAAmB,CAAC,qCAAqC;EACzD,+BAA+B,CAC7B,sDACD;EACD,gCAAgC,CAC9B,gEACD;EACD,yBAAyB,CAAC,gDAAgD;EAC1E,0BAA0B,CACxB,0DACD;EACD,oBAAoB,CAAC,+CAA+C;EACpE,wBAAwB,CACtB,wEACD;EACD,wBAAwB,CACtB,yDACD;EACD,yBAAyB,CACvB,wDACD;EACD,gBAAgB,CACd,+DACD;EACD,0BAA0B,CACxB,gFACD;EACD,iCAAiC,CAC/B,mGACD;EACD,yBAAyB,CACvB,qFACD;EACD,2BAA2B,CACzB,gFACD;EACD,0BAA0B,CACxB,+DACD;EACD,iBAAiB,CAAC,mDAAmD;EACrE,mBAAmB,CAAC,8CAA8C;EAClE,kBAAkB,CAChB,6DACD;EACD,oBAAoB,CAClB,wDACD;EACD,+BAA+B,CAC7B,iDACD;EACD,gCAAgC,CAC9B,2DACD;EACD,mBAAmB,CAAC,qDAAqD;EACzE,uBAAuB,CACrB,0DACD;EACD,oDAAoD,CAClD,sEACD;EACD,iBAAiB,CACf,oEACD;EACD,kBAAkB,CAChB,6EACD;EACD,+BAA+B,CAC7B,uDACD;EACD,gCAAgC,CAC9B,iFACD;EACD,yBAAyB,CACvB,uDACD;EACD,mDAAmD,CACjD,mEACD;EACD,gBAAgB,CACd,mEACD;EACD,wBAAwB,CACtB,gEACD;EACD,+BAA+B,CAC7B,sDACD;EACD,gCAAgC,CAC9B,gEACD;EACD,qBAAqB,CAAC,2CAA2C;EACjE,sBAAsB,CAAC,gDAAgD;EACvE,kCAAkC,CAChC,oDACD;EACD,4BAA4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qEACD;EACD,sBAAsB,CACpB,uDACD;EACD,QAAQ,CAAC,wDAAwD;EAClE;CACD,cAAc;EACZ,eAAe,CACb,iFACD;EACD,eAAe,CACb,yEACD;EACD,uBAAuB,CACrB,mEACD;EACD,gBAAgB,CACd,qFACD;EACD,sBAAsB,CACpB,yEACD;EACD,UAAU;GACR;GACA,EAAE;GACF,EAAE,mBAAmB,EAAE,UAAU,gBAAgB,EAAE;GACpD;EACD,aAAa,CACX,iEACD;EACD,YAAY,CACV,wEACD;EACD,mBAAmB,CACjB,sEACD;EACD,iBAAiB,CAAC,wDAAwD;EAC1E,UAAU,CAAC,4DAA4D;EACvE,oBAAoB,CAClB,+FACD;EACD,4BAA4B,CAC1B,8HACD;EACD,oBAAoB,CAClB,0EACD;EACD,kBAAkB,CAAC,uCAAuC;EAC1D,mBAAmB,CAAC,iDAAiD;EACrE,qBAAqB;GACnB;GACA,EAAE;GACF,EAAE,SAAS,CAAC,gBAAgB,qBAAqB,EAAE;GACpD;EACD,qBAAqB,CACnB,2DACD;EACD,oBAAoB,CAAC,mDAAmD;EACxE,aAAa,CACX,kEACD;EACD,oBAAoB,CAClB,0DACD;EACD,aAAa,CAAC,kDAAkD;EACjE;CACD,cAAc;EACZ,qBAAqB,CACnB,0EACD;EACD,+BAA+B,CAC7B,wFACD;EACD,qBAAqB,CAAC,gDAAgD;EACtE,kCAAkC,CAChC,8DACD;EACD,qBAAqB,CACnB,qEACD;EACD,kCAAkC,CAChC,mFACD;EACD,qBAAqB,CACnB,yDACD;EACD,kBAAkB,CAChB,kEACD;EACD,+BAA+B,CAC7B,wDACD;EACD,gCAAgC,CAC9B,6DACD;EACD,yBAAyB,CAAC,+CAA+C;EACzE,0BAA0B,CACxB,wDACD;EACD,uCAAuC,CACrC,sEACD;EACD,iCAAiC,CAC/B,+EACD;EACD,2CAA2C,CACzC,6FACD;EACD,qCAAqC,CACnC,gFACD;EACD,2BAA2B,CACzB,2EACD;EACD,wCAAwC,CACtC,yFACD;EACD,qBAAqB,CACnB,oEACD;EACD,+BAA+B,CAC7B,kFACD;EACF;CACD,gBAAgB;EACd,sBAA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,4DACD;EACD,sBAAsB,CACpB,kEACD;EACD,0CAA0C,CACxC,oFACD;EACD,4BAA4B,CAC1B,0FACD;EACD,6BAA6B,CAC3B,gGACD;EACD,8CAA8C;GAC5C;GACA,EAAE;GACF,EAAE,SAAS,CAAC,YAAY,4CAA4C,EAAE;GACvE;EACD,6DAA6D;GAC3D;GACA,EAAE;GACF,EACE,SAAS,CACP,YACA,0DACD,EACF;GACF;EACD,yDAAyD,CACvD,4DACD;EACD,2CAA2C,CACzC,kEACD;EACD,4CAA4C,CAC1C,wEACD;EACD,gCAAgC,CAC9B,mDACD;EACD,2BAA2B,CACzB,yDACD;EACD,mBAAmB,CACjB,+DACD;EACD,uCAAuC,CACrC,iFACD;EACD,kCAAkC,CAChC,uFACD;EACD,0BAA0B,CACxB,6FACD;EACD,4DAA4D,CAC1D,6BACD;EACD,uDAAuD,CACrD,mCACD;EACD,+CAA+C,CAC7C,yCACD;EACD,kCAAkC,CAAC,qBAAqB;EACxD,6BAA6B,CAAC,2BAA2B;EACzD,qBAAqB,CAAC,iCAAiC;EACvD,oCAAoC,CAClC,oEACD;EACD,sBAAsB,CACpB,0EACD;EACD,uBAAuB,CACrB,gFACD;EACD,2CAA2C,CACzC,0FACD;EACD,6BAA6B,CAC3B,gGACD;EACD,8BAA8B,CAC5B,sGACD;EACF;CACD,mBAAmB;EACjB,0BAA0B,CAAC,sCAAsC;EACjE,0BAA0B,CACxB,sDACD;EACD,uBAAuB,CAAC,mDAAmD;EAC3E,iBAAiB,CAAC,gDAAgD;EAClE,0BAA0B,CAAC,qCAAqC;EAChE,0BAA0B,CACxB,qDACD;EACF;CACD,UAAU;EACR,eAAe,CAAC,qDAAqD;EACrE,gBAAgB,CACd,2DACD;EACD,kBAAkB,CAChB,iEACD;EACD,mBAAmB,CACjB,uEACD;EACD,gBAAgB,CACd,gEACD;EACD,iBAAiB,CACf,sEACD;EACD,WAAW,CAAC,8CAA8C;EAC1D,YAAY,CAAC,oDAAoD;EACjE,YAAY,CAAC,8DAA8D;EAC3E,aAAa,CACX,oEACD;EACD,kBAAkB,CAAC,qDAAqD;EACxE,mBAAmB,CA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"}
1
+ {"version":3,"file":"cli.cjs","names":[],"sources":["../src/cli.ts"],"sourcesContent":["/**\n * MAXSIM Tools — CLI dispatcher.\n * Usage: node maxsim-tools.cjs <command> [args] [--raw]\n */\n\nconst COMMANDS: Record<string, () => void> = {};\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command) {\n const available = Object.keys(COMMANDS).join(', ') || '(none yet)';\n process.stderr.write(\n `Usage: maxsim-tools <command> [args] [--raw]\\nCommands: ${available}\\n`,\n );\n process.exit(1);\n }\n\n const handler = COMMANDS[command];\n if (!handler) {\n process.stderr.write(`Unknown command: ${command}\\n`);\n process.exit(1);\n }\n\n handler();\n}\n\nmain().catch((err: unknown) => {\n process.stderr.write(\n `Fatal: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n process.exit(1);\n});\n"],"mappings":";;;;;;;AAKA,MAAM,WAAuC,EAAE;AAE/C,eAAe,OAAsB;CAEnC,MAAM,UADO,QAAQ,KAAK,MAAM,EAAE,CACb;AAErB,KAAI,CAAC,SAAS;EACZ,MAAM,YAAY,OAAO,KAAK,SAAS,CAAC,KAAK,KAAK,IAAI;AACtD,UAAQ,OAAO,MACb,2DAA2D,UAAU,IACtE;AACD,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,SAAS;AACzB,KAAI,CAAC,SAAS;AACZ,UAAQ,OAAO,MAAM,oBAAoB,QAAQ,IAAI;AACrD,UAAQ,KAAK,EAAE;;AAGjB,UAAS;;AAGX,MAAM,CAAC,OAAO,QAAiB;AAC7B,SAAQ,OAAO,MACb,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI,CAAC,IAC5D;AACD,SAAQ,KAAK,EAAE;EACf"}