ostacky 0.5.9 → 0.6.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.
- package/README.md +20 -19
- package/assets/agents/ostacky.md +191 -61
- package/assets/commands/install-stack.md +137 -66
- package/assets/mcp/openspec/bun.lock +20 -0
- package/assets/mcp/openspec/index.js +300 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/LICENSE +216 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/README.md +40 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-BUWfrB3C.d.cts → openspec/node_modules/@modelcontextprotocol/core/dist/auth-B2Q9_Vxp.d.cts} +768 -465
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/auth-B2Q9_Vxp.d.cts.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-DFgbUATV.mjs → openspec/node_modules/@modelcontextprotocol/core/dist/auth-CUe6YdwF.mjs} +31 -6
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/auth-CUe6YdwF.mjs.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CNbu4K4a.d.mts → openspec/node_modules/@modelcontextprotocol/core/dist/auth-CVhIKulL.d.mts} +768 -465
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/auth-CVhIKulL.d.mts.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CEFpHq32.cjs → openspec/node_modules/@modelcontextprotocol/core/dist/auth-CfDMXiII.cjs} +42 -5
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/auth-CfDMXiII.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/index.cjs +175 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/index.d.cts +2 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/index.d.mts +2 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/index.mjs +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/internal.cjs +201 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +99 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/internal.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +99 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/internal.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/dist/internal.mjs +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/core/package.json +85 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/LICENSE +216 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/README.md +30 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-B_4czhCS.d.cts +1054 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-B_4czhCS.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-BdSo9BII.d.mts +1054 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-BdSo9BII.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-Brn-Q2J_.cjs +7086 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-Brn-Q2J_.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-CplOkyLC.mjs +7069 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/ajvProvider-CplOkyLC.mjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-BYRW5af5.d.mts +59 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-BYRW5af5.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-Bd-iTHAF.mjs +970 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-Bd-iTHAF.mjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-D9GAttn8.d.cts +59 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-D9GAttn8.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-ojcZaap3.cjs +976 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/cfWorkerProvider-ojcZaap3.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/chunk-Bnu9O96Y.cjs +60 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/chunk-Br0eD_fh.mjs +42 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D93NefGZ.d.mts → openspec/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CEckaSEs.d.mts} +41 -13
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CEckaSEs.d.mts.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BRM5MGf9.d.cts → openspec/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DzBzpE4_.d.cts} +41 -13
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DzBzpE4_.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.cjs +1999 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.d.cts +732 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.d.mts +732 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.mjs +1814 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-CzU40gwu.cjs → openspec/node_modules/@modelcontextprotocol/server/dist/mcp-DM1iHYFo.cjs} +55 -14
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/mcp-DM1iHYFo.cjs.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-Ctiu4nBa.mjs → openspec/node_modules/@modelcontextprotocol/server/dist/mcp-IJurDZVN.mjs} +50 -15
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/mcp-IJurDZVN.mjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.cjs +23 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.cts +11 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.mts +11 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.mjs +22 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsBrowser.mjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsNode.cjs +12 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsNode.d.cts +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsNode.d.mts +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsNode.mjs +4 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +30 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.cts +10 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.mts +10 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +29 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-D9A7ArDn.cjs → openspec/node_modules/@modelcontextprotocol/server/dist/src-BX_fm-dB.cjs} +91 -22
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/src-BX_fm-dB.cjs.map +1 -0
- package/assets/mcp/{ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-D5Nfqtoz.mjs → openspec/node_modules/@modelcontextprotocol/server/dist/src-D86MbS1I.mjs} +93 -24
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/src-D86MbS1I.mjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +564 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.cjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +107 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +107 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +562 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/stdio.mjs.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/types-DsbMXNFL.d.cts +1099 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/types-DsbMXNFL.d.cts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/types-mS0yxCL0.d.mts +1099 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/types-mS0yxCL0.d.mts.map +1 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/ajv.cjs +5 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/ajv.d.cts +2 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/ajv.d.mts +2 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/ajv.mjs +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.cjs +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.d.cts +2 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.d.mts +2 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/dist/validators/cfWorker.mjs +3 -0
- package/assets/mcp/openspec/node_modules/@modelcontextprotocol/server/package.json +160 -0
- package/assets/mcp/openspec/node_modules/zod/LICENSE +21 -0
- package/assets/mcp/openspec/node_modules/zod/README.md +191 -0
- package/assets/mcp/openspec/node_modules/zod/index.cjs +33 -0
- package/assets/mcp/openspec/node_modules/zod/index.d.cts +4 -0
- package/assets/mcp/openspec/node_modules/zod/index.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/index.js +4 -0
- package/assets/mcp/openspec/node_modules/zod/locales/index.cjs +17 -0
- package/assets/mcp/openspec/node_modules/zod/locales/index.d.cts +1 -0
- package/assets/mcp/openspec/node_modules/zod/locales/index.d.ts +1 -0
- package/assets/mcp/openspec/node_modules/zod/locales/index.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/locales/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/mini/index.cjs +32 -0
- package/assets/mcp/openspec/node_modules/zod/mini/index.d.cts +3 -0
- package/assets/mcp/openspec/node_modules/zod/mini/index.d.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/mini/index.js +3 -0
- package/assets/mcp/openspec/node_modules/zod/mini/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/package.json +135 -0
- package/assets/mcp/openspec/node_modules/zod/src/index.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/src/locales/index.ts +1 -0
- package/assets/mcp/openspec/node_modules/zod/src/mini/index.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/errors.ts +13 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/external.ts +6 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/index.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/assets/mcp/openspec/node_modules/zod/src/v3/types.ts +5138 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/external.ts +52 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/from-json-schema.ts +659 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/schemas.ts +2672 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/assignability.test.ts +216 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/catch.test.ts +326 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/codec.test.ts +703 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/default.test.ts +409 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +197 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +694 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +807 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +895 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/global-config.test.ts +39 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +46 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/locales_ka.test.ts +29 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/locales_ro.test.ts +24 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/number.test.ts +325 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/object.test.ts +717 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/optional.test.ts +333 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/partial.test.ts +450 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +26 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +351 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/record.test.ts +717 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +631 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/refine.test.ts +633 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/string.test.ts +1224 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +3125 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/transform.test.ts +378 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/tuple.test.ts +496 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/union.test.ts +273 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/api.ts +1823 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/config.ts +15 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/core.ts +153 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/errors.ts +455 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/index.ts +16 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/json-schema-processors.ts +666 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/regexes.ts +190 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/schemas.ts +4730 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/el.test.ts +215 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +72 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/hr.test.ts +163 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +105 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +125 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/to-json-schema.ts +622 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/util.ts +983 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/index.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/el.ts +121 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/en.ts +123 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/fr.ts +132 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/hr.ts +131 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/index.ts +52 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ro.ts +129 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/uz.ts +117 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/external.ts +41 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/schemas.ts +1947 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/codec.test.ts +548 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/index.test.ts +993 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +325 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4/mini/tests/string.test.ts +352 -0
- package/assets/mcp/openspec/node_modules/zod/src/v4-mini/index.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v3/ZodError.cjs +138 -0
- package/assets/mcp/openspec/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/assets/mcp/openspec/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/assets/mcp/openspec/node_modules/zod/v3/ZodError.js +133 -0
- package/assets/mcp/openspec/node_modules/zod/v3/errors.cjs +17 -0
- package/assets/mcp/openspec/node_modules/zod/v3/errors.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v3/errors.d.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v3/errors.js +9 -0
- package/assets/mcp/openspec/node_modules/zod/v3/external.cjs +22 -0
- package/assets/mcp/openspec/node_modules/zod/v3/external.d.cts +6 -0
- package/assets/mcp/openspec/node_modules/zod/v3/external.d.ts +6 -0
- package/assets/mcp/openspec/node_modules/zod/v3/external.js +6 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/assets/mcp/openspec/node_modules/zod/v3/helpers/util.js +133 -0
- package/assets/mcp/openspec/node_modules/zod/v3/index.cjs +33 -0
- package/assets/mcp/openspec/node_modules/zod/v3/index.d.cts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v3/index.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v3/index.js +4 -0
- package/assets/mcp/openspec/node_modules/zod/v3/locales/en.cjs +112 -0
- package/assets/mcp/openspec/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v3/locales/en.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v3/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/assets/mcp/openspec/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/assets/mcp/openspec/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/assets/mcp/openspec/node_modules/zod/v3/standard-schema.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v3/types.cjs +3777 -0
- package/assets/mcp/openspec/node_modules/zod/v3/types.d.cts +1034 -0
- package/assets/mcp/openspec/node_modules/zod/v3/types.d.ts +1034 -0
- package/assets/mcp/openspec/node_modules/zod/v3/types.js +3695 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/checks.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/coerce.js +17 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/compat.js +31 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/errors.js +48 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/external.cjs +73 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/external.d.cts +16 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/external.d.ts +16 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/external.js +20 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/from-json-schema.cjs +625 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/from-json-schema.js +599 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/index.cjs +33 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/index.js +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/iso.js +30 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/parse.js +15 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/schemas.cjs +1511 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/schemas.d.cts +767 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/schemas.d.ts +767 -0
- package/assets/mcp/openspec/node_modules/zod/v4/classic/schemas.js +1395 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/api.cjs +1227 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/api.d.cts +325 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/api.d.ts +325 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/api.js +1087 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/checks.cjs +601 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/checks.js +575 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/core.cjs +85 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/core.d.cts +70 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/core.d.ts +70 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/core.js +78 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/doc.cjs +39 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/doc.js +35 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/errors.cjs +216 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/errors.d.cts +221 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/errors.d.ts +221 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/errors.js +185 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/index.cjs +47 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/index.d.cts +16 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/index.d.ts +16 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/index.js +16 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-processors.cjs +644 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema-processors.js +601 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/json-schema.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/parse.cjs +131 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/parse.js +93 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/regexes.cjs +172 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/regexes.d.cts +85 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/regexes.d.ts +85 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/regexes.js +139 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/registries.cjs +56 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/registries.js +51 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/schemas.cjs +2270 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/schemas.d.cts +1184 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/schemas.d.ts +1184 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/schemas.js +2239 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/to-json-schema.cjs +457 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/to-json-schema.js +448 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/util.cjs +734 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/util.d.cts +200 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/util.d.ts +200 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/util.js +674 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/versions.cjs +8 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/core/versions.js +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/index.cjs +22 -0
- package/assets/mcp/openspec/node_modules/zod/v4/index.d.cts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4/index.d.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4/index.js +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ar.js +106 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/az.cjs +132 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/az.js +105 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/be.cjs +183 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/be.js +156 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/bg.js +120 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ca.js +107 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/cs.js +111 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/da.cjs +142 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/da.js +115 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/de.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/de.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/el.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/el.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/el.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/el.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/en.cjs +140 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/en.js +113 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/eo.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/es.cjs +159 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/es.js +132 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fa.js +114 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fi.js +112 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr.cjs +152 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/fr.js +125 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/he.cjs +241 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/he.js +214 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hr.cjs +149 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hr.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hr.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hr.js +122 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hu.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/hy.js +147 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/id.cjs +133 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/id.js +106 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/index.cjs +111 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/index.d.cts +52 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/index.d.ts +52 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/index.js +52 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/is.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/is.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/it.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/it.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ja.js +107 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ka.js +112 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/kh.js +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/km.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/km.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ko.js +111 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/lt.js +203 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/mk.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ms.js +107 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/nl.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/no.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/no.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ota.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pl.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ps.js +114 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/pt.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ro.cjs +146 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ro.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ro.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ro.js +119 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ru.js +156 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sl.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/sv.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ta.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/th.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/th.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/tr.js +105 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ua.js +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uk.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/ur.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uz.cjs +137 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/uz.js +110 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/vi.js +108 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/yo.js +107 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/assets/mcp/openspec/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/checks.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/coerce.js +22 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/external.cjs +63 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/external.d.cts +13 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/external.d.ts +13 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/external.js +14 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/index.cjs +32 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/index.js +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/iso.js +34 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/parse.js +1 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/schemas.cjs +1083 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/schemas.d.cts +445 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/schemas.d.ts +445 -0
- package/assets/mcp/openspec/node_modules/zod/v4/mini/schemas.js +961 -0
- package/assets/mcp/openspec/node_modules/zod/v4/package.json +7 -0
- package/assets/mcp/openspec/node_modules/zod/v4-mini/index.cjs +32 -0
- package/assets/mcp/openspec/node_modules/zod/v4-mini/index.d.cts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4-mini/index.d.ts +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4-mini/index.js +3 -0
- package/assets/mcp/openspec/node_modules/zod/v4-mini/package.json +7 -0
- package/assets/mcp/openspec/package.json +10 -0
- package/assets/mcp/ostacky-controller/index.js +455 -164
- package/assets/mcp/ostacky-controller/node_modules/.package-lock.json +8 -8
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-B2Q9_Vxp.d.cts +8501 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-B2Q9_Vxp.d.cts.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CUe6YdwF.mjs +1678 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CUe6YdwF.mjs.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CVhIKulL.d.mts +8501 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CVhIKulL.d.mts.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CfDMXiII.cjs +2899 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CfDMXiII.cjs.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/index.cjs +2 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/index.d.cts +2 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/index.d.mts +2 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/index.mjs +2 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/internal.cjs +3 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/internal.d.cts +14 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/internal.d.cts.map +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/internal.d.mts +14 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/internal.d.mts.map +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/internal.mjs +2 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/package.json +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CEckaSEs.d.mts +4041 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-CEckaSEs.d.mts.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DzBzpE4_.d.cts +4043 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-DzBzpE4_.d.cts.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/index.cjs +12 -3
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/index.cjs.map +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/index.d.cts +2 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/index.d.mts +2 -2
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/index.mjs +5 -4
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/index.mjs.map +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-DM1iHYFo.cjs +2004 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-DM1iHYFo.cjs.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-IJurDZVN.mjs +1919 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-IJurDZVN.mjs.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.cjs +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/shimsWorkerd.mjs +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-BX_fm-dB.cjs +8069 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-BX_fm-dB.cjs.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-D86MbS1I.mjs +7571 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-D86MbS1I.mjs.map +1 -0
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/stdio.cjs +3 -3
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/stdio.cjs.map +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/stdio.d.cts +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/stdio.d.mts +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/stdio.mjs +3 -3
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/stdio.mjs.map +1 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/package.json +3 -3
- package/assets/mcp/ostacky-controller/package-lock.json +10 -10
- package/assets/mcp/ostacky-controller/package.json +2 -2
- package/assets/plugins/engram.ts +537 -0
- package/assets/skills/{thinking → brainstorming}/SKILL.md +8 -6
- package/assets/skills/dispatching-parallel-agents/SKILL.md +7 -7
- package/assets/skills/execution-mode-evaluation/SKILL.md +10 -8
- package/assets/skills/graceful-degradation/SKILL.md +235 -0
- package/assets/skills/openspec-apply-change/SKILL.md +4 -2
- package/assets/skills/openspec-archive-change/SKILL.md +4 -4
- package/assets/skills/openspec-explore/SKILL.md +288 -0
- package/assets/skills/openspec-propose/SKILL.md +7 -5
- package/assets/skills/subagent-driven-development/SKILL.md +18 -17
- package/assets/skills/tdd/SKILL.md +1 -1
- package/assets/skills/using-git-worktrees/SKILL.md +3 -11
- package/assets/skills/using-superpowers/SKILL.md +14 -20
- package/assets/skills/writing-plans/SKILL.md +5 -3
- package/assets/skills/writing-skills/SKILL.md +9 -9
- package/dist/cli.js +2351 -1728
- package/manifest.json +61 -40
- package/package.json +9 -3
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-BUWfrB3C.d.cts.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CEFpHq32.cjs.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-CNbu4K4a.d.mts.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/core/dist/auth-DFgbUATV.mjs.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-BRM5MGf9.d.cts.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/createMcpHandler-D93NefGZ.d.mts.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-Ctiu4nBa.mjs.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/mcp-CzU40gwu.cjs.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-D5Nfqtoz.mjs.map +0 -1
- package/assets/mcp/ostacky-controller/node_modules/@modelcontextprotocol/server/dist/src-D9A7ArDn.cjs.map +0 -1
- package/assets/skills/execution-mode-evaluation/README.md +0 -257
- package/assets/tests/agent-contract.test.js +0 -226
- package/assets/tests/controller.test.js +0 -187
- package/assets/tests/e2e-scenarios.md +0 -502
- package/assets/tests/validate-config.sh +0 -272
- package/dist/mcp/ask-user-server/index.js +0 -19657
- package/dist/mcp/ostacky-controller/index.js +0 -20085
|
@@ -3,15 +3,128 @@
|
|
|
3
3
|
import { McpServer } from '@modelcontextprotocol/server';
|
|
4
4
|
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
|
|
5
5
|
import * as z from 'zod/v4';
|
|
6
|
-
import { readFileSync, writeFileSync, renameSync, mkdirSync } from 'node:fs';
|
|
7
|
-
import { dirname } from 'node:path';
|
|
6
|
+
import { readFileSync, writeFileSync, renameSync, mkdirSync, readdirSync, unlinkSync } from 'node:fs';
|
|
7
|
+
import { dirname, basename } from 'node:path';
|
|
8
|
+
|
|
9
|
+
const MAX_TASKS = 50;
|
|
10
|
+
const MAX_SNAPSHOT_JSON_LENGTH = 100 * 1024;
|
|
11
|
+
const MAX_STATE_FILE_SIZE = 1024 * 1024;
|
|
12
|
+
const WATCHDOG_TIMEOUT_MS = 30_000;
|
|
13
|
+
const WATCHDOG_CHECK_INTERVAL_MS = 10_000;
|
|
14
|
+
let lastToolActivity = Date.now();
|
|
15
|
+
|
|
16
|
+
const TRANSITIONS = {
|
|
17
|
+
INTERPRETATION_PENDING: [
|
|
18
|
+
{ via: 'request_clarification', to: 'CLARIFICATION_PENDING' },
|
|
19
|
+
{ via: 'proceed_to_discovery', to: 'DISCOVERY' },
|
|
20
|
+
{ via: 'record_discovery', to: 'ROUTE_DECISION_PENDING' },
|
|
21
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
22
|
+
],
|
|
23
|
+
CLARIFICATION_PENDING: [
|
|
24
|
+
{ via: 'record_clarification', to: 'DISCOVERY' },
|
|
25
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
26
|
+
{ via: 'abandon', to: 'BLOCKED' },
|
|
27
|
+
],
|
|
28
|
+
DISCOVERY: [
|
|
29
|
+
{ via: 'record_discovery', to: 'LEVEL_RESOLVED' },
|
|
30
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
31
|
+
{ via: 'abandon', to: 'BLOCKED' },
|
|
32
|
+
],
|
|
33
|
+
LEVEL_RESOLVED: [
|
|
34
|
+
{ via: 'proceed_to_route', to: 'ROUTE_DECISION_PENDING' },
|
|
35
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
36
|
+
],
|
|
37
|
+
ROUTE_DECISION_PENDING: [
|
|
38
|
+
{ via: 'consume_route_decision', to: 'SPECIFICATION', choice: 'SPEC' },
|
|
39
|
+
{ via: 'consume_route_decision', to: 'EXECUTION_ANALYSIS', choice: 'DIRECT' },
|
|
40
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
41
|
+
{ via: 'abandon', to: 'BLOCKED' },
|
|
42
|
+
],
|
|
43
|
+
SPECIFICATION: [
|
|
44
|
+
{ via: 'spec_complete', to: 'EXECUTION_ANALYSIS' },
|
|
45
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
46
|
+
{ via: 'abandon', to: 'BLOCKED' },
|
|
47
|
+
],
|
|
48
|
+
EXECUTION_ANALYSIS: [
|
|
49
|
+
{ via: 'analysis_complete', to: 'EXECUTION_DECISION_PENDING' },
|
|
50
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
51
|
+
{ via: 'abandon', to: 'BLOCKED' },
|
|
52
|
+
],
|
|
53
|
+
EXECUTION_DECISION_PENDING: [
|
|
54
|
+
{ via: 'consume_execution_decision', to: 'EXECUTING_INLINE', mode: 'INLINE' },
|
|
55
|
+
{ via: 'consume_execution_decision', to: 'EXECUTING_SUBAGENTS', mode: 'SUBAGENT_DRIVEN' },
|
|
56
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
57
|
+
{ via: 'abandon', to: 'BLOCKED' },
|
|
58
|
+
],
|
|
59
|
+
EXECUTING_INLINE: [
|
|
60
|
+
{ via: 'implementation_complete', to: 'SYNC' },
|
|
61
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
62
|
+
],
|
|
63
|
+
EXECUTING_SUBAGENTS: [
|
|
64
|
+
{ via: 'implementation_complete', to: 'SYNC' },
|
|
65
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
66
|
+
],
|
|
67
|
+
BLOCKED: [
|
|
68
|
+
{ via: 'replan', to: 'INTERPRETATION_PENDING' },
|
|
69
|
+
{ via: 'abandon', to: 'DONE' },
|
|
70
|
+
],
|
|
71
|
+
SYNC: [
|
|
72
|
+
{ via: 'sync_complete', to: 'DONE' },
|
|
73
|
+
{ via: 'block', to: 'BLOCKED' },
|
|
74
|
+
],
|
|
75
|
+
DONE: [],
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Safe JSON.stringify that won't throw on circular references.
|
|
80
|
+
*/
|
|
81
|
+
function safeJsonStringify(obj, pretty = false) {
|
|
82
|
+
const seen = new WeakSet();
|
|
83
|
+
try {
|
|
84
|
+
return JSON.stringify(
|
|
85
|
+
obj,
|
|
86
|
+
(key, value) => {
|
|
87
|
+
if (typeof value === 'object' && value !== null) {
|
|
88
|
+
if (seen.has(value)) return '[Circular]';
|
|
89
|
+
seen.add(value);
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
},
|
|
93
|
+
pretty ? 2 : undefined
|
|
94
|
+
);
|
|
95
|
+
} catch (e) {
|
|
96
|
+
return `[Unstringifiable: ${e.message}]`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
8
99
|
|
|
9
100
|
function log(event, data) {
|
|
10
101
|
const ts = new Date().toISOString();
|
|
11
|
-
const payload = data ? ` ${
|
|
102
|
+
const payload = data ? ` ${safeJsonStringify(data)}` : '';
|
|
12
103
|
console.error(`[${ts}] ${event}${payload}`);
|
|
13
104
|
}
|
|
14
105
|
|
|
106
|
+
/**
|
|
107
|
+
* Cleans up stale .tmp.* files from a previous crash.
|
|
108
|
+
*/
|
|
109
|
+
function cleanupTmpFiles(statePath) {
|
|
110
|
+
if (!statePath) return;
|
|
111
|
+
const dir = dirname(statePath);
|
|
112
|
+
const name = basename(statePath);
|
|
113
|
+
try {
|
|
114
|
+
for (const entry of readdirSync(dir)) {
|
|
115
|
+
if (entry.startsWith(name + '.tmp.')) {
|
|
116
|
+
try {
|
|
117
|
+
unlinkSync(dir + '/' + entry);
|
|
118
|
+
} catch {
|
|
119
|
+
/* best-effort */
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
} catch {
|
|
124
|
+
/* directory may not exist yet */
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
15
128
|
const STATES = Object.freeze({
|
|
16
129
|
INTERPRETATION_PENDING: 'INTERPRETATION_PENDING',
|
|
17
130
|
CLARIFICATION_PENDING: 'CLARIFICATION_PENDING',
|
|
@@ -59,6 +172,19 @@ class OstackyController {
|
|
|
59
172
|
}
|
|
60
173
|
}
|
|
61
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Validates that a parsed state object has the required fields and valid values.
|
|
177
|
+
* Returns null if valid, or an error message if invalid.
|
|
178
|
+
*/
|
|
179
|
+
#validateState(parsed) {
|
|
180
|
+
if (typeof parsed !== 'object' || parsed === null) return 'State is not an object';
|
|
181
|
+
if (typeof parsed.state !== 'string') return 'Missing or invalid "state" field';
|
|
182
|
+
if (!STATES[parsed.state]) return `Unknown state: "${parsed.state}"`;
|
|
183
|
+
if (typeof parsed.revision !== 'number') return 'Missing or invalid "revision" field';
|
|
184
|
+
if (parsed.revision < 0) return `Invalid revision: ${parsed.revision}`;
|
|
185
|
+
return null; // valid
|
|
186
|
+
}
|
|
187
|
+
|
|
62
188
|
#load() {
|
|
63
189
|
if (this.#loaded) return;
|
|
64
190
|
if (!this.#statePath) {
|
|
@@ -66,11 +192,38 @@ class OstackyController {
|
|
|
66
192
|
this.#loaded = true;
|
|
67
193
|
return;
|
|
68
194
|
}
|
|
195
|
+
// Try primary state file
|
|
69
196
|
try {
|
|
70
197
|
const raw = readFileSync(this.#statePath, 'utf8');
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
198
|
+
if (raw.length > MAX_STATE_FILE_SIZE) throw new Error(`State file too large: ${raw.length} bytes`);
|
|
199
|
+
const parsed = JSON.parse(raw);
|
|
200
|
+
const validationError = this.#validateState(parsed);
|
|
201
|
+
if (validationError) throw new Error(`State validation failed: ${validationError}`);
|
|
202
|
+
this.#state = { ...DEFAULT_STATE, ...parsed };
|
|
203
|
+
this.#loaded = true;
|
|
204
|
+
return;
|
|
205
|
+
} catch (err) {
|
|
206
|
+
log('warn:load_primary_failed', { error: err.message });
|
|
207
|
+
}
|
|
208
|
+
// Fallback: try .backup
|
|
209
|
+
const backupPath = this.#statePath + '.backup';
|
|
210
|
+
try {
|
|
211
|
+
const raw = readFileSync(backupPath, 'utf8');
|
|
212
|
+
if (raw.length > MAX_STATE_FILE_SIZE) throw new Error(`Backup too large: ${raw.length} bytes`);
|
|
213
|
+
const parsed = JSON.parse(raw);
|
|
214
|
+
const validationError = this.#validateState(parsed);
|
|
215
|
+
if (validationError) throw new Error(`Backup validation failed: ${validationError}`);
|
|
216
|
+
this.#state = { ...DEFAULT_STATE, ...parsed, error: 'State restored from backup' };
|
|
217
|
+
log('warn:state_restored_from_backup');
|
|
218
|
+
this.#loaded = true;
|
|
219
|
+
return;
|
|
220
|
+
} catch (backupErr) {
|
|
221
|
+
// No backup either — set error state instead of silent reset
|
|
222
|
+
this.#state = {
|
|
223
|
+
...DEFAULT_STATE,
|
|
224
|
+
error: `State file corrupt: ${backupErr.message}. No backup available. State reset to default.`,
|
|
225
|
+
};
|
|
226
|
+
log('warn:state_reset', { error: backupErr.message });
|
|
74
227
|
}
|
|
75
228
|
this.#loaded = true;
|
|
76
229
|
}
|
|
@@ -79,9 +232,46 @@ class OstackyController {
|
|
|
79
232
|
if (!this.#statePath) return;
|
|
80
233
|
const dir = dirname(this.#statePath);
|
|
81
234
|
mkdirSync(dir, { recursive: true });
|
|
235
|
+
let serialized = safeJsonStringify(this.#state, true);
|
|
236
|
+
if (serialized.length > MAX_STATE_FILE_SIZE) {
|
|
237
|
+
log('warn:state_oversized', { size: serialized.length });
|
|
238
|
+
const trimmed = { ...this.#state, snapshots: { codegraph: null, execution: null } };
|
|
239
|
+
serialized = safeJsonStringify(trimmed, true);
|
|
240
|
+
if (serialized.length > MAX_STATE_FILE_SIZE) {
|
|
241
|
+
log('error:state_too_large_even_after_trim');
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.#state.snapshots = { codegraph: null, execution: null };
|
|
245
|
+
}
|
|
82
246
|
const tmp = this.#statePath + '.tmp.' + process.pid;
|
|
83
|
-
writeFileSync(tmp,
|
|
247
|
+
writeFileSync(tmp, serialized, 'utf8');
|
|
84
248
|
renameSync(tmp, this.#statePath);
|
|
249
|
+
try {
|
|
250
|
+
const backupTmp = this.#statePath + '.backup.tmp.' + process.pid;
|
|
251
|
+
writeFileSync(backupTmp, serialized, 'utf8');
|
|
252
|
+
renameSync(backupTmp, this.#statePath + '.backup');
|
|
253
|
+
} catch {
|
|
254
|
+
/* backup is best-effort */
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Trims old completed tasks when we exceed MAX_TASKS.
|
|
260
|
+
* Keeps the most recent MAX_TASKS entries.
|
|
261
|
+
*/
|
|
262
|
+
#trimTasks() {
|
|
263
|
+
if (!this.#state.tasks) return;
|
|
264
|
+
const entries = Object.entries(this.#state.tasks);
|
|
265
|
+
if (entries.length <= MAX_TASKS) return;
|
|
266
|
+
// Sort by completedAt (desc), keep newest MAX_TASKS
|
|
267
|
+
entries.sort((a, b) => {
|
|
268
|
+
const da = a[1].completedAt || '';
|
|
269
|
+
const db = b[1].completedAt || '';
|
|
270
|
+
return db.localeCompare(da);
|
|
271
|
+
});
|
|
272
|
+
const trimmed = Object.fromEntries(entries.slice(0, MAX_TASKS));
|
|
273
|
+
this.#state.tasks = trimmed;
|
|
274
|
+
log('warn:tasks_trimmed', { before: entries.length, after: MAX_TASKS });
|
|
85
275
|
}
|
|
86
276
|
|
|
87
277
|
#transition(to, changes = {}) {
|
|
@@ -92,66 +282,7 @@ class OstackyController {
|
|
|
92
282
|
}
|
|
93
283
|
|
|
94
284
|
#isAllowedTransition(from, via, choiceOrMode) {
|
|
95
|
-
const
|
|
96
|
-
INTERPRETATION_PENDING: [
|
|
97
|
-
{ to: 'CLARIFICATION_PENDING', via: 'request_clarification' },
|
|
98
|
-
{ to: 'DISCOVERY', via: 'proceed_to_discovery' },
|
|
99
|
-
{ to: 'ROUTE_DECISION_PENDING', via: 'record_discovery' },
|
|
100
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
101
|
-
],
|
|
102
|
-
CLARIFICATION_PENDING: [
|
|
103
|
-
{ to: 'DISCOVERY', via: 'record_clarification' },
|
|
104
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
105
|
-
{ to: 'BLOCKED', via: 'abandon' },
|
|
106
|
-
],
|
|
107
|
-
DISCOVERY: [
|
|
108
|
-
{ to: 'LEVEL_RESOLVED', via: 'record_discovery' },
|
|
109
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
110
|
-
{ to: 'BLOCKED', via: 'abandon' },
|
|
111
|
-
],
|
|
112
|
-
LEVEL_RESOLVED: [
|
|
113
|
-
{ to: 'ROUTE_DECISION_PENDING', via: 'route_decision_pending' },
|
|
114
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
115
|
-
],
|
|
116
|
-
ROUTE_DECISION_PENDING: [
|
|
117
|
-
{ to: 'SPECIFICATION', via: 'consume_route_decision', choice: 'SPEC' },
|
|
118
|
-
{ to: 'EXECUTION_ANALYSIS', via: 'consume_route_decision', choice: 'DIRECT' },
|
|
119
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
120
|
-
],
|
|
121
|
-
SPECIFICATION: [
|
|
122
|
-
{ to: 'EXECUTION_ANALYSIS', via: 'spec_complete' },
|
|
123
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
124
|
-
{ to: 'BLOCKED', via: 'abandon' },
|
|
125
|
-
],
|
|
126
|
-
EXECUTION_ANALYSIS: [
|
|
127
|
-
{ to: 'EXECUTION_DECISION_PENDING', via: 'analysis_complete' },
|
|
128
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
129
|
-
{ to: 'BLOCKED', via: 'abandon' },
|
|
130
|
-
],
|
|
131
|
-
EXECUTION_DECISION_PENDING: [
|
|
132
|
-
{ to: 'EXECUTING_INLINE', via: 'consume_execution_decision', mode: 'INLINE' },
|
|
133
|
-
{ to: 'EXECUTING_SUBAGENTS', via: 'consume_execution_decision', mode: 'SUBAGENT_DRIVEN' },
|
|
134
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
135
|
-
],
|
|
136
|
-
EXECUTING_INLINE: [
|
|
137
|
-
{ to: 'SYNC', via: 'implementation_complete' },
|
|
138
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
139
|
-
],
|
|
140
|
-
EXECUTING_SUBAGENTS: [
|
|
141
|
-
{ to: 'SYNC', via: 'implementation_complete' },
|
|
142
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
143
|
-
],
|
|
144
|
-
BLOCKED: [
|
|
145
|
-
{ to: 'INTERPRETATION_PENDING', via: 'replan' },
|
|
146
|
-
{ to: 'DONE', via: 'abandon' },
|
|
147
|
-
],
|
|
148
|
-
SYNC: [
|
|
149
|
-
{ to: 'DONE', via: 'sync_complete' },
|
|
150
|
-
{ to: 'BLOCKED', via: 'block' },
|
|
151
|
-
],
|
|
152
|
-
DONE: [],
|
|
153
|
-
};
|
|
154
|
-
const transitions = table[from] || [];
|
|
285
|
+
const transitions = TRANSITIONS[from] || [];
|
|
155
286
|
for (const t of transitions) {
|
|
156
287
|
if (t.via !== via) continue;
|
|
157
288
|
if (t.choice !== undefined && t.choice !== choiceOrMode) continue;
|
|
@@ -163,11 +294,7 @@ class OstackyController {
|
|
|
163
294
|
|
|
164
295
|
async startRequest({ requestId, changeId } = {}) {
|
|
165
296
|
this.#load();
|
|
166
|
-
if (
|
|
167
|
-
this.#state.state !== 'INTERPRETATION_PENDING' &&
|
|
168
|
-
this.#state.state !== 'BLOCKED' &&
|
|
169
|
-
this.#state.state !== 'DONE'
|
|
170
|
-
) {
|
|
297
|
+
if (this.#state.state === 'INTERPRETATION_PENDING' && !requestId) {
|
|
171
298
|
return { state: this.#state.state, revision: this.#state.revision, requestId: this.#state.requestId };
|
|
172
299
|
}
|
|
173
300
|
this.#transition('INTERPRETATION_PENDING', {
|
|
@@ -205,8 +332,10 @@ class OstackyController {
|
|
|
205
332
|
this.#load();
|
|
206
333
|
const to = this.#isAllowedTransition(this.#state.state, 'record_discovery');
|
|
207
334
|
if (!to) return { error: `Cannot record discovery from state ${this.#state.state}` };
|
|
208
|
-
if (
|
|
209
|
-
|
|
335
|
+
if (snapshot && safeJsonStringify(snapshot).length > MAX_SNAPSHOT_JSON_LENGTH) {
|
|
336
|
+
return { error: `Snapshot exceeds maximum size of ${MAX_SNAPSHOT_JSON_LENGTH} bytes` };
|
|
337
|
+
}
|
|
338
|
+
this.#transition(to, {
|
|
210
339
|
routeDecisionId: routeDecisionId || 'route-' + Date.now(),
|
|
211
340
|
routeChoice: null,
|
|
212
341
|
snapshots: { ...this.#state.snapshots, codegraph: snapshot || this.#state.snapshots.codegraph },
|
|
@@ -221,17 +350,28 @@ class OstackyController {
|
|
|
221
350
|
};
|
|
222
351
|
}
|
|
223
352
|
|
|
353
|
+
async proceedToRoute() {
|
|
354
|
+
this.#load();
|
|
355
|
+
const to = this.#isAllowedTransition(this.#state.state, 'proceed_to_route');
|
|
356
|
+
if (!to) return { error: `Cannot proceed to route from state ${this.#state.state}` };
|
|
357
|
+
this.#transition(to);
|
|
358
|
+
return { state: this.#state.state, revision: this.#state.revision };
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
async abandon({ reason } = {}) {
|
|
362
|
+
this.#load();
|
|
363
|
+
const to = this.#isAllowedTransition(this.#state.state, 'abandon');
|
|
364
|
+
if (!to) return { error: `Cannot abandon from state ${this.#state.state}` };
|
|
365
|
+
this.#transition(to, { error: reason || 'Abandoned' });
|
|
366
|
+
return { state: this.#state.state, revision: this.#state.revision };
|
|
367
|
+
}
|
|
368
|
+
|
|
224
369
|
async consumeRouteDecision({ decisionId, choice } = {}) {
|
|
225
370
|
this.#load();
|
|
226
371
|
if (this.#state.state !== 'ROUTE_DECISION_PENDING') {
|
|
227
|
-
if (this.#state.routeDecisionId === decisionId && this.#state.routeChoice) {
|
|
228
|
-
return { error: `Route decision ${decisionId} already consumed as ${this.#state.routeChoice}` };
|
|
229
|
-
}
|
|
230
372
|
return { error: `Cannot consume route decision from state ${this.#state.state}` };
|
|
231
373
|
}
|
|
232
374
|
if (this.#state.routeDecisionId !== decisionId) return { error: `Decision ID mismatch` };
|
|
233
|
-
if (choice !== 'SPEC' && choice !== 'DIRECT') return { error: `Invalid choice: ${choice}` };
|
|
234
|
-
if (this.#state.routeChoice) return { error: `Decision already consumed as ${this.#state.routeChoice}` };
|
|
235
375
|
const to = this.#isAllowedTransition(this.#state.state, 'consume_route_decision', choice);
|
|
236
376
|
if (!to) return { error: `Route ${choice} not allowed from ${this.#state.state}` };
|
|
237
377
|
this.#transition(to, { routeChoice: choice });
|
|
@@ -250,7 +390,10 @@ class OstackyController {
|
|
|
250
390
|
this.#load();
|
|
251
391
|
const to = this.#isAllowedTransition(this.#state.state, 'analysis_complete');
|
|
252
392
|
if (!to) return { error: `Cannot record execution analysis from state ${this.#state.state}` };
|
|
253
|
-
|
|
393
|
+
if (snapshot && safeJsonStringify(snapshot).length > MAX_SNAPSHOT_JSON_LENGTH) {
|
|
394
|
+
return { error: `Snapshot exceeds maximum size of ${MAX_SNAPSHOT_JSON_LENGTH} bytes` };
|
|
395
|
+
}
|
|
396
|
+
this.#transition(to, {
|
|
254
397
|
executionDecisionId: executionDecisionId || 'exec-' + Date.now(),
|
|
255
398
|
executionMode: null,
|
|
256
399
|
snapshots: { ...this.#state.snapshots, execution: snapshot || null },
|
|
@@ -265,14 +408,9 @@ class OstackyController {
|
|
|
265
408
|
async consumeExecutionDecision({ decisionId, mode } = {}) {
|
|
266
409
|
this.#load();
|
|
267
410
|
if (this.#state.state !== 'EXECUTION_DECISION_PENDING') {
|
|
268
|
-
if (this.#state.executionDecisionId === decisionId && this.#state.executionMode) {
|
|
269
|
-
return { error: `Execution decision ${decisionId} already consumed as ${this.#state.executionMode}` };
|
|
270
|
-
}
|
|
271
411
|
return { error: `Cannot consume execution decision from state ${this.#state.state}` };
|
|
272
412
|
}
|
|
273
413
|
if (this.#state.executionDecisionId !== decisionId) return { error: `Decision ID mismatch` };
|
|
274
|
-
if (mode !== 'INLINE' && mode !== 'SUBAGENT_DRIVEN') return { error: `Invalid mode: ${mode}` };
|
|
275
|
-
if (this.#state.executionMode) return { error: `Decision already consumed as ${this.#state.executionMode}` };
|
|
276
414
|
const to = this.#isAllowedTransition(this.#state.state, 'consume_execution_decision', mode);
|
|
277
415
|
if (!to) return { error: `Mode ${mode} not allowed from ${this.#state.state}` };
|
|
278
416
|
this.#transition(to, { executionMode: mode });
|
|
@@ -322,7 +460,7 @@ class OstackyController {
|
|
|
322
460
|
|
|
323
461
|
async getState() {
|
|
324
462
|
this.#load();
|
|
325
|
-
return
|
|
463
|
+
return structuredClone(this.#state);
|
|
326
464
|
}
|
|
327
465
|
|
|
328
466
|
async getTasks() {
|
|
@@ -330,6 +468,14 @@ class OstackyController {
|
|
|
330
468
|
return { ...this.#state.tasks };
|
|
331
469
|
}
|
|
332
470
|
|
|
471
|
+
async getAvailableTransitions() {
|
|
472
|
+
this.#load();
|
|
473
|
+
return {
|
|
474
|
+
currentState: this.#state.state,
|
|
475
|
+
transitions: TRANSITIONS[this.#state.state] || [],
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
|
|
333
479
|
/**
|
|
334
480
|
* Validates an edit against the current file content.
|
|
335
481
|
* Returns one of: EDITABLE, ALREADY_APPLIED, CONFLICT.
|
|
@@ -401,6 +547,7 @@ class OstackyController {
|
|
|
401
547
|
if (!this.#state.fileFingerprints) this.#state.fileFingerprints = {};
|
|
402
548
|
this.#state.fileFingerprints[filePath] = fileHash;
|
|
403
549
|
}
|
|
550
|
+
this.#trimTasks();
|
|
404
551
|
this.#persist();
|
|
405
552
|
return {
|
|
406
553
|
taskId,
|
|
@@ -409,30 +556,62 @@ class OstackyController {
|
|
|
409
556
|
.length,
|
|
410
557
|
};
|
|
411
558
|
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Public flush — force-persists current state to disk.
|
|
562
|
+
* Used by graceful shutdown (private fields not accessible from outside).
|
|
563
|
+
*/
|
|
564
|
+
flush() {
|
|
565
|
+
this.#persist();
|
|
566
|
+
}
|
|
412
567
|
}
|
|
413
568
|
|
|
414
569
|
const statePath = process.env.OSTACKY_STATE_PATH || '.opencode/ostacky-state.json';
|
|
415
570
|
const controller = new OstackyController({ statePath });
|
|
416
571
|
|
|
572
|
+
/**
|
|
573
|
+
* Wraps an async tool handler to ALWAYS return a response (even on error).
|
|
574
|
+
* Without this, an unhandled exception in any tool handler leaves the LLM
|
|
575
|
+
* waiting forever — the root cause of agent freezes.
|
|
576
|
+
*/
|
|
577
|
+
function safeHandler(fn) {
|
|
578
|
+
return async (params) => {
|
|
579
|
+
lastToolActivity = Date.now();
|
|
580
|
+
try {
|
|
581
|
+
const result = await fn(params);
|
|
582
|
+
return { content: [{ type: 'text', text: safeJsonStringify(result) }] };
|
|
583
|
+
} catch (error) {
|
|
584
|
+
log('tool:error', {
|
|
585
|
+
name: fn.name || 'anonymous',
|
|
586
|
+
error: error.message,
|
|
587
|
+
stack: error.stack,
|
|
588
|
+
});
|
|
589
|
+
return {
|
|
590
|
+
content: [{ type: 'text', text: safeJsonStringify({ error: error.message }) }],
|
|
591
|
+
isError: true,
|
|
592
|
+
};
|
|
593
|
+
}
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
|
|
417
597
|
const server = new McpServer({
|
|
418
598
|
name: 'ostacky-controller',
|
|
419
|
-
version: '0.
|
|
599
|
+
version: '0.6.0',
|
|
420
600
|
});
|
|
421
601
|
|
|
422
602
|
server.registerTool(
|
|
423
603
|
'start_request',
|
|
424
604
|
{
|
|
425
|
-
description: 'Start or
|
|
605
|
+
description: 'Start or reset a new request. Can be called from ANY state — resets state machine. Call this first.',
|
|
426
606
|
inputSchema: z.object({
|
|
427
607
|
requestId: z.string().optional().describe('Unique request ID'),
|
|
428
608
|
changeId: z.string().optional().describe('Optional change ID for OpenSpec tracking'),
|
|
429
609
|
}),
|
|
430
610
|
},
|
|
431
|
-
async ({ requestId, changeId }) => {
|
|
611
|
+
safeHandler(async ({ requestId, changeId }) => {
|
|
432
612
|
log('tool:start_request');
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
}
|
|
613
|
+
return await controller.startRequest({ requestId, changeId });
|
|
614
|
+
})
|
|
436
615
|
);
|
|
437
616
|
|
|
438
617
|
server.registerTool(
|
|
@@ -443,11 +622,10 @@ server.registerTool(
|
|
|
443
622
|
question: z.string().optional().describe('The clarification question'),
|
|
444
623
|
}),
|
|
445
624
|
},
|
|
446
|
-
async ({ question }) => {
|
|
625
|
+
safeHandler(async ({ question }) => {
|
|
447
626
|
log('tool:request_clarification');
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
627
|
+
return await controller.requestClarification({ question });
|
|
628
|
+
})
|
|
451
629
|
);
|
|
452
630
|
|
|
453
631
|
server.registerTool(
|
|
@@ -456,28 +634,26 @@ server.registerTool(
|
|
|
456
634
|
description: 'Record that clarification was answered. Transitions to DISCOVERY.',
|
|
457
635
|
inputSchema: z.object({}),
|
|
458
636
|
},
|
|
459
|
-
async () => {
|
|
637
|
+
safeHandler(async () => {
|
|
460
638
|
log('tool:record_clarification');
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
}
|
|
639
|
+
return await controller.recordClarification();
|
|
640
|
+
})
|
|
464
641
|
);
|
|
465
642
|
|
|
466
643
|
server.registerTool(
|
|
467
644
|
'record_discovery',
|
|
468
645
|
{
|
|
469
|
-
description: 'Record discovery complete with level classification.
|
|
646
|
+
description: 'Record discovery complete with level classification. From INTERPRETATION_PENDING goes to ROUTE_DECISION_PENDING. From DISCOVERY goes to LEVEL_RESOLVED.',
|
|
470
647
|
inputSchema: z.object({
|
|
471
648
|
level: z.enum(['0', '0+1', '1+']).describe('Impact level'),
|
|
472
649
|
routeDecisionId: z.string().optional().describe('Unique route decision ID'),
|
|
473
650
|
snapshot: z.any().optional().describe('Optional CodeGraph snapshot'),
|
|
474
651
|
}),
|
|
475
652
|
},
|
|
476
|
-
async ({ level, routeDecisionId, snapshot }) => {
|
|
653
|
+
safeHandler(async ({ level, routeDecisionId, snapshot }) => {
|
|
477
654
|
log('tool:record_discovery', { level });
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
}
|
|
655
|
+
return await controller.recordDiscovery({ level, routeDecisionId, snapshot });
|
|
656
|
+
})
|
|
481
657
|
);
|
|
482
658
|
|
|
483
659
|
server.registerTool(
|
|
@@ -489,11 +665,10 @@ server.registerTool(
|
|
|
489
665
|
choice: z.enum(['SPEC', 'DIRECT']).describe('Route choice'),
|
|
490
666
|
}),
|
|
491
667
|
},
|
|
492
|
-
async ({ decisionId, choice }) => {
|
|
668
|
+
safeHandler(async ({ decisionId, choice }) => {
|
|
493
669
|
log('tool:consume_route_decision', { choice });
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
}
|
|
670
|
+
return await controller.consumeRouteDecision({ decisionId, choice });
|
|
671
|
+
})
|
|
497
672
|
);
|
|
498
673
|
|
|
499
674
|
server.registerTool(
|
|
@@ -502,11 +677,10 @@ server.registerTool(
|
|
|
502
677
|
description: 'Mark specification phase as complete. Transitions to EXECUTION_ANALYSIS.',
|
|
503
678
|
inputSchema: z.object({}),
|
|
504
679
|
},
|
|
505
|
-
async () => {
|
|
680
|
+
safeHandler(async () => {
|
|
506
681
|
log('tool:spec_complete');
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
}
|
|
682
|
+
return await controller.specComplete();
|
|
683
|
+
})
|
|
510
684
|
);
|
|
511
685
|
|
|
512
686
|
server.registerTool(
|
|
@@ -518,11 +692,10 @@ server.registerTool(
|
|
|
518
692
|
snapshot: z.any().optional().describe('Execution analysis snapshot'),
|
|
519
693
|
}),
|
|
520
694
|
},
|
|
521
|
-
async ({ executionDecisionId, snapshot }) => {
|
|
695
|
+
safeHandler(async ({ executionDecisionId, snapshot }) => {
|
|
522
696
|
log('tool:record_execution_analysis');
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
}
|
|
697
|
+
return await controller.recordExecutionAnalysis({ executionDecisionId, snapshot });
|
|
698
|
+
})
|
|
526
699
|
);
|
|
527
700
|
|
|
528
701
|
server.registerTool(
|
|
@@ -534,11 +707,10 @@ server.registerTool(
|
|
|
534
707
|
mode: z.enum(['INLINE', 'SUBAGENT_DRIVEN']).describe('Execution mode'),
|
|
535
708
|
}),
|
|
536
709
|
},
|
|
537
|
-
async ({ decisionId, mode }) => {
|
|
710
|
+
safeHandler(async ({ decisionId, mode }) => {
|
|
538
711
|
log('tool:consume_execution_decision', { mode });
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
}
|
|
712
|
+
return await controller.consumeExecutionDecision({ decisionId, mode });
|
|
713
|
+
})
|
|
542
714
|
);
|
|
543
715
|
|
|
544
716
|
server.registerTool(
|
|
@@ -547,11 +719,10 @@ server.registerTool(
|
|
|
547
719
|
description: 'Mark implementation as complete. Transitions to SYNC.',
|
|
548
720
|
inputSchema: z.object({}),
|
|
549
721
|
},
|
|
550
|
-
async () => {
|
|
722
|
+
safeHandler(async () => {
|
|
551
723
|
log('tool:implementation_complete');
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
}
|
|
724
|
+
return await controller.implementationComplete();
|
|
725
|
+
})
|
|
555
726
|
);
|
|
556
727
|
|
|
557
728
|
server.registerTool(
|
|
@@ -560,11 +731,10 @@ server.registerTool(
|
|
|
560
731
|
description: 'Mark sync as complete. Transitions to DONE.',
|
|
561
732
|
inputSchema: z.object({}),
|
|
562
733
|
},
|
|
563
|
-
async () => {
|
|
734
|
+
safeHandler(async () => {
|
|
564
735
|
log('tool:sync_complete');
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
}
|
|
736
|
+
return await controller.syncComplete();
|
|
737
|
+
})
|
|
568
738
|
);
|
|
569
739
|
|
|
570
740
|
server.registerTool(
|
|
@@ -575,11 +745,10 @@ server.registerTool(
|
|
|
575
745
|
reason: z.string().optional().describe('Reason for blocking'),
|
|
576
746
|
}),
|
|
577
747
|
},
|
|
578
|
-
async ({ reason }) => {
|
|
748
|
+
safeHandler(async ({ reason }) => {
|
|
579
749
|
log('tool:block');
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
}
|
|
750
|
+
return await controller.block({ reason });
|
|
751
|
+
})
|
|
583
752
|
);
|
|
584
753
|
|
|
585
754
|
server.registerTool(
|
|
@@ -590,11 +759,54 @@ server.registerTool(
|
|
|
590
759
|
reason: z.string().optional().describe('Reason for replanning'),
|
|
591
760
|
}),
|
|
592
761
|
},
|
|
593
|
-
async ({ reason }) => {
|
|
762
|
+
safeHandler(async ({ reason }) => {
|
|
594
763
|
log('tool:replan');
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
764
|
+
return await controller.replan({ reason });
|
|
765
|
+
})
|
|
766
|
+
);
|
|
767
|
+
|
|
768
|
+
server.registerTool(
|
|
769
|
+
'proceed_to_route',
|
|
770
|
+
{
|
|
771
|
+
description: 'Proceed from LEVEL_RESOLVED to ROUTE_DECISION_PENDING after discovery is confirmed.',
|
|
772
|
+
inputSchema: z.object({}),
|
|
773
|
+
},
|
|
774
|
+
safeHandler(async () => {
|
|
775
|
+
log('tool:proceed_to_route');
|
|
776
|
+
return await controller.proceedToRoute();
|
|
777
|
+
})
|
|
778
|
+
);
|
|
779
|
+
|
|
780
|
+
server.registerTool(
|
|
781
|
+
'abandon',
|
|
782
|
+
{
|
|
783
|
+
description: 'Abandon the current request. Transitions to BLOCKED from most states, or to DONE from BLOCKED.',
|
|
784
|
+
inputSchema: z.object({
|
|
785
|
+
reason: z.string().optional().describe('Reason for abandoning'),
|
|
786
|
+
}),
|
|
787
|
+
},
|
|
788
|
+
safeHandler(async ({ reason }) => {
|
|
789
|
+
log('tool:abandon');
|
|
790
|
+
return await controller.abandon({ reason });
|
|
791
|
+
})
|
|
792
|
+
);
|
|
793
|
+
|
|
794
|
+
server.registerTool(
|
|
795
|
+
'ping',
|
|
796
|
+
{
|
|
797
|
+
description: 'Health check — returns pong if controller is alive. Use this to verify controller availability before making other calls.',
|
|
798
|
+
inputSchema: z.object({}),
|
|
799
|
+
},
|
|
800
|
+
safeHandler(async () => {
|
|
801
|
+
return {
|
|
802
|
+
pong: true,
|
|
803
|
+
state: await controller.getState().then(s => ({
|
|
804
|
+
state: s.state,
|
|
805
|
+
revision: s.revision,
|
|
806
|
+
requestId: s.requestId,
|
|
807
|
+
})),
|
|
808
|
+
};
|
|
809
|
+
})
|
|
598
810
|
);
|
|
599
811
|
|
|
600
812
|
server.registerTool(
|
|
@@ -603,10 +815,9 @@ server.registerTool(
|
|
|
603
815
|
description: 'Get the current controller state (reads persistent store).',
|
|
604
816
|
inputSchema: z.object({}),
|
|
605
817
|
},
|
|
606
|
-
async () => {
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
}
|
|
818
|
+
safeHandler(async () => {
|
|
819
|
+
return await controller.getState();
|
|
820
|
+
})
|
|
610
821
|
);
|
|
611
822
|
|
|
612
823
|
server.registerTool(
|
|
@@ -615,10 +826,50 @@ server.registerTool(
|
|
|
615
826
|
description: 'Get current task states.',
|
|
616
827
|
inputSchema: z.object({}),
|
|
617
828
|
},
|
|
618
|
-
async () => {
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
829
|
+
safeHandler(async () => {
|
|
830
|
+
return await controller.getTasks();
|
|
831
|
+
})
|
|
832
|
+
);
|
|
833
|
+
|
|
834
|
+
server.registerTool(
|
|
835
|
+
'get_available_transitions',
|
|
836
|
+
{
|
|
837
|
+
description: 'Get valid transitions from current state. Useful for debugging state machine issues.',
|
|
838
|
+
inputSchema: z.object({}),
|
|
839
|
+
},
|
|
840
|
+
safeHandler(async () => {
|
|
841
|
+
return await controller.getAvailableTransitions();
|
|
842
|
+
})
|
|
843
|
+
);
|
|
844
|
+
|
|
845
|
+
server.registerTool(
|
|
846
|
+
'check_pending_state',
|
|
847
|
+
{
|
|
848
|
+
description:
|
|
849
|
+
'Check if agent is in a pending state waiting for user input. ' +
|
|
850
|
+
'MUST be called before ANY tool call when controller is available. ' +
|
|
851
|
+
'Returns ALLOW or BLOCKED with reason. ' +
|
|
852
|
+
'EXCEPTION: controller tools (consume_route_decision, consume_execution_decision, ' +
|
|
853
|
+
'record_clarification, abandon) are ALWAYS allowed — they unlock the state.',
|
|
854
|
+
inputSchema: z.object({}),
|
|
855
|
+
},
|
|
856
|
+
safeHandler(async () => {
|
|
857
|
+
const state = await controller.getState();
|
|
858
|
+
const pendingStates = [
|
|
859
|
+
'CLARIFICATION_PENDING',
|
|
860
|
+
'ROUTE_DECISION_PENDING',
|
|
861
|
+
'EXECUTION_DECISION_PENDING',
|
|
862
|
+
];
|
|
863
|
+
if (pendingStates.includes(state.state)) {
|
|
864
|
+
return {
|
|
865
|
+
status: 'BLOCKED',
|
|
866
|
+
state: state.state,
|
|
867
|
+
revision: state.revision,
|
|
868
|
+
reason: `Cannot execute tools while in ${state.state}. Wait for user response first.`,
|
|
869
|
+
};
|
|
870
|
+
}
|
|
871
|
+
return { status: 'ALLOW', state: state.state, revision: state.revision };
|
|
872
|
+
})
|
|
622
873
|
);
|
|
623
874
|
|
|
624
875
|
server.registerTool(
|
|
@@ -633,12 +884,13 @@ server.registerTool(
|
|
|
633
884
|
newString: z.string().describe('The replacement string.'),
|
|
634
885
|
content: z
|
|
635
886
|
.string()
|
|
636
|
-
.
|
|
637
|
-
|
|
887
|
+
.describe(
|
|
888
|
+
'REQUIRED — The current file content. Read the file first with Read tool, then pass the full content here.'
|
|
889
|
+
),
|
|
638
890
|
taskId: z.string().optional().describe('Optional task ID for tracking.'),
|
|
639
891
|
}),
|
|
640
892
|
},
|
|
641
|
-
async ({ oldString, newString, content, taskId }) => {
|
|
893
|
+
safeHandler(async ({ oldString, newString, content, taskId }) => {
|
|
642
894
|
log('tool:validate_edit', {
|
|
643
895
|
taskId,
|
|
644
896
|
oldLen: oldString?.length,
|
|
@@ -647,20 +899,12 @@ server.registerTool(
|
|
|
647
899
|
});
|
|
648
900
|
if (typeof content !== 'string' || typeof oldString !== 'string' || typeof newString !== 'string') {
|
|
649
901
|
return {
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
type: 'text',
|
|
653
|
-
text: JSON.stringify({
|
|
654
|
-
outcome: 'CONFLICT',
|
|
655
|
-
reason: 'Missing required fields: content, oldString, and newString are all required. Read the file first, then pass content to validate_edit.',
|
|
656
|
-
}),
|
|
657
|
-
},
|
|
658
|
-
],
|
|
902
|
+
outcome: 'CONFLICT',
|
|
903
|
+
reason: 'Missing required fields: content, oldString, and newString are all required. Read the file first, then pass content to validate_edit.',
|
|
659
904
|
};
|
|
660
905
|
}
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
}
|
|
906
|
+
return await controller.validateEdit({ oldString, newString, content, taskId });
|
|
907
|
+
})
|
|
664
908
|
);
|
|
665
909
|
|
|
666
910
|
server.registerTool(
|
|
@@ -675,16 +919,63 @@ server.registerTool(
|
|
|
675
919
|
fileHash: z.string().optional().describe('Optional SHA-256 hash of the file after modification.'),
|
|
676
920
|
}),
|
|
677
921
|
},
|
|
678
|
-
async ({ taskId, filePath, fileHash }) => {
|
|
922
|
+
safeHandler(async ({ taskId, filePath, fileHash }) => {
|
|
679
923
|
log('tool:complete_task', { taskId, filePath });
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
}
|
|
924
|
+
return await controller.completeTask({ taskId, filePath, fileHash });
|
|
925
|
+
})
|
|
683
926
|
);
|
|
684
927
|
|
|
928
|
+
/**
|
|
929
|
+
* Graceful shutdown: clean up tmp files and flush state.
|
|
930
|
+
*/
|
|
931
|
+
function setupGracefulShutdown(ctrl) {
|
|
932
|
+
const shutdown = (signal) => {
|
|
933
|
+
log('shutdown', { signal });
|
|
934
|
+
// Final persist attempt (flush via public method, sync inside)
|
|
935
|
+
try {
|
|
936
|
+
if (ctrl) ctrl.flush();
|
|
937
|
+
} catch {
|
|
938
|
+
/* best-effort */
|
|
939
|
+
}
|
|
940
|
+
// Clean up own tmp files
|
|
941
|
+
try {
|
|
942
|
+
cleanupTmpFiles(statePath);
|
|
943
|
+
} catch {
|
|
944
|
+
/* best-effort */
|
|
945
|
+
}
|
|
946
|
+
process.exit(signal === 'SIGINT' ? 130 : 0);
|
|
947
|
+
};
|
|
948
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
949
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
950
|
+
process.on('SIGHUP', () => shutdown('SIGHUP'));
|
|
951
|
+
process.on('SIGPIPE', () => shutdown('SIGPIPE'));
|
|
952
|
+
// Prevent unhandled rejections from silently killing the server
|
|
953
|
+
process.on('unhandledRejection', (reason) => {
|
|
954
|
+
log('unhandled_rejection', { reason: String(reason) });
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* Watchdog that forces process restart if controller stops responding.
|
|
960
|
+
* This prevents the agent from hanging when the MCP server is stuck.
|
|
961
|
+
*/
|
|
962
|
+
function setupWatchdog() {
|
|
963
|
+
setInterval(() => {
|
|
964
|
+
const idleMs = Date.now() - lastToolActivity;
|
|
965
|
+
if (idleMs > WATCHDOG_TIMEOUT_MS) {
|
|
966
|
+
log('watchdog:timeout', { idleMs, threshold: WATCHDOG_TIMEOUT_MS });
|
|
967
|
+
process.exit(1);
|
|
968
|
+
}
|
|
969
|
+
}, WATCHDOG_CHECK_INTERVAL_MS);
|
|
970
|
+
}
|
|
971
|
+
|
|
685
972
|
async function main() {
|
|
686
973
|
log('Starting ostacky-controller MCP...');
|
|
687
974
|
log('State path:', { path: statePath });
|
|
975
|
+
// Clean up stale tmp files from previous runs
|
|
976
|
+
cleanupTmpFiles(statePath);
|
|
977
|
+
setupGracefulShutdown(controller);
|
|
978
|
+
setupWatchdog();
|
|
688
979
|
const transport = new StdioServerTransport();
|
|
689
980
|
await server.connect(transport);
|
|
690
981
|
log('ostacky-controller connected and ready');
|