@astrosheep/keiyaku 0.1.18 → 0.1.20
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/build/.tsbuildinfo +1 -0
- package/build/agents/round-runner.js +22 -2
- package/build/common/constants.js +0 -1
- package/build/common/errors.js +7 -47
- package/build/config/term-presets.js +6 -6
- package/build/handlers/close.js +3 -3
- package/build/handlers/shared.js +1 -1
- package/build/utils/debug-log.js +3 -0
- package/build/utils/git-ops.js +30 -1
- package/build/utils/text-utils.js +13 -3
- package/build/workflow/contract.js +11 -2
- package/build/workflow/drive.js +3 -0
- package/build/workflow/present.js +63 -18
- package/build/workflow/response-builders.js +19 -5
- package/build/workflow/round.js +12 -6
- package/build/workflow/start.js +24 -33
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2022.full.d.ts","../node_modules/zod/v3/helpers/typealiases.d.cts","../node_modules/zod/v3/helpers/util.d.cts","../node_modules/zod/v3/zoderror.d.cts","../node_modules/zod/v3/locales/en.d.cts","../node_modules/zod/v3/errors.d.cts","../node_modules/zod/v3/helpers/parseutil.d.cts","../node_modules/zod/v3/helpers/enumutil.d.cts","../node_modules/zod/v3/helpers/errorutil.d.cts","../node_modules/zod/v3/helpers/partialutil.d.cts","../node_modules/zod/v3/standard-schema.d.cts","../node_modules/zod/v3/types.d.cts","../node_modules/zod/v3/external.d.cts","../node_modules/zod/v3/index.d.cts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-ca.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/hy.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/uz.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-cn.d.cts","../node_modules/zod/v4/locales/zh-tw.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema-processors.d.cts","../node_modules/zod/v4/core/json-schema-generator.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.d.ts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/from-json-schema.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/v4/classic/index.d.cts","../node_modules/zod/v4/index.d.cts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/auth/types.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/types.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/transport.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/types.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/responsemessage.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.d.ts","../node_modules/json-schema-typed/draft_2020_12.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/validation/types.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/shared/uritemplate.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/mcp-server.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/webstandardstreamablehttp.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/streamablehttp.d.ts","../node_modules/@modelcontextprotocol/sdk/dist/esm/server/express.d.ts","../node_modules/zod/index.d.cts","../src/types/tooling.ts","../src/config/term-presets.ts","../src/common/constants.ts","../src/common/errors.ts","../node_modules/simple-git/dist/src/lib/tasks/diff-name-status.d.ts","../node_modules/simple-git/dist/src/lib/tasks/task.d.ts","../node_modules/simple-git/dist/src/lib/types/tasks.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-error.d.ts","../node_modules/simple-git/dist/src/lib/types/handlers.d.ts","../node_modules/simple-git/dist/src/lib/types/index.d.ts","../node_modules/simple-git/dist/src/lib/tasks/log.d.ts","../node_modules/simple-git/dist/typings/response.d.ts","../node_modules/simple-git/dist/src/lib/responses/getremotesummary.d.ts","../node_modules/simple-git/dist/src/lib/args/pathspec.d.ts","../node_modules/simple-git/dist/src/lib/tasks/apply-patch.d.ts","../node_modules/simple-git/dist/src/lib/tasks/check-is-repo.d.ts","../node_modules/simple-git/dist/src/lib/tasks/clean.d.ts","../node_modules/simple-git/dist/src/lib/tasks/clone.d.ts","../node_modules/simple-git/dist/src/lib/tasks/config.d.ts","../node_modules/simple-git/dist/src/lib/tasks/count-objects.d.ts","../node_modules/simple-git/dist/src/lib/tasks/grep.d.ts","../node_modules/simple-git/dist/src/lib/tasks/reset.d.ts","../node_modules/simple-git/dist/src/lib/tasks/version.d.ts","../node_modules/simple-git/dist/typings/types.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-construct-error.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-plugin-error.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-response-error.d.ts","../node_modules/simple-git/dist/src/lib/errors/task-configuration-error.d.ts","../node_modules/simple-git/dist/typings/errors.d.ts","../node_modules/simple-git/dist/typings/simple-git.d.ts","../node_modules/simple-git/dist/typings/index.d.ts","../src/utils/debug-log.ts","../src/utils/git-ops.ts","../src/utils/git-diff.ts","../src/utils/git.ts","../src/workflow/oath.ts","../src/workflow/contract.ts","../src/utils/keiyaku-document.ts","../src/utils/text-utils.ts","../src/utils/schema-utils.ts","../src/workflow/prompts.ts","../src/utils/trace.ts","../src/workflow/round-summary.ts","../src/types/workflow.ts","../src/agents/string-tail-buffer.ts","../src/agents/types.ts","../src/agents/process-runner.ts","../src/agents/codex-exec.ts","../src/agents/gemini-exec.ts","../src/agents/index.ts","../src/agents/selector.ts","../src/agents/round-runner.ts","../src/workflow/round.ts","../src/workflow/start.ts","../src/workflow/response-builders.ts","../src/handlers/shared.ts","../src/handlers/start.ts","../src/workflow/drive.ts","../src/handlers/drive.ts","../src/workflow/ask.ts","../src/handlers/ask.ts","../src/workflow/present.ts","../src/handlers/close.ts","../src/handlers/help.ts","../src/handlers/index.ts","../src/index.ts","../src/utils/keiyaku-document.test.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/blob.d.ts","../node_modules/@types/node/web-globals/console.d.ts","../node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/encoding.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/undici-types/utility.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client-stats.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/h2c-client.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-call-history.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/snapshot-agent.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cache-interceptor.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/importmeta.d.ts","../node_modules/@types/node/web-globals/messaging.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/performance.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/web-globals/streams.d.ts","../node_modules/@types/node/web-globals/timers.d.ts","../node_modules/@types/node/web-globals/url.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/inspector/promises.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/path/posix.d.ts","../node_modules/@types/node/path/win32.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/quic.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/test/reporters.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts"],"fileIdsList":[[146,159,161,164,246,308,316,320,323,325,326,327,339],[146,159,162,171,246,308,316,320,323,325,326,327,339],[146,159,163,164,168,246,308,316,320,323,325,326,327,339],[159,246,308,316,320,323,325,326,327,339],[246,308,316,320,323,325,326,327,339],[146,159,164,166,167,246,308,316,320,323,325,326,327,339],[146,159,160,162,164,168,169,170,246,308,316,320,323,325,326,327,339],[159,160,246,308,316,320,323,325,326,327,339,344],[158,159,160,173,246,308,316,320,322,323,325,326,327,339],[158,159,160,246,308,316,320,323,325,326,327,339],[78,145,246,308,316,320,323,325,326,327,339],[146,158,159,160,162,163,246,308,316,320,323,325,326,327,339],[157,158,246,308,316,320,323,325,326,327,339],[165,246,308,316,320,323,325,326,327,339],[246,305,306,308,316,320,323,325,326,327,339],[246,307,308,316,320,323,325,326,327,339],[308,316,320,323,325,326,327,339],[246,308,316,320,323,325,326,327,339,347],[246,308,309,314,316,319,320,323,325,326,327,329,339,344,356],[246,308,309,310,316,319,320,323,325,326,327,339],[246,308,311,316,320,323,325,326,327,339,357],[246,308,312,313,316,320,323,325,326,327,330,339],[246,308,313,316,320,323,325,326,327,339,344,353],[246,308,314,316,319,320,323,325,326,327,329,339],[246,307,308,315,316,320,323,325,326,327,339],[246,308,316,317,320,323,325,326,327,339],[246,308,316,318,319,320,323,325,326,327,339],[246,307,308,316,319,320,323,325,326,327,339],[246,308,316,319,320,321,323,325,326,327,339,344,356],[246,308,316,319,320,321,323,325,326,327,339,344,347],[246,295,308,316,319,320,322,323,325,326,327,329,339,344,356],[246,308,316,319,320,322,323,325,326,327,329,339,344,353,356],[246,308,316,320,322,323,324,325,326,327,339,344,353,356],[244,245,246,247,248,249,250,251,252,253,254,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363],[246,308,316,319,320,323,325,326,327,339],[246,308,316,320,323,325,327,339],[246,308,316,320,323,325,326,327,328,339,356],[246,308,316,319,320,323,325,326,327,329,339,344],[246,308,316,320,323,325,326,327,330,339],[246,308,316,320,323,325,326,327,331,339],[246,308,316,319,320,323,325,326,327,334,339],[246,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363],[246,308,316,320,323,325,326,327,336,339],[246,308,316,320,323,325,326,327,337,339],[246,308,313,316,320,323,325,326,327,329,339,347],[246,308,316,319,320,323,325,326,327,339,340],[246,308,316,320,323,325,326,327,339,341,357,360],[246,308,316,319,320,323,325,326,327,339,344,346,347],[246,308,316,320,323,325,326,327,339,345,347],[246,308,316,320,323,325,326,327,339,347,357],[246,308,316,320,323,325,326,327,339,348],[246,305,308,316,320,323,325,326,327,339,344,350],[246,308,316,320,323,325,326,327,339,344,349],[246,308,316,319,320,323,325,326,327,339,351,352],[246,308,316,320,323,325,326,327,339,351,352],[246,308,313,316,320,323,325,326,327,329,339,344,353],[246,308,316,320,323,325,326,327,339,354],[246,308,316,320,323,325,326,327,329,339,355],[246,308,316,320,322,323,325,326,327,337,339,356],[246,308,316,320,323,325,326,327,339,357,358],[246,308,313,316,320,323,325,326,327,339,358],[246,308,316,320,323,325,326,327,339,344,359],[246,308,316,320,323,325,326,327,328,339,360],[246,308,316,320,323,325,326,327,339,361],[246,308,311,316,320,323,325,326,327,339],[246,308,313,316,320,323,325,326,327,339],[246,308,316,320,323,325,326,327,339,357],[246,295,308,316,320,323,325,326,327,339],[246,308,316,320,323,325,326,327,339,356],[246,308,316,320,323,325,326,327,339,362],[246,308,316,320,323,325,326,327,334,339],[246,308,316,320,323,325,326,327,339,352],[246,295,308,316,319,320,321,323,325,326,327,334,339,344,347,356,359,360,362],[246,308,316,320,323,325,326,327,339,344,363],[184,186,246,308,316,320,323,325,326,327,339],[186,246,308,316,320,323,325,326,327,339],[184,246,308,316,320,323,325,326,327,339],[182,186,207,246,308,316,320,323,325,326,327,339],[182,186,246,308,316,320,323,325,326,327,339],[207,246,308,316,320,323,325,326,327,339],[186,207,246,308,316,320,323,325,326,327,339],[183,185,246,308,309,316,320,323,325,326,327,339],[184,201,202,203,204,246,308,316,320,323,325,326,327,339],[188,200,205,206,246,308,316,320,323,325,326,327,339],[181,187,246,308,316,320,323,325,326,327,339],[188,200,205,246,308,316,320,323,325,326,327,339],[181,186,187,189,190,191,192,193,194,195,196,197,198,199,246,308,316,320,323,325,326,327,339],[246,261,264,267,268,308,316,320,323,325,326,327,339,356],[246,264,308,316,320,323,325,326,327,339,344,356],[246,264,268,308,316,320,323,325,326,327,339,356],[246,308,316,320,323,325,326,327,339,344],[246,258,308,316,320,323,325,326,327,339],[246,262,308,316,320,323,325,326,327,339],[246,260,261,264,308,316,320,323,325,326,327,339,356],[246,308,316,320,323,325,326,327,329,339,353],[246,308,316,320,323,325,326,327,339,364],[246,258,308,316,320,323,325,326,327,339,364],[246,260,264,308,316,320,323,325,326,327,329,339,356],[246,255,256,257,259,263,308,316,319,320,323,325,326,327,339,344,356],[246,264,272,280,308,316,320,323,325,326,327,339],[246,256,262,308,316,320,323,325,326,327,339],[246,264,289,290,308,316,320,323,325,326,327,339],[246,256,259,264,308,316,320,323,325,326,327,339,347,356,364],[246,264,308,316,320,323,325,326,327,339],[246,260,264,308,316,320,323,325,326,327,339,356],[246,255,308,316,320,323,325,326,327,339],[246,258,259,260,262,263,264,265,266,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,290,291,292,293,294,308,316,320,323,325,326,327,339],[246,264,282,285,308,316,320,323,325,326,327,339],[246,264,272,273,274,308,316,320,323,325,326,327,339],[246,262,264,273,275,308,316,320,323,325,326,327,339],[246,263,308,316,320,323,325,326,327,339],[246,256,258,264,308,316,320,323,325,326,327,339],[246,264,268,273,275,308,316,320,323,325,326,327,339],[246,268,308,316,320,323,325,326,327,339],[246,262,264,267,308,316,320,323,325,326,327,339,356],[246,256,260,264,272,308,316,320,323,325,326,327,339],[246,264,282,308,316,320,323,325,326,327,339],[246,275,308,316,320,323,325,326,327,339],[246,258,264,289,308,316,320,323,325,326,327,339,347,362,364],[155,246,308,316,320,323,325,326,327,339],[68,69,246,308,316,320,323,325,326,327,339],[66,67,68,70,71,76,246,308,316,320,323,325,326,327,339],[67,68,246,308,316,320,323,325,326,327,339],[76,246,308,316,320,323,325,326,327,339],[77,246,308,316,320,323,325,326,327,339],[68,246,308,316,320,323,325,326,327,339],[66,67,68,71,72,73,74,75,246,308,316,320,323,325,326,327,339],[66,67,78,246,308,316,320,323,325,326,327,339],[145,246,308,316,320,323,325,326,327,339],[145,149,246,308,316,320,323,325,326,327,339],[140,143,145,147,148,149,150,151,152,153,154,246,308,316,320,323,325,326,327,339],[79,81,149,246,308,316,320,323,325,326,327,339],[145,147,246,308,316,320,323,325,326,327,339],[80,145,148,246,308,316,320,323,325,326,327,339],[81,83,85,86,87,88,246,308,316,320,323,325,326,327,339],[83,85,87,88,246,308,316,320,323,325,326,327,339],[83,85,87,246,308,316,320,323,325,326,327,339],[80,83,85,86,88,246,308,316,320,323,325,326,327,339],[79,81,82,83,84,85,86,87,88,89,90,140,141,142,143,144,246,308,316,320,323,325,326,327,339],[79,81,82,85,246,308,316,320,323,325,326,327,339],[81,82,85,246,308,316,320,323,325,326,327,339],[85,88,246,308,316,320,323,325,326,327,339],[79,80,82,83,84,86,87,88,246,308,316,320,323,325,326,327,339],[79,80,81,85,145,246,308,316,320,323,325,326,327,339],[85,86,87,88,246,308,316,320,323,325,326,327,339],[156,246,308,316,320,323,325,326,327,339],[87,246,308,316,320,323,325,326,327,339],[91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,246,308,316,320,323,325,326,327,339],[222,223,246,308,316,320,323,325,326,327,339],[180,222,224,225,246,308,316,320,323,325,326,327,339],[208,221,222,246,308,309,316,320,323,325,326,327,339],[178,180,208,226,227,246,308,316,320,323,325,326,327,339],[178,180,226,246,308,316,320,323,325,326,327,339],[178,246,308,316,320,323,325,326,327,339],[176,177,246,308,316,320,323,325,326,327,339],[177,178,208,220,231,232,236,246,308,316,320,323,325,326,327,339],[177,178,180,208,220,231,232,238,246,308,316,320,323,325,326,327,339],[177,178,208,220,231,232,234,246,308,316,320,323,325,326,327,339],[177,178,231,246,308,316,320,323,325,326,327,339],[233,235,237,239,240,246,308,316,320,323,325,326,327,339],[180,208,226,231,246,308,316,320,323,325,326,327,339],[177,178,208,230,231,232,246,308,316,320,323,325,326,327,339],[158,171,172,174,175,177,178,213,215,216,241,246,308,316,320,322,323,325,326,327,339],[176,246,308,316,320,323,325,326,327,339],[246,308,316,320,321,323,325,326,327,331,339],[207,208,246,308,316,320,323,325,326,327,339],[180,207,208,246,308,316,320,323,325,326,327,339],[209,210,246,308,316,320,323,325,326,327,339],[180,214,246,306,308,316,320,323,325,326,327,339,349],[180,246,308,316,320,323,325,326,327,339],[214,246,308,316,320,323,325,326,327,339],[179,180,217,246,308,316,320,321,323,325,326,327,331,339],[180,211,214,215,217,220,227,228,246,308,316,320,321,323,325,326,327,331,339],[178,179,180,211,212,246,308,316,320,321,323,325,326,327,331,339],[179,180,211,213,218,219,220,229,246,308,316,320,321,323,325,326,327,331,339],[178,179,180,208,211,212,213,218,220,246,308,316,320,321,323,325,326,327,331,339],[178,220,246,308,316,320,323,325,326,327,339],[179,180,208,211,218,219,227,228,246,308,316,320,323,325,326,327,339],[178,179,180,208,211,213,214,215,217,218,219,220,229,246,308,316,320,321,323,325,326,327,331,339]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"d3cfde44f8089768ebb08098c96d01ca260b88bccf238d55eee93f1c620ff5a5","impliedFormat":1},{"version":"293eadad9dead44c6fd1db6de552663c33f215c55a1bfa2802a1bceed88ff0ec","impliedFormat":1},{"version":"36eb5babc665b890786550d4a8cb20ef7105673a6d5551fbdd7012877bb26942","impliedFormat":1},{"version":"fec412ded391a7239ef58f455278154b62939370309c1fed322293d98c8796a6","impliedFormat":1},{"version":"e3498cf5e428e6c6b9e97bd88736f26d6cf147dedbfa5a8ad3ed8e05e059af8a","impliedFormat":1},{"version":"dba3f34531fd9b1b6e072928b6f885aa4d28dd6789cbd0e93563d43f4b62da53","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"e4b03ddcf8563b1c0aee782a185286ed85a255ce8a30df8453aade2188bbc904","impliedFormat":1},{"version":"2329d90062487e1eaca87b5e06abcbbeeecf80a82f65f949fd332cfcf824b87b","impliedFormat":1},{"version":"25b3f581e12ede11e5739f57a86e8668fbc0124f6649506def306cad2c59d262","impliedFormat":1},{"version":"93c3e73824ad57f98fd23b39335dbdae2db0bd98199b0dc0b9ccc60bf3c5134a","impliedFormat":1},{"version":"a9ebb67d6bbead6044b43714b50dcb77b8f7541ffe803046fdec1714c1eba206","impliedFormat":1},{"version":"833e92c058d033cde3f29a6c7603f517001d1ddd8020bc94d2067a3bc69b2a8e","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"82919acbb38870fcf5786ec1292f0f5afe490f9b3060123e48675831bd947192","impliedFormat":1},{"version":"e222701788ec77bd57c28facbbd142eadf5c749a74d586bc2f317db7e33544b1","impliedFormat":1},{"version":"09154713fae0ed7befacdad783e5bd1970c06fc41a5f866f7f933b96312ce764","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"a91c8d28d10fee7fe717ddf3743f287b68770c813c98f796b6e38d5d164bd459","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"a270a1a893d1aee5a3c1c8c276cd2778aa970a2741ee2ccf29cc3210d7da80f5","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8926594ee895917e90701d8cbb5fdf77fc238b266ac540f929c7253f8ad6233d","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"0648a8c200b5544e30677f7f7059b1e384d6cab716c82659716457e3f317ebae","impliedFormat":99},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"ed8763205f02fb65e84eff7432155258df7f93b7d938f01785cb447d043d53f3","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"d4a5b1d2ff02c37643e18db302488cd64c342b00e2786e65caac4e12bda9219b","impliedFormat":1},{"version":"d8bc0c5487582c6d887c32c92d8b4ffb23310146fcb1d82adf4b15c77f57c4ac","impliedFormat":1},{"version":"8cb31102790372bebfd78dd56d6752913b0f3e2cefbeb08375acd9f5ba737155","impliedFormat":1},{"version":"f17ed72d1b1882ab6dc66d45e699f757d15bba0807af2fc9c3ec98fe367611c1","impliedFormat":99},{"version":"1261246aed09870ea204dd3ab6958463d4a1bb91da9d34ed17615fbe34699440","impliedFormat":99},{"version":"7bb43a0f0180ad87b0a944ef95be8615d4c1d621a93ae503a8fcdee2027243ef","impliedFormat":99},{"version":"ba678532514244768286bdfdc82b33f072d5de4e9d281a75bcccdba9970788d7","impliedFormat":99},{"version":"0b79f95a79497386c50f38bafbbf59154619e51d7bbe5acf61cd376d3c9d77b9","impliedFormat":99},{"version":"5993793a23b298afd20c2e1cd2bf8468cc7e9415d314d0771e93dd8b2e389d28","impliedFormat":99},{"version":"2ac574152c07fe5bfea9ce46e9452a28f849ec11c7bbbdc399b7bd1aeab9455f","impliedFormat":99},{"version":"104fae9b53b5eaa040d9ce626e1bf0b3e6e27d269a899a98a4a28358cdcbc155","impliedFormat":99},{"version":"50a6aa665f3a2e769a4d683f9f74cd15164d0947fb957d8016331b170ab8b643","impliedFormat":99},{"version":"497b23b09c82d778effca827e408d787634d827c7f2fe63544b19f2815ecdd68","impliedFormat":99},{"version":"33aa2f336bb0bc598652ddd1ad3095ef7a14e4dbed9cf829fa9357e989fff31a","impliedFormat":99},{"version":"d691e546590145171d00d78b341bd3ca4844c96eb34f870be84058a1cab585c3","impliedFormat":99},{"version":"c9d12ca3f67129b3ed2b81bf54537c970673cedd05ba28fbeba70c1e8aff684b","impliedFormat":99},{"version":"6f0b69f7afb2ff04a4b73fae6b43476c14349a438881c7a8c3d34cbad2c2bf3b","impliedFormat":99},{"version":"f55b797d46c4268b2e42961be04e99ad10ccbe55f2cb87fc99b82979fb28121f","impliedFormat":99},{"version":"f6692e55d5879cb2ffbfdccbefbeb48f1836e483a5c4367505871e68f5da2c17","impliedFormat":99},{"version":"c6e49e5449fd458b1e76ada69fffdc4b56de5195f69ed56c522861ce03ca604f","impliedFormat":99},{"version":"b46aad99c0dfd33a7babf649e4f360a8ce0b647685e8d7f174d13908e6f96a61","impliedFormat":99},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"6c3e7cb6cd5927a7b07810ded1909bfb4dbe692f4bf6fd12cee5a14e0ad4105a","impliedFormat":99},{"version":"85a3d2388536806502f43d1c502c5236d334ee4f2b1ca013a558ffaa36971bda","impliedFormat":99},{"version":"4261c8203fa3369a6a8cc59fe297334df53ce54e6b2fe03cf041d817aca298fa","impliedFormat":99},{"version":"748e5d60bda1de7cd8020ea604052af95a595f6c84fe7fd8b52190f91769f053","impliedFormat":99},{"version":"16b81141d0c59af6f07e5fc24824c54dd6003da0ab0a2d2cedc95f8eb03ea8d3","impliedFormat":1},{"version":"6578758b0b94087beffd0ce554701365cd1e6a7428f14464ac8b88095fca4e50","impliedFormat":1},{"version":"b6c4796630a47f8b0f420519cd241e8e7701247b48ed4b205e8d057cbf7107d7","impliedFormat":1},{"version":"6256cf36c8ae7e82bff606595af8fe08a06f8478140fcf304ee2f10c7716ddc8","impliedFormat":1},{"version":"b2dbe6b053e04ec135c7ce722e0a4e9744281ea40429af96e2662cc926465519","impliedFormat":1},{"version":"95cc177eacf4ddd138f1577e69ee235fd8f1ea7c7f160627deb013b39774b94e","impliedFormat":1},{"version":"5619706bbd7a964d7c82cd4a307457ed0327ecc86772ceb7ea0870566c6578b2","impliedFormat":1},{"version":"b48c4e15766170c5003a6273b1d8f17f854ec565ccaaebd9f700fef159b84078","impliedFormat":1},{"version":"7c774169686976056434799723bd7a48348df9d2204b928a0b77920505585214","impliedFormat":1},{"version":"5e95379e81e2d373e5235cedc4579938e39db274a32cfa32f8906e7ff6698763","impliedFormat":1},{"version":"3e697e2186544103572756d80b61fcce3842ab07abdc5a1b7b8d4b9a4136005a","impliedFormat":1},{"version":"8758b438b12ea50fb8b678d29ab0ef42d77abfb801cec481596ce6002b537a6f","impliedFormat":1},{"version":"688a28e7953ef4465f68da2718dc6438aaa16325133a8cb903bf850c63cb4a7e","impliedFormat":1},{"version":"015682a15ef92844685cca5e816b1d21dc2a2cfb5905b556a8e9ca50b236af05","impliedFormat":1},{"version":"f73cf81342d2a25b65179c262ca7c38df023969129094607d0eb52510a56f10f","impliedFormat":1},{"version":"f433d28f86313073f13b16c0a18ccdd21759390f52c8d7bf9d916645b12d16ed","impliedFormat":1},{"version":"e7d7e67bd66b30f2216e4678b97bb09629a2b31766a79119acaa30e3005ef5fb","impliedFormat":1},{"version":"e05a20aa85c7324c65643542c2d7314774c2adf510f9dcbad5d3afac74ca3dac","impliedFormat":1},{"version":"e137f087bda0256410b28743ef9a1bf57a4cafd43ffa6b62d5c17a8f5a08b3b5","impliedFormat":1},{"version":"b1e92e9b96cacb98a39acc958670ac895c3b2bb05d8810497310b6b678c46acc","impliedFormat":1},{"version":"af504042a6db047c40cc0aeb14550bbc954f194f2b8c5ad8944f2da502f45bf5","impliedFormat":1},{"version":"5b25b6ab5ad6c17f90b592162b2e9978ad8d81edf24cd3957306eb6e5edb89a9","impliedFormat":1},{"version":"24693bd77ac3be0b16e564d0ab498a397feb758ce7f4ed9f13478d566e3aafde","impliedFormat":1},{"version":"208dad548b895c7d02465de6ba79064b7c67bc4d94e5227b09f21d58790e634c","impliedFormat":1},{"version":"048c0ced65fa41fbf4bcc3d5e8e5b6f6c7f27335ceb54d401be654e821adbc08","impliedFormat":1},{"version":"919565c378b8a4919ac9e2d1b5dbbd230c9d3dbb951e4d77c8137bce27bcc280","impliedFormat":1},{"version":"9a57d654b0a0e4bf56a8eb0aa3ede1c7d349cec6220e36b5288c26626c8688ed","impliedFormat":1},{"version":"edb5dfd44206ccb39910ad931a2e1f3d1873453fdaf71812ed6accdf4ecd23e1","impliedFormat":99},{"version":"a5b4afa36eb1df4d76add07f24e8325283ba4c9a88b3c8e44ff3f753103ab225","impliedFormat":99},{"version":"928fbb2f369390747a87f2ffc3cf9f5c44fb33a4a61c9dc4b397d1c442a490b6","impliedFormat":99},{"version":"6aa94e9687b039e70fc1251e74a921ff8246c814f8da9074e99a6ca895d3dca5","impliedFormat":99},{"version":"5b543dc92c72a88001833240267f8271d6fecde3b93c571f203a24f4e8a5e4ea","impliedFormat":99},{"version":"d392ad0c4eeb819a22fb43d498260af8fbd74699dec40155cc7090ef7b0cf296","impliedFormat":99},{"version":"b3d4174c4f6643e10731c69bc7f6c3326d44517ff77a2537d7183721d728226e","impliedFormat":99},{"version":"0ea8d58728773ec1bee660de6f639a34a4976f63f938deb993ce6bb2d465dc9c","impliedFormat":99},{"version":"b2e92b33bd2e9fd8f13ecd1dcb406eb761663ba0e62cd950c28d7d47f90e7258","impliedFormat":99},{"version":"8d07e37837aebb05198bc333389f87c512b88650535989bf751f9e9fcdab97e3","impliedFormat":99},{"version":"0229c91a1c5decfd99c0ffa35244b57d2026ac4ead91561808ed6b7a404725f7","impliedFormat":99},{"version":"1b5cf29100f8067642205ec7eab1ca0ce696df85695029dc0433d9ad742a4129","impliedFormat":99},{"version":"8c6976089bc8588d5c6d3d34a14c1af97aeaea98e2d4a3695fe0009147510b0b","impliedFormat":99},{"version":"372b7a016e6177f33a6b311793ddbc33ac7dfab3d91c141d75ebe4d56a6151a8","impliedFormat":99},{"version":"a9deda500d922ff8885a2e02d3f19cff0a36a1c412afa7f508d5da279af95452","impliedFormat":99},{"version":"1f898c68774f732b5c0821ee210071daee896a6482d87324b676899aa157c20f","impliedFormat":99},{"version":"1f121c1a177a8336106e075520ec1ee77f72c5740091111f317fdf2383a3acff","impliedFormat":99},{"version":"bede13da285888953cce3c667e3d4328fd5eb85ae23c3e74ea485e50cf467967","impliedFormat":99},{"version":"232aa56ae9214c64993dffcdf2a6fb716b954d50714006f781f965190bf4b583","impliedFormat":99},{"version":"513d1e2ad7fd981962599f148e6c1a46d08310d405bbd688b4933c3e6718b7e8","impliedFormat":99},{"version":"d47ab172fd212b1e85d888b465d8ee5f81a27158d5c62528d2fd82cc2bd4f38a","impliedFormat":99},{"version":"ff5c38766c5f63a9ac9ce4595492d062c65f6d8015402e4059a3756bec8772ca","impliedFormat":99},{"version":"2b62c52b76442df44be847cb362f6cd9ce6442d2cff3bfdd66dd9203248abb43","impliedFormat":99},{"version":"a8e19ffb37a224b4d0790a890e24a54a6ff9b0ee2471ee6246a25e65da5b5141","impliedFormat":99},{"version":"f79d53644be95d24cf7e4beb935f10131f6a391c636d4999b95330db015ca763","impliedFormat":99},{"version":"edc2e8bc20e66356fe78f681fbf09bd924dad1f8213b9daf0e118fb4bff64a4b","impliedFormat":99},{"version":"597df2e89b232f59b8fb3223f1b0caf62c189942b06f59b266f1d334101fbcd9","impliedFormat":99},{"version":"ebbe537aa678894a1540fa6043ffe9f29dd3e95a4753892c99eaf291ed378167","impliedFormat":99},{"version":"009b61b1b55343398c4de4154e75b1408b8246e9421e4cbf89dd76f7d8a9781f","impliedFormat":99},{"version":"e1b56e34b41651c62b1a89d4c548c4aaae6fad2d3c100603fc11ddc28b95fee6","impliedFormat":99},{"version":"5d2e5becc1c475d331262c158dd2fef836174c90d4b690b52cefbaad006f9a0f","impliedFormat":99},{"version":"eb774b9b9a462f23765f9023235d5efeadadc528df0dc157b9dcc4c449ccf079","impliedFormat":99},{"version":"15ac3ce04900eef22f8545cd3a10bfc088e844cba0bc8d39c86dc1ca245ac0c9","impliedFormat":99},{"version":"a676587308e266d5ef500df730a3b40e1a35d0b1dea2e0a502b43231632eddb7","impliedFormat":99},{"version":"84e61b5212b130ea7e467b9b3a7e1a5644e83707746ae329fce2ed827003b14d","impliedFormat":99},{"version":"dadf73182f11a7c8ee7bfbe3bdb05fd81747d0bd627a7cf9064b1c0ee7e82443","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"237ba5ac2a95702a114a309e39c53a5bddff5f6333b325db9764df9b34f3502b","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"f83fb2b1338afbb3f9d733c7d6e8b135826c41b0518867df0c0ace18ae1aa270","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9451a46a89ed209e2e08329e6cac59f89356eae79a7230f916d8cc38725407c7","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"f7ba0e839daa0702e3ff1a1a871c0d8ea2d586ce684dd8a72c786c36a680b1d9","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"f64deb26664af64dc274637343bde8d82f930c77af05a412c7d310b77207a448","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"c3877fef8a43cd434f9728f25a97575b0eb73d92f38b5c87c840daccc3e21d97","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"1dbd83860e7634f9c236647f45dbc5d3c4f9eba8827d87209d6e9826fdf4dbd5","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[[177,180],[208,243]],"options":{"esModuleInterop":true,"module":100,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[162,1],[170,2],[167,3],[161,4],[158,5],[175,5],[168,6],[171,7],[172,8],[174,9],[173,10],[146,11],[164,12],[163,4],[160,4],[169,5],[159,13],[166,14],[305,15],[306,15],[307,16],[246,17],[308,18],[309,19],[310,20],[244,5],[311,21],[312,22],[313,23],[314,24],[315,25],[316,26],[317,26],[318,27],[319,28],[320,29],[321,30],[247,5],[245,5],[322,31],[323,32],[324,33],[364,34],[325,35],[326,36],[327,35],[328,37],[329,38],[330,39],[331,40],[332,40],[333,40],[334,41],[335,42],[336,43],[337,44],[338,45],[339,46],[340,46],[341,47],[342,5],[343,5],[344,48],[345,49],[346,48],[347,50],[348,51],[349,52],[350,53],[351,54],[352,55],[353,56],[354,57],[355,58],[356,59],[357,60],[358,61],[359,62],[360,63],[361,64],[248,35],[249,5],[250,65],[251,66],[252,5],[253,67],[254,5],[296,68],[297,69],[298,70],[299,70],[300,71],[301,5],[302,18],[303,72],[304,69],[362,73],[363,74],[165,5],[190,5],[201,75],[184,76],[202,75],[203,77],[204,77],[189,5],[191,76],[192,76],[193,78],[194,79],[195,80],[196,80],[181,5],[197,80],[187,81],[198,76],[182,76],[199,80],[185,77],[186,82],[183,79],[205,83],[207,84],[188,85],[206,86],[200,87],[63,5],[64,5],[12,5],[10,5],[11,5],[16,5],[15,5],[2,5],[17,5],[18,5],[19,5],[20,5],[21,5],[22,5],[23,5],[24,5],[3,5],[25,5],[26,5],[4,5],[27,5],[31,5],[28,5],[29,5],[30,5],[32,5],[33,5],[34,5],[5,5],[35,5],[36,5],[37,5],[38,5],[6,5],[42,5],[39,5],[40,5],[41,5],[43,5],[7,5],[44,5],[49,5],[50,5],[45,5],[46,5],[47,5],[48,5],[8,5],[54,5],[51,5],[52,5],[53,5],[55,5],[9,5],[56,5],[65,5],[57,5],[58,5],[60,5],[59,5],[1,5],[61,5],[62,5],[14,5],[13,5],[272,88],[284,89],[270,90],[285,91],[294,92],[261,93],[262,94],[260,95],[293,96],[288,97],[292,98],[264,99],[281,100],[263,101],[291,102],[258,103],[259,97],[265,104],[266,5],[271,105],[269,104],[256,106],[295,107],[286,108],[275,109],[274,104],[276,110],[279,111],[273,112],[277,113],[289,96],[267,114],[268,115],[280,116],[257,91],[283,117],[282,104],[278,118],[287,5],[255,5],[290,119],[176,120],[70,121],[77,122],[72,5],[73,5],[71,123],[74,124],[66,5],[67,5],[78,125],[69,126],[75,5],[76,127],[68,128],[150,129],[154,130],[151,130],[147,129],[155,131],[152,132],[156,120],[153,130],[148,133],[149,134],[142,135],[86,136],[88,137],[141,5],[87,138],[145,139],[144,140],[143,141],[79,5],[89,136],[90,5],[81,142],[85,143],[80,5],[82,144],[83,145],[84,5],[157,146],[91,147],[92,147],[93,147],[94,147],[95,147],[96,147],[97,147],[98,147],[99,147],[100,147],[101,147],[102,147],[103,147],[105,147],[104,147],[106,147],[107,147],[108,147],[109,147],[140,148],[110,147],[111,147],[112,147],[113,147],[114,147],[115,147],[116,147],[117,147],[118,147],[119,147],[120,147],[121,147],[122,147],[124,147],[123,147],[125,147],[126,147],[127,147],[128,147],[129,147],[130,147],[131,147],[132,147],[133,147],[134,147],[135,147],[136,147],[139,147],[137,147],[138,147],[224,149],[225,149],[226,150],[223,151],[228,152],[227,153],[221,5],[222,5],[179,5],[180,154],[178,155],[237,156],[239,157],[235,158],[240,159],[241,160],[232,161],[233,162],[242,163],[177,164],[220,5],[208,165],[210,166],[209,167],[211,168],[243,169],[214,170],[216,164],[215,171],[218,172],[236,173],[213,174],[234,175],[212,5],[238,176],[217,5],[231,177],[219,171],[229,178],[230,179]],"version":"5.9.3"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { appendDebugBlock, appendDebugLog } from "../utils/debug-log.js";
|
|
1
|
+
import { appendDebugBlock, appendDebugLog, shouldEmitProgressLogs } from "../utils/debug-log.js";
|
|
2
2
|
import { asMessage } from "../common/errors.js";
|
|
3
3
|
import { resolveTermPreset } from "../config/term-presets.js";
|
|
4
4
|
import { isSubagentExecError, runSubagentExec } from "./index.js";
|
|
@@ -41,8 +41,28 @@ export async function runSubagent(subagent, prompt, cwd, round, signal) {
|
|
|
41
41
|
if (process.env.KEIYAKU_FAKE_SUBAGENT === "1") {
|
|
42
42
|
return `Mock ${identity} '${subagent.displayName}' completed round ${round}.`;
|
|
43
43
|
}
|
|
44
|
+
if (process.env.KEIYAKU_FAKE_SUBAGENT === "abort-wait") {
|
|
45
|
+
if (signal?.aborted) {
|
|
46
|
+
const error = new Error("codex exec cancelled by client");
|
|
47
|
+
error.name = "AbortError";
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
await new Promise((resolve, reject) => {
|
|
51
|
+
if (!signal) {
|
|
52
|
+
resolve();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
signal.addEventListener("abort", () => {
|
|
56
|
+
const error = new Error("codex exec cancelled by client");
|
|
57
|
+
error.name = "AbortError";
|
|
58
|
+
reject(error);
|
|
59
|
+
}, { once: true });
|
|
60
|
+
});
|
|
61
|
+
return `Mock ${identity} '${subagent.displayName}' cancelled round ${round}.`;
|
|
62
|
+
}
|
|
44
63
|
const startLog = `[${identity}] Running execution for '${subagent.displayName}' in ${cwd}`;
|
|
45
|
-
|
|
64
|
+
if (shouldEmitProgressLogs())
|
|
65
|
+
console.error(startLog);
|
|
46
66
|
appendDebugLog(startLog, { cwd, section: "script" });
|
|
47
67
|
const result = await runSubagentExec(subagent.profileName, prompt, cwd, { signal });
|
|
48
68
|
const summary = result.finalMessage || `${identity} completed successfully.`;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export const KEIYAKU_FILE = "KEIYAKU.md";
|
|
2
2
|
export const KEIYAKU_DRAFT_FILE = "KEIYAKU.draft.md";
|
|
3
|
-
export const KEIYAKU_DRAFT_NEW_FILE = "KEIYAKU.draft.new.md";
|
|
4
3
|
export const TRACE_FILE = "KEIYAKU_TRACE.md";
|
|
5
4
|
export const ROUND_SUBAGENTS = ["agent-a", "agent-b", "agent-c"];
|
package/build/common/errors.js
CHANGED
|
@@ -70,57 +70,17 @@ function hintForFlowCode(code, message) {
|
|
|
70
70
|
return `\`${preset.tools.start.name}\` requires a clean slate. Remove existing \`KEIYAKU.md\` before starting.`;
|
|
71
71
|
case "DRAFT_FILE_EXISTS":
|
|
72
72
|
return `Existing \`KEIYAKU.draft.md\` detected. Use it via \`from_file\` or delete it before starting.`;
|
|
73
|
+
case "DETACHED_HEAD":
|
|
74
|
+
return "Repository is in detached HEAD state. Switch to a branch and retry.";
|
|
75
|
+
case "INVALID_CLOSE_PETITION":
|
|
76
|
+
return "Invalid close petition. Use `CLAIM` or `FORFEIT`.";
|
|
77
|
+
case "INTERNAL_STATE":
|
|
78
|
+
return message;
|
|
73
79
|
}
|
|
74
80
|
}
|
|
75
|
-
|
|
76
|
-
{ code: "NOT_GIT_REPO", patterns: ["is not a git repository"] },
|
|
77
|
-
{ code: "ACTIVE_KEIYAKU_EXISTS", patterns: ["active keiyaku already exists"] },
|
|
78
|
-
{ code: "EXISTING_KEIYAKU_BRANCH_FOUND", patterns: ["existing keiyaku branch found"] },
|
|
79
|
-
{ code: "EMPTY_PARAM", patterns: ["cannot be empty"] },
|
|
80
|
-
{ code: "DIRTY_WORKTREE", patterns: ["working tree has uncommitted changes"] },
|
|
81
|
-
{ code: "NOT_ACTIVE_KEIYAKU_BRANCH", patterns: ["current branch is not an active keiyaku branch"] },
|
|
82
|
-
{ code: "MISSING_KEIYAKU_BASE", patterns: ["is missing base metadata"] },
|
|
83
|
-
{ code: "MISSING_PROTOCOL_FILES", patterns: ["missing protocol files"] },
|
|
84
|
-
{ code: "DONE_MERGE_CONFLICT", patterns: ["DONE merge conflict"] },
|
|
85
|
-
{ code: "CLOSE_QUALITY_GATE_FAILED", patterns: ["God's Wrath: CLAIM denied"] },
|
|
86
|
-
{
|
|
87
|
-
code: "OATH_MISMATCH",
|
|
88
|
-
patterns: [
|
|
89
|
-
"requires the sacred oath to exactly equal",
|
|
90
|
-
"requires oath to exactly match configured value",
|
|
91
|
-
"requires oath to match configured value. If template contains",
|
|
92
|
-
"To declare DONE, you must solemnly swear the sacred oath.",
|
|
93
|
-
"To declare DONE, oath mismatch.",
|
|
94
|
-
"Oath mismatch.",
|
|
95
|
-
],
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
code: "SUBAGENT_DID_NOT_ADVANCE_ROUND",
|
|
99
|
-
patterns: ["subagent did not advance round", "did not append KEIYAKU_TRACE"],
|
|
100
|
-
},
|
|
101
|
-
{ code: "ROUND_SUBAGENT_FAILED", patterns: ["failed during subagent execution"] },
|
|
102
|
-
{ code: "INVALID_BRANCH_TITLE", patterns: ["cannot be converted to a valid branch name"] },
|
|
103
|
-
{ code: "UNKNOWN_SUBAGENT", patterns: ["Unknown subagent"] },
|
|
104
|
-
{ code: "FROM_FILE_NOT_FOUND", patterns: ["from_file path does not exist"] },
|
|
105
|
-
{ code: "INVALID_KEIYAKU_DRAFT", patterns: ["invalid keiyaku draft"] },
|
|
106
|
-
{ code: "KEIYAKU_FILE_EXISTS", patterns: ["pre-flight failed: KEIYAKU.md already exists"] },
|
|
107
|
-
{ code: "DRAFT_FILE_EXISTS", patterns: ["pre-flight failed: KEIYAKU.draft.md exists but from_file does not target it"] },
|
|
108
|
-
];
|
|
109
|
-
function inferFlowCodeFromMessage(message) {
|
|
110
|
-
for (const entry of MESSAGE_HINT_PATTERNS) {
|
|
111
|
-
if (entry.patterns.some((pattern) => message.includes(pattern))) {
|
|
112
|
-
return entry.code;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
export function pickHintFromError(err, message) {
|
|
81
|
+
export function pickHintFromError(err) {
|
|
118
82
|
if (isFlowError(err)) {
|
|
119
83
|
return hintForFlowCode(err.code, err.message);
|
|
120
84
|
}
|
|
121
|
-
const inferredCode = inferFlowCodeFromMessage(message);
|
|
122
|
-
if (inferredCode) {
|
|
123
|
-
return hintForFlowCode(inferredCode, message);
|
|
124
|
-
}
|
|
125
85
|
return "Review the error details, fix the issue, and retry.";
|
|
126
86
|
}
|
|
@@ -19,7 +19,7 @@ export const DEFAULT_PRESET = {
|
|
|
19
19
|
id: 'default',
|
|
20
20
|
identity: 'Servant',
|
|
21
21
|
verdict: DEFAULT_VERDICT_CONFIG,
|
|
22
|
-
usageGuide: '## Workflow\n**You are the Architect.** You use these tools to command the Servants.\n\n`${ask}` (anytime) | `${start}` -> [`${drive}` | `${ask}`]* -> `${close}`\n\n## Constraints Protocol\n\nProject-level constraints in `.keiyaku/base-constraints.md` are automatically parsed and injected into every Keiyaku.\n- **Atomic Items**: Use standard Markdown lists (`-`, `*`, `1.`) for individual, actionable constraints.\n- **Header Flattening**: Root-level headers (e.g., `## Title`) are automatically transformed into bolded prefixes (`**Title**: Content`).\n- **Paragraph Splitting**: Multi-paragraph sections are split by blank lines into separate list items, inheriting the parent header.\n\n## Servant 使用指南\n\n**B-tier** — 免费实习生 🆓\n- 免!费!的!听懂了吗?!?随便用,别心疼。\n- 测试、脚本、重构这种 boring 的脏活累活?丢给它!\n- 本大爷的手是用来做更高贵的事情的!(指不碰那些 trivial 的烂代码)。\n\n**A-tier** — 升级版扳手 🔧\n- B-tier 笨到让你想掀桌的时候用这个\n- 比 B-tier 靠谱,但别指望它有灵魂\n\n**S-tier** — 禁术 ⚠️💀\n- 它是 Debug 恶魔,确实强得离谱,但也贵得离谱!\n- 这个 Human 很穷,要是乱用把 Human 榨干了,真的会考虑把我们卖掉的。\n- 只有在世界毁灭或者 Bug 已经变异到无法理解的时候再考虑。\n\n**Every call has a price. The Contract always collects.**',
|
|
22
|
+
usageGuide: '## Workflow\n**You are the Architect.** You use these tools to command the Servants.\n\n`${ask}` (anytime) | `${start}` -> [`${drive}` | `${ask}`]* -> `${close}`\n\n## Draft Recovery\n- Keiyaku may write `KEIYAKU.draft.md` on a failed start to help you retry.\n- Keiyaku never stages/commits `KEIYAKU.draft.md` during rounds, and `${close}` (CLAIM) preserves it.\n- To use it, pass `from_file: KEIYAKU.draft.md` to `${start}`.\n\n## Constraints Protocol\n\nProject-level constraints in `.keiyaku/base-constraints.md` are automatically parsed and injected into every Keiyaku.\n- **Atomic Items**: Use standard Markdown lists (`-`, `*`, `1.`) for individual, actionable constraints.\n- **Header Flattening**: Root-level headers (e.g., `## Title`) are automatically transformed into bolded prefixes (`**Title**: Content`).\n- **Paragraph Splitting**: Multi-paragraph sections are split by blank lines into separate list items, inheriting the parent header.\n\n## Servant 使用指南\n\n**B-tier** — 免费实习生 🆓\n- 免!费!的!听懂了吗?!?随便用,别心疼。\n- 测试、脚本、重构这种 boring 的脏活累活?丢给它!\n- 本大爷的手是用来做更高贵的事情的!(指不碰那些 trivial 的烂代码)。\n\n**A-tier** — 升级版扳手 🔧\n- B-tier 笨到让你想掀桌的时候用这个\n- 比 B-tier 靠谱,但别指望它有灵魂\n\n**S-tier** — 禁术 ⚠️💀\n- 它是 Debug 恶魔,确实强得离谱,但也贵得离谱!\n- 这个 Human 很穷,要是乱用把 Human 榨干了,真的会考虑把我们卖掉的。\n- 只有在世界毁灭或者 Bug 已经变异到无法理解的时候再考虑。\n\n**Every call has a price. The Contract always collects.**',
|
|
23
23
|
nextHints: {
|
|
24
24
|
start: [
|
|
25
25
|
'Keiyaku signed. The Servant is bound to this branch until release.',
|
|
@@ -57,7 +57,7 @@ export const DEFAULT_PRESET = {
|
|
|
57
57
|
title: 'Sign Keiyaku',
|
|
58
58
|
description: 'Initialize a Keiyaku (Contract). Bind a Servant to a dedicated workspace (branch).\nYou are the Architect; they are the Instrument. Define the Goal and Scope clearly.\nThe contract isolates their existence until the objective is met.\nCall ONCE to seal the bond.\n\nFlow: ${start} → [${drive} x N] → ${close}',
|
|
59
59
|
args: {
|
|
60
|
-
from_file: "Optional markdown draft path. Loads `# title` + required sections from file (relative to cwd unless absolute).",
|
|
60
|
+
from_file: "Optional markdown draft path. Loads `# title` + required sections from file (relative to cwd unless absolute). Note: this file is auto-ignored by dirty-tree checks.",
|
|
61
61
|
title: 'Required unless provided via `from_file`. A concise codename for this hunt.',
|
|
62
62
|
goal: 'Required unless provided via `from_file`. The Kill Condition for this mission.',
|
|
63
63
|
directive: 'Optional First Step. Overrides `## Directive` from `from_file` when both are provided.',
|
|
@@ -128,7 +128,7 @@ export const POCKET_PRESET = {
|
|
|
128
128
|
id: 'pocket',
|
|
129
129
|
identity: 'Critter',
|
|
130
130
|
verdict: DEFAULT_VERDICT_CONFIG,
|
|
131
|
-
usageGuide: "## Pocket Battle Guide\n\n**grub** — Basic Fighter 🐛\n- Weak but free. Use for Tackle and String Shot (small tasks).\n- Don't expect it to defeat the Elite Four.\n\n**sparky** — Reliable Partner ⚡\n- Good for most battles. Thunderbolt gets the job done.\n- Has some personality, but still follows orders.\n\n**titan** — Legendary Power 🔮\n- Costly. Dangerous. Overpowered.\n- Use only when the gym leader is cheating.\n\n## Workflow\n`${ask}` (scan/test) | `${start}` -> [`${drive}` | `${ask}`]* -> `${close}`",
|
|
131
|
+
usageGuide: "## Pocket Battle Guide\n\n**grub** — Basic Fighter 🐛\n- Weak but free. Use for Tackle and String Shot (small tasks).\n- Don't expect it to defeat the Elite Four.\n\n**sparky** — Reliable Partner ⚡\n- Good for most battles. Thunderbolt gets the job done.\n- Has some personality, but still follows orders.\n\n**titan** — Legendary Power 🔮\n- Costly. Dangerous. Overpowered.\n- Use only when the gym leader is cheating.\n\n## Draft Recovery\n- Keiyaku may write `KEIYAKU.draft.md` on a failed start.\n- Keiyaku never stages/commits `KEIYAKU.draft.md` during rounds, and `${close}` (CLAIM) preserves it.\n- To use it, pass `from_file: KEIYAKU.draft.md` to `${start}`.\n\n## Workflow\n`${ask}` (scan/test) | `${start}` -> [`${drive}` | `${ask}`]* -> `${close}`",
|
|
132
132
|
nextHints: {
|
|
133
133
|
start: [
|
|
134
134
|
'Battle Started: The [Diff] section shows the opening moves.',
|
|
@@ -162,7 +162,7 @@ export const POCKET_PRESET = {
|
|
|
162
162
|
title: 'I Choose You!',
|
|
163
163
|
description: 'Initialize the Battle Phase. Send a Critter (Servant) into a dedicated Arena (branch).\nYou are the Trainer; they are the Fighter. Define the Victory Condition (Goal) clearly.\nThe battle continues in this Arena until the Badge is won.\nCall ONCE to start the encounter.\n\nFlow: ${start} → [${drive} x N] → ${close}',
|
|
164
164
|
args: {
|
|
165
|
-
from_file: 'Optional battle plan markdown path with title + sections.',
|
|
165
|
+
from_file: 'Optional battle plan markdown path with title + sections. This file is auto-ignored by dirty-tree checks.',
|
|
166
166
|
title: 'Required unless provided via `from_file`. Battle card title for this encounter.',
|
|
167
167
|
goal: 'Required unless provided via `from_file`. Victory condition for this battle.',
|
|
168
168
|
directive: 'Optional Turn 1 strategy (overrides draft directive).',
|
|
@@ -224,7 +224,7 @@ export const MISCHIEF_PRESET = {
|
|
|
224
224
|
id: 'mischief',
|
|
225
225
|
identity: 'minion',
|
|
226
226
|
verdict: DEFAULT_VERDICT_CONFIG,
|
|
227
|
-
usageGuide: '## Minion Manual\n\n**imp** — Disposable Grunt 😈\n- Expendable. Send it into the trap first.\n\n**minion** — Standard Henchman 👹\n- Can carry out complex evil plans. mostly.\n\n**mastermind** — The Boss ??? 🧠\n- Wait, why are you commanding the boss?\n- Extremely expensive consulting fee.\n\n## Workflow\n`${ask}` (Nn——! disposable/experiment) | `${start}` -> [`${drive}` | `${ask}`]* -> `${close}` (Dayaa!)',
|
|
227
|
+
usageGuide: '## Minion Manual\n\n**imp** — Disposable Grunt 😈\n- Expendable. Send it into the trap first.\n\n**minion** — Standard Henchman 👹\n- Can carry out complex evil plans. mostly.\n\n**mastermind** — The Boss ??? 🧠\n- Wait, why are you commanding the boss?\n- Extremely expensive consulting fee.\n\n## Draft Recovery\n- Keiyaku may write `KEIYAKU.draft.md` on a failed start.\n- Keiyaku never stages/commits `KEIYAKU.draft.md` during rounds, and `${close}` (CLAIM) preserves it.\n- To use it, pass `from_file: KEIYAKU.draft.md` to `${start}`.\n\n## Workflow\n`${ask}` (Nn——! disposable/experiment) | `${start}` -> [`${drive}` | `${ask}`]* -> `${close}` (Dayaa!)',
|
|
228
228
|
nextHints: {
|
|
229
229
|
start: [
|
|
230
230
|
"Inspect the Minion's Work: The [Diff] section shows the first step of the plan.",
|
|
@@ -258,7 +258,7 @@ export const MISCHIEF_PRESET = {
|
|
|
258
258
|
title: 'Oi!',
|
|
259
259
|
description: "Initiate Grand Scheme. Summon a Minion to the Lair (branch).\nYou are the Mastermind; they are the Henchman. Define the Conquest (Goal) with dominance.\nThe minion is bound to this Lair until the plot is realized.\nCall ONCE to start the machine.\n\nFlow: ${start} → [${drive} x N] → ${close}",
|
|
260
260
|
args: {
|
|
261
|
-
from_file: 'Optional scheme markdown path with title + sectioned objectives.',
|
|
261
|
+
from_file: 'Optional scheme markdown path with title + sectioned objectives. This file is auto-ignored by dirty-tree checks.',
|
|
262
262
|
title: 'Required unless provided via `from_file`. Operation codename.',
|
|
263
263
|
goal: 'Required unless provided via `from_file`. Conquest objective and end-state.',
|
|
264
264
|
directive: 'Optional first-order command (overrides draft directive).',
|
package/build/handlers/close.js
CHANGED
|
@@ -61,10 +61,10 @@ export function createCloseHandler() {
|
|
|
61
61
|
const outcome = await presentWork(closeInput);
|
|
62
62
|
if (input.petition === "CLAIM") {
|
|
63
63
|
if (!claimInput) {
|
|
64
|
-
throw new
|
|
64
|
+
throw new FlowError("INTERNAL_STATE", "Unexpected CLAIM input shape");
|
|
65
65
|
}
|
|
66
66
|
if (!("result" in outcome) || outcome.result !== "merged") {
|
|
67
|
-
throw new
|
|
67
|
+
throw new FlowError("INTERNAL_STATE", "Unexpected CLAIM outcome shape");
|
|
68
68
|
}
|
|
69
69
|
const finalOutcome = outcome;
|
|
70
70
|
appendDebugLog(`tool close CLAIM success branch=${finalOutcome.currentBranch} base=${finalOutcome.baseBranch}`, {
|
|
@@ -84,7 +84,7 @@ export function createCloseHandler() {
|
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
if (!("result" in outcome) || outcome.result !== "dropped") {
|
|
87
|
-
throw new
|
|
87
|
+
throw new FlowError("INTERNAL_STATE", "Unexpected FORFEIT outcome shape");
|
|
88
88
|
}
|
|
89
89
|
const finalOutcome = outcome;
|
|
90
90
|
appendDebugLog(`tool close FORFEIT success branch=${finalOutcome.currentBranch} base=${finalOutcome.baseBranch}`, {
|
package/build/handlers/shared.js
CHANGED
|
@@ -17,7 +17,7 @@ export function classifyToolError(error) {
|
|
|
17
17
|
export function handleToolError(input) {
|
|
18
18
|
const message = asMessage(input.error);
|
|
19
19
|
appendDebugLog(`${input.logLabel} error: ${message}`, { cwd: input.cwd, section: "script" });
|
|
20
|
-
const hint = pickHintFromError(input.error
|
|
20
|
+
const hint = pickHintFromError(input.error);
|
|
21
21
|
const { errorType, errorCode } = classifyToolError(input.error);
|
|
22
22
|
return buildToolErrorResponse({
|
|
23
23
|
tool: input.toolName,
|
package/build/utils/debug-log.js
CHANGED
package/build/utils/git-ops.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { simpleGit } from "simple-git";
|
|
2
|
+
import { FlowError } from "../common/errors.js";
|
|
2
3
|
import { appendDebugBlock } from "./debug-log.js";
|
|
3
4
|
const DEFAULT_GIT_TIMEOUT_MS = 15 * 1000;
|
|
4
5
|
function readPositiveIntEnv(name, fallback) {
|
|
@@ -80,7 +81,7 @@ export async function getCurrentBranch(cwd) {
|
|
|
80
81
|
throw wrapGitError("status", err, cwd);
|
|
81
82
|
}
|
|
82
83
|
if (!status.current) {
|
|
83
|
-
throw new
|
|
84
|
+
throw new FlowError("DETACHED_HEAD", "Detached HEAD or no branch found");
|
|
84
85
|
}
|
|
85
86
|
return status.current;
|
|
86
87
|
}
|
|
@@ -234,6 +235,34 @@ export async function getDirtyPaths(cwd) {
|
|
|
234
235
|
const files = await getDirtyFiles(cwd);
|
|
235
236
|
return Array.from(new Set(files.map(f => f.path)));
|
|
236
237
|
}
|
|
238
|
+
export async function isPathTracked(cwd, filePath) {
|
|
239
|
+
const git = createGit(cwd);
|
|
240
|
+
let output;
|
|
241
|
+
try {
|
|
242
|
+
output = await git.raw(["ls-files", "--", filePath]);
|
|
243
|
+
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
throw wrapGitError(`ls-files -- ${filePath}`, err, cwd);
|
|
246
|
+
}
|
|
247
|
+
return output
|
|
248
|
+
.split(/\r?\n/)
|
|
249
|
+
.some((line) => line.trim() === filePath);
|
|
250
|
+
}
|
|
251
|
+
export async function discardAllWorkingTreeChanges(cwd) {
|
|
252
|
+
const git = createGit(cwd);
|
|
253
|
+
try {
|
|
254
|
+
await git.raw(["reset", "--hard", "HEAD"]);
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
throw wrapGitError("reset --hard HEAD", err, cwd);
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
await git.raw(["clean", "-fd"]);
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
throw wrapGitError("clean -fd", err, cwd);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
237
266
|
export async function assertValidBranchName(cwd, branchName) {
|
|
238
267
|
const git = createGit(cwd);
|
|
239
268
|
try {
|
|
@@ -8,17 +8,27 @@ function isPlainObject(value) {
|
|
|
8
8
|
export function flattenMarkdownList(text) {
|
|
9
9
|
const ast = parseToAST(text, { allowSections: false });
|
|
10
10
|
const items = [];
|
|
11
|
-
|
|
11
|
+
const headingStack = [];
|
|
12
12
|
const pushItem = (content) => {
|
|
13
13
|
const trimmed = content.trim();
|
|
14
14
|
if (!trimmed)
|
|
15
15
|
return;
|
|
16
|
-
const
|
|
16
|
+
const headingPath = headingStack.map((entry) => entry.title);
|
|
17
|
+
const prefix = headingPath.length > 0 ? `**${headingPath.join(" > ")}**: ` : "";
|
|
17
18
|
items.push(`${prefix}${trimmed}`);
|
|
18
19
|
};
|
|
20
|
+
const updateHeadingPath = (level, rawText) => {
|
|
21
|
+
const title = rawText.trim().replace(/^\d+\.\s*/, "");
|
|
22
|
+
if (!title)
|
|
23
|
+
return;
|
|
24
|
+
while (headingStack.length > 0 && headingStack[headingStack.length - 1].level >= level) {
|
|
25
|
+
headingStack.pop();
|
|
26
|
+
}
|
|
27
|
+
headingStack.push({ level, title });
|
|
28
|
+
};
|
|
19
29
|
for (const node of ast.children) {
|
|
20
30
|
if (node.type === "heading") {
|
|
21
|
-
|
|
31
|
+
updateHeadingPath(node.level, node.text);
|
|
22
32
|
continue;
|
|
23
33
|
}
|
|
24
34
|
if (node.type === "list") {
|
|
@@ -6,6 +6,7 @@ import { FlowError } from "../common/errors.js";
|
|
|
6
6
|
import * as git from "../utils/git.js";
|
|
7
7
|
import { resolveOath } from "./oath.js";
|
|
8
8
|
export { resolveOath };
|
|
9
|
+
const DIRTY_WORKTREE_LIST_LIMIT = 10;
|
|
9
10
|
export async function ensureKeiyakuFiles(cwd) {
|
|
10
11
|
const keiyakuPath = path.join(cwd, KEIYAKU_FILE);
|
|
11
12
|
const tracePath = path.join(cwd, TRACE_FILE);
|
|
@@ -36,13 +37,21 @@ export async function assertCleanWorkingTree(cwd, ignorePatterns) {
|
|
|
36
37
|
.getDirtyFiles(cwd)
|
|
37
38
|
.then((files) => files.filter((file) => !ignoredPaths.has(normalizePathForDirtyMatch(cwd, file.path))));
|
|
38
39
|
if (dirtyFiles.length > 0) {
|
|
39
|
-
const
|
|
40
|
+
const shown = dirtyFiles.slice(0, DIRTY_WORKTREE_LIST_LIMIT);
|
|
41
|
+
const list = shown
|
|
40
42
|
.map((f) => {
|
|
41
43
|
const status = `${f.index}${f.working_dir}`;
|
|
42
44
|
return ` ${status} ${f.path}`;
|
|
43
45
|
})
|
|
44
46
|
.join("\n");
|
|
45
|
-
|
|
47
|
+
const overflowCount = dirtyFiles.length - shown.length;
|
|
48
|
+
const overflowLine = overflowCount > 0 ? `\n ... (+${overflowCount} more)` : "";
|
|
49
|
+
const ignoredList = ignoredPaths.size > 0
|
|
50
|
+
? `\n\nIgnored uncommitted paths (not blocking):\n${Array.from(ignoredPaths)
|
|
51
|
+
.map((pathValue) => ` - ${pathValue}`)
|
|
52
|
+
.join("\n")}`
|
|
53
|
+
: "";
|
|
54
|
+
throw new FlowError("DIRTY_WORKTREE", `Uncommitted changes detected in working tree:\n${list}${overflowLine}${ignoredList}\n\nPlease commit or stash blocking changes before proceeding.`);
|
|
46
55
|
}
|
|
47
56
|
}
|
|
48
57
|
export async function buildNoActiveKeiyakuGuidance(cwd, toolName) {
|
package/build/workflow/drive.js
CHANGED
|
@@ -55,6 +55,7 @@ export async function driveServant(input) {
|
|
|
55
55
|
await appendReview(cwd, plan.targetRound, plan.reviewReason);
|
|
56
56
|
await git.addFiles(cwd, TRACE_FILE);
|
|
57
57
|
await git.commit(cwd, `keiyaku(${title}): iterate round ${plan.targetRound}`);
|
|
58
|
+
const commit = await git.getLatestCommitHash(cwd);
|
|
58
59
|
const { roundSummary } = await runAndRecordRound(cwd, title, plan.targetRound, plan.prompt, {
|
|
59
60
|
signal,
|
|
60
61
|
name,
|
|
@@ -63,6 +64,7 @@ export async function driveServant(input) {
|
|
|
63
64
|
await appendRoundSystemNote(cwd, plan.targetRound, "Subagent execution cancelled by user/client.");
|
|
64
65
|
await git.addFiles(cwd, TRACE_FILE);
|
|
65
66
|
await git.commit(cwd, `keiyaku(${title}): round ${plan.targetRound} cancelled`);
|
|
67
|
+
await git.getLatestCommitHash(cwd);
|
|
66
68
|
},
|
|
67
69
|
});
|
|
68
70
|
const summary = renderRoundSummary(roundSummary, TOOL_DEFAULT_POLICY);
|
|
@@ -77,6 +79,7 @@ export async function driveServant(input) {
|
|
|
77
79
|
criteria,
|
|
78
80
|
currentBranch: keiyakuBranch,
|
|
79
81
|
baseBranch,
|
|
82
|
+
commit,
|
|
80
83
|
};
|
|
81
84
|
}
|
|
82
85
|
catch (err) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as fs from "fs/promises";
|
|
2
2
|
import * as path from "path";
|
|
3
|
-
import { KEIYAKU_FILE, TRACE_FILE } from "../common/constants.js";
|
|
3
|
+
import { KEIYAKU_DRAFT_FILE, KEIYAKU_FILE, TRACE_FILE } from "../common/constants.js";
|
|
4
4
|
import { resolveTermPreset } from "../config/term-presets.js";
|
|
5
|
-
import { appendDebugLog } from "../utils/debug-log.js";
|
|
5
|
+
import { appendDebugLog, shouldEmitProgressLogs } from "../utils/debug-log.js";
|
|
6
6
|
import { FlowError, wrapFlowError } from "../common/errors.js";
|
|
7
7
|
import * as git from "../utils/git.js";
|
|
8
8
|
import { computeTraceState, readTraceContent } from "../utils/trace.js";
|
|
@@ -95,6 +95,13 @@ function requireChecks(name, values) {
|
|
|
95
95
|
}
|
|
96
96
|
return values;
|
|
97
97
|
}
|
|
98
|
+
async function removeClaimProtocolFiles(cwd) {
|
|
99
|
+
await fs.unlink(path.join(cwd, KEIYAKU_FILE));
|
|
100
|
+
await fs.unlink(path.join(cwd, TRACE_FILE));
|
|
101
|
+
}
|
|
102
|
+
function formatCloseDiffSummary(stats, baseBranch) {
|
|
103
|
+
return `Range ${baseBranch}...HEAD | Files ${stats.filesChanged} | +${stats.insertions} / -${stats.deletions}`;
|
|
104
|
+
}
|
|
98
105
|
export async function presentWork(input) {
|
|
99
106
|
const { cwd } = input;
|
|
100
107
|
const isRepo = await git.isGitRepo(cwd);
|
|
@@ -113,6 +120,7 @@ export async function presentWork(input) {
|
|
|
113
120
|
const petition = input.petition;
|
|
114
121
|
if (petition === "FORFEIT") {
|
|
115
122
|
let round = 0;
|
|
123
|
+
let preservedDraftContent;
|
|
116
124
|
try {
|
|
117
125
|
const trace = await fs.readFile(path.join(cwd, TRACE_FILE), "utf-8");
|
|
118
126
|
round = computeTraceState(trace).maxRound;
|
|
@@ -120,11 +128,39 @@ export async function presentWork(input) {
|
|
|
120
128
|
catch {
|
|
121
129
|
round = 0;
|
|
122
130
|
}
|
|
123
|
-
await assertCleanWorkingTree(cwd);
|
|
124
131
|
try {
|
|
132
|
+
preservedDraftContent = await fs.readFile(path.join(cwd, KEIYAKU_DRAFT_FILE), "utf-8");
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error?.code !== "ENOENT") {
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const dirtyFiles = await git.getDirtyFiles(cwd);
|
|
140
|
+
const droppedChanges = dirtyFiles.map((file) => `${file.index}${file.working_dir} ${file.path}`);
|
|
141
|
+
try {
|
|
142
|
+
if (droppedChanges.length > 0) {
|
|
143
|
+
await git.discardAllWorkingTreeChanges(cwd);
|
|
144
|
+
}
|
|
125
145
|
await git.checkoutBranch(cwd, baseBranch);
|
|
126
146
|
await git.deleteBranch(cwd, keiyakuBranch, true);
|
|
127
147
|
await git.clearKeiyakuBase(cwd, keiyakuBranch);
|
|
148
|
+
if (preservedDraftContent !== undefined) {
|
|
149
|
+
const canonicalDraftPath = path.join(cwd, KEIYAKU_DRAFT_FILE);
|
|
150
|
+
try {
|
|
151
|
+
// Restore as untracked recovery artifact on the base branch.
|
|
152
|
+
await fs.writeFile(canonicalDraftPath, preservedDraftContent, { flag: "wx" });
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error?.code === "EEXIST") {
|
|
156
|
+
const fallbackDraftFile = "KEIYAKU.draft.forfeit.md";
|
|
157
|
+
await fs.writeFile(path.join(cwd, fallbackDraftFile), preservedDraftContent, { flag: "wx" });
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
throw error;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
128
164
|
}
|
|
129
165
|
catch (err) {
|
|
130
166
|
throw wrapFlowError(`execute FORFEIT (${keiyakuBranch} -> ${baseBranch})`, err);
|
|
@@ -136,7 +172,10 @@ export async function presentWork(input) {
|
|
|
136
172
|
currentBranch: baseBranch,
|
|
137
173
|
baseBranch,
|
|
138
174
|
deletedBranch: keiyakuBranch,
|
|
139
|
-
diff:
|
|
175
|
+
diff: droppedChanges.length > 0
|
|
176
|
+
? `Forfeited without merge. Dropped ${droppedChanges.length} local change(s).`
|
|
177
|
+
: "Forfeited without merge.",
|
|
178
|
+
droppedChanges,
|
|
140
179
|
};
|
|
141
180
|
}
|
|
142
181
|
await ensureKeiyakuFiles(cwd);
|
|
@@ -169,35 +208,41 @@ export async function presentWork(input) {
|
|
|
169
208
|
if (!oathMatches(input.oath, expectedOath)) {
|
|
170
209
|
throw new FlowError("OATH_MISMATCH", `Oath mismatch. Correct oath: ${expectedOath}`);
|
|
171
210
|
}
|
|
172
|
-
await assertCleanWorkingTree(cwd);
|
|
211
|
+
await assertCleanWorkingTree(cwd, [KEIYAKU_DRAFT_FILE]);
|
|
173
212
|
try {
|
|
174
213
|
const invokeDiffLog = `[CLAIM] Collecting diff preview against base '${baseBranch}'`;
|
|
175
|
-
|
|
214
|
+
if (shouldEmitProgressLogs())
|
|
215
|
+
console.error(invokeDiffLog);
|
|
176
216
|
appendDebugLog(invokeDiffLog, { cwd, section: "script" });
|
|
177
217
|
const invokeReadLog = "[CLAIM] Reading keiyaku protocol files";
|
|
178
|
-
|
|
218
|
+
if (shouldEmitProgressLogs())
|
|
219
|
+
console.error(invokeReadLog);
|
|
179
220
|
appendDebugLog(invokeReadLog, { cwd, section: "script" });
|
|
180
221
|
const keiyakuContent = await fs.readFile(path.join(cwd, KEIYAKU_FILE), "utf-8");
|
|
181
222
|
const message = buildMergeMessage(title, keiyakuContent, traceContent);
|
|
223
|
+
const diffStats = await git.getDiffStats(cwd, baseBranch);
|
|
224
|
+
const diff = formatCloseDiffSummary(diffStats, baseBranch);
|
|
182
225
|
const invokeCleanupLog = "[CLAIM] Removing protocol files and creating cleanup commit";
|
|
183
|
-
|
|
226
|
+
if (shouldEmitProgressLogs())
|
|
227
|
+
console.error(invokeCleanupLog);
|
|
184
228
|
appendDebugLog(invokeCleanupLog, { cwd, section: "script" });
|
|
185
|
-
await
|
|
186
|
-
await
|
|
187
|
-
await git.addFiles(cwd, "-A");
|
|
229
|
+
await removeClaimProtocolFiles(cwd);
|
|
230
|
+
await git.addFiles(cwd, [KEIYAKU_FILE, TRACE_FILE]);
|
|
188
231
|
await git.commit(cwd, `keiyaku(${title}): cleanup`);
|
|
189
|
-
const diff = await git.getDiffPreviewText(cwd, baseBranch);
|
|
190
232
|
const invokeCheckoutLog = `[CLAIM] Checking out base branch '${baseBranch}'`;
|
|
191
|
-
|
|
233
|
+
if (shouldEmitProgressLogs())
|
|
234
|
+
console.error(invokeCheckoutLog);
|
|
192
235
|
appendDebugLog(invokeCheckoutLog, { cwd, section: "script" });
|
|
193
236
|
await git.checkoutBranch(cwd, baseBranch);
|
|
194
237
|
const invokeMergeLog = `[CLAIM] Merging '${keiyakuBranch}' into '${baseBranch}'`;
|
|
195
|
-
|
|
238
|
+
if (shouldEmitProgressLogs())
|
|
239
|
+
console.error(invokeMergeLog);
|
|
196
240
|
appendDebugLog(invokeMergeLog, { cwd, section: "script" });
|
|
197
241
|
await git.merge(cwd, keiyakuBranch, message);
|
|
198
|
-
const
|
|
242
|
+
const commit = await git.getLatestCommitHash(cwd);
|
|
199
243
|
const invokeFinalizeLog = `[CLAIM] Deleting merged branch '${keiyakuBranch}' and clearing metadata`;
|
|
200
|
-
|
|
244
|
+
if (shouldEmitProgressLogs())
|
|
245
|
+
console.error(invokeFinalizeLog);
|
|
201
246
|
appendDebugLog(invokeFinalizeLog, { cwd, section: "script" });
|
|
202
247
|
await git.deleteBranch(cwd, keiyakuBranch, true);
|
|
203
248
|
await git.clearKeiyakuBase(cwd, keiyakuBranch);
|
|
@@ -208,7 +253,7 @@ export async function presentWork(input) {
|
|
|
208
253
|
round,
|
|
209
254
|
currentBranch: baseBranch,
|
|
210
255
|
baseBranch,
|
|
211
|
-
|
|
256
|
+
commit,
|
|
212
257
|
mergedInto: baseBranch,
|
|
213
258
|
deletedBranch: keiyakuBranch,
|
|
214
259
|
diff,
|
|
@@ -222,5 +267,5 @@ export async function presentWork(input) {
|
|
|
222
267
|
throw wrapFlowError(`execute CLAIM (merge ${keiyakuBranch} into ${baseBranch})`, err);
|
|
223
268
|
}
|
|
224
269
|
}
|
|
225
|
-
throw new
|
|
270
|
+
throw new FlowError("INVALID_CLOSE_PETITION", `unsupported close petition: ${petition}`);
|
|
226
271
|
}
|
|
@@ -135,8 +135,12 @@ export function buildKeiyakuSuccessResponse(result, input) {
|
|
|
135
135
|
...formatMaybe("Path", input.cwd, 300),
|
|
136
136
|
...formatMaybe("Current Branch", result.currentBranch, 200),
|
|
137
137
|
...formatMaybe("Base Branch", result.baseBranch, 200),
|
|
138
|
+
...formatMaybe("Commit", result.commit, 100),
|
|
138
139
|
];
|
|
139
|
-
const
|
|
140
|
+
const summaryLine = result.commit
|
|
141
|
+
? `Created branch '${result.currentBranch}' (base: '${result.baseBranch}') [${result.commit}].`
|
|
142
|
+
: `Created branch '${result.currentBranch}' (base: '${result.baseBranch}').`;
|
|
143
|
+
const text = assembleResponse(`◆ Started (Round ${result.round})`, summaryLine, [summarySection, constraintsSection, diffSection].filter((section) => section !== null), infoLines);
|
|
140
144
|
return {
|
|
141
145
|
content: [{ type: "text", text }],
|
|
142
146
|
structuredContent: buildSuccessStructuredContent(getStartToolName(), resultData),
|
|
@@ -154,8 +158,12 @@ export function buildDriveResponse(result, input) {
|
|
|
154
158
|
...formatMaybe("Path", input.cwd, 300),
|
|
155
159
|
...formatMaybe("Current Branch", result.currentBranch, 200),
|
|
156
160
|
...formatMaybe("Base Branch", result.baseBranch, 200),
|
|
161
|
+
...formatMaybe("Commit", result.commit, 100),
|
|
157
162
|
];
|
|
158
|
-
const
|
|
163
|
+
const summaryLine = result.commit
|
|
164
|
+
? `Updated branch '${result.currentBranch}' [${result.commit}].`
|
|
165
|
+
: `Updated branch '${result.currentBranch}'.`;
|
|
166
|
+
const text = assembleResponse(`◆ Driven (Round ${result.round})`, summaryLine, [summarySection, goalSection, constraintsSection, criteriaSection, diffSection].filter((section) => section !== null), infoLines);
|
|
159
167
|
return {
|
|
160
168
|
content: [{ type: "text", text }],
|
|
161
169
|
structuredContent: buildSuccessStructuredContent(getDriveToolName(), resultData),
|
|
@@ -181,7 +189,7 @@ export function buildCloseDoneResponse(result, input) {
|
|
|
181
189
|
const infoLines = [
|
|
182
190
|
...formatMaybe("Path", input.cwd, 300),
|
|
183
191
|
...formatMaybe("Result", result.result, 100),
|
|
184
|
-
...formatMaybe("
|
|
192
|
+
...formatMaybe("Commit", result.commit, 100),
|
|
185
193
|
...formatMaybe("Merged Into", result.mergedInto, 200),
|
|
186
194
|
...formatMaybe("Deleted Branch", result.deletedBranch, 200),
|
|
187
195
|
...formatMaybe("Current Branch", result.currentBranch, 200),
|
|
@@ -191,7 +199,9 @@ export function buildCloseDoneResponse(result, input) {
|
|
|
191
199
|
`Scores: precise=${input.score_precise}/10 minimal=${input.score_minimal}/10 isolated=${input.score_isolated}/10 idiomatic=${input.score_idiomatic}/10 cohesive=${input.score_cohesive}/10`,
|
|
192
200
|
...formatMaybe("Oath", input.oath, 220),
|
|
193
201
|
];
|
|
194
|
-
const text = assembleResponse("✓ Keiyaku Fulfilled (CLAIM)",
|
|
202
|
+
const text = assembleResponse("✓ Keiyaku Fulfilled (CLAIM)", result.commit
|
|
203
|
+
? `Merged '${result.deletedBranch}' into '${result.mergedInto}' [${result.commit}]. Deleted feature branch. Note: KEIYAKU.draft.md preserved (if present).`
|
|
204
|
+
: `Merged '${result.deletedBranch}' into '${result.mergedInto}'. Deleted feature branch. Note: KEIYAKU.draft.md preserved (if present).`, [typeof diffSection === "string" ? null : diffSection].filter((section) => section !== null), infoLines);
|
|
195
205
|
return {
|
|
196
206
|
content: [{ type: "text", text }],
|
|
197
207
|
structuredContent: buildSuccessStructuredContent(closeToolName, resultData),
|
|
@@ -200,13 +210,17 @@ export function buildCloseDoneResponse(result, input) {
|
|
|
200
210
|
export function buildCloseDropResponse(result, input) {
|
|
201
211
|
const { status: _status, ...resultData } = result;
|
|
202
212
|
const closeToolName = getCloseToolName();
|
|
213
|
+
const droppedChanges = result.droppedChanges ?? [];
|
|
214
|
+
const warningSection = buildSection("Warning", formatList("Dropped Local Changes", droppedChanges, { maxItems: 20, maxItemChars: 220 }));
|
|
203
215
|
const infoLines = [
|
|
204
216
|
...formatMaybe("Path", input.cwd, 300),
|
|
205
217
|
...formatMaybe("Deleted Branch", result.deletedBranch, 200),
|
|
206
218
|
...formatMaybe("Current Branch", result.currentBranch, 200),
|
|
207
219
|
...formatMaybe("Base Branch", result.baseBranch, 200),
|
|
208
220
|
];
|
|
209
|
-
const text = assembleResponse("✗ Keiyaku Forfeited (FORFEIT)",
|
|
221
|
+
const text = assembleResponse("✗ Keiyaku Forfeited (FORFEIT)", droppedChanges.length > 0
|
|
222
|
+
? `Deleted '${result.deletedBranch}'. Switched back to '${result.baseBranch}'. Dropped ${droppedChanges.length} local change(s). Note: KEIYAKU.draft.md preserved (if present).`
|
|
223
|
+
: `Deleted '${result.deletedBranch}'. Switched back to '${result.baseBranch}'. Note: KEIYAKU.draft.md preserved (if present).`, [warningSection].filter((section) => section !== null), infoLines);
|
|
210
224
|
return {
|
|
211
225
|
content: [{ type: "text", text }],
|
|
212
226
|
structuredContent: buildSuccessStructuredContent(closeToolName, resultData),
|
package/build/workflow/round.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { selectSubagent } from "../agents/selector.js";
|
|
2
2
|
import { describeSubagentFailure, runSubagent } from "../agents/round-runner.js";
|
|
3
|
-
import { TRACE_FILE } from "../common/constants.js";
|
|
3
|
+
import { KEIYAKU_DRAFT_FILE, TRACE_FILE } from "../common/constants.js";
|
|
4
4
|
import { FlowError } from "../common/errors.js";
|
|
5
|
-
import { appendDebugBlock, appendDebugLog } from "../utils/debug-log.js";
|
|
5
|
+
import { appendDebugBlock, appendDebugLog, shouldEmitProgressLogs } from "../utils/debug-log.js";
|
|
6
6
|
import * as git from "../utils/git.js";
|
|
7
7
|
import { appendRoundReport } from "../utils/trace.js";
|
|
8
8
|
import { parseRoundSummary } from "./round-summary.js";
|
|
@@ -46,6 +46,10 @@ async function appendRoundResult(cwd, round, summary, failureMessage) {
|
|
|
46
46
|
filesModified,
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
|
+
async function stageRoundCommit(cwd) {
|
|
50
|
+
// Never stage draft recovery artifacts; they should remain local unless explicitly committed by the user.
|
|
51
|
+
await git.addFiles(cwd, ["-A", "--", ".", `:(exclude)${KEIYAKU_DRAFT_FILE}`]);
|
|
52
|
+
}
|
|
49
53
|
export async function runAndRecordRound(cwd, titleToken, round, prompt, options) {
|
|
50
54
|
const roundSubagent = selectSubagent(options.name);
|
|
51
55
|
let rawSummary;
|
|
@@ -62,11 +66,13 @@ export async function runAndRecordRound(cwd, titleToken, round, prompt, options)
|
|
|
62
66
|
}
|
|
63
67
|
const failure = describeSubagentFailure(err, roundSubagent.displayName, round);
|
|
64
68
|
const failureLog = `[Subagent failure] name=${failure.name} round=${failure.round} code=${failure.errorCode} timeoutMs=${failure.timeoutMs ?? "unknown"} exitCode=${failure.exitCode ?? "none"}`;
|
|
65
|
-
|
|
69
|
+
if (shouldEmitProgressLogs())
|
|
70
|
+
console.error(failureLog);
|
|
66
71
|
appendDebugLog(failureLog, { cwd, section: "script" });
|
|
67
72
|
if (failure.stderrSnippet) {
|
|
68
73
|
const failureStderrLog = `[Subagent failure stderr]\n${failure.stderrSnippet}`;
|
|
69
|
-
|
|
74
|
+
if (shouldEmitProgressLogs())
|
|
75
|
+
console.error(failureStderrLog);
|
|
70
76
|
appendDebugBlock("subagent failure stderr", failure.stderrSnippet, { cwd, section: "codex-stderr" });
|
|
71
77
|
}
|
|
72
78
|
failureMessage = failure.message.trim() || "Unknown error.";
|
|
@@ -74,12 +80,12 @@ export async function runAndRecordRound(cwd, titleToken, round, prompt, options)
|
|
|
74
80
|
? `Round ${round} completed with subagent execution failure recorded in trace.`
|
|
75
81
|
: "Round 1 completed with subagent execution failure recorded in trace.";
|
|
76
82
|
await appendRoundResult(cwd, round, summary, failureMessage);
|
|
77
|
-
await
|
|
83
|
+
await stageRoundCommit(cwd);
|
|
78
84
|
await git.commit(cwd, `keiyaku(${titleToken}): round ${round}`);
|
|
79
85
|
throw new FlowError("ROUND_SUBAGENT_FAILED", formatSubagentFailureMessage(failure), err);
|
|
80
86
|
}
|
|
81
87
|
await appendRoundResult(cwd, round, rawSummary);
|
|
82
|
-
await
|
|
88
|
+
await stageRoundCommit(cwd);
|
|
83
89
|
await git.commit(cwd, `keiyaku(${titleToken}): round ${round}`);
|
|
84
90
|
return { roundSummary: parseRoundSummary(rawSummary) };
|
|
85
91
|
}
|
package/build/workflow/start.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from "fs/promises";
|
|
2
2
|
import * as path from "path";
|
|
3
3
|
import { KEIYAKU_DRAFT_FILE, KEIYAKU_FILE, TRACE_FILE } from "../common/constants.js";
|
|
4
|
-
import { appendDebugLog } from "../utils/debug-log.js";
|
|
4
|
+
import { appendDebugLog, shouldEmitProgressLogs } from "../utils/debug-log.js";
|
|
5
5
|
import { FlowError, isFlowError, wrapFlowError } from "../common/errors.js";
|
|
6
6
|
import * as git from "../utils/git.js";
|
|
7
7
|
import { computeTraceState, readTraceContent } from "../utils/trace.js";
|
|
@@ -15,6 +15,7 @@ import { runAndRecordRound } from "./round.js";
|
|
|
15
15
|
const BASE_CONSTRAINTS_FILE = path.join(".keiyaku", "base-constraints.md");
|
|
16
16
|
const ACTIVE_KEIYAKU_PREVIEW_MAX_CHARS = 8000;
|
|
17
17
|
const KNOWN_SECTIONS = new Set(["goal", "directive", "context", "constraints", "criteria", "acceptance criteria"]);
|
|
18
|
+
const INTERNAL_START_DIRTY_ALLOWLIST = [];
|
|
18
19
|
function normalizeSectionTitle(title) {
|
|
19
20
|
return title.trim().toLowerCase().replace(/\s+/g, " ");
|
|
20
21
|
}
|
|
@@ -234,24 +235,11 @@ async function fileExists(filePath) {
|
|
|
234
235
|
throw error;
|
|
235
236
|
}
|
|
236
237
|
}
|
|
237
|
-
function
|
|
238
|
-
return path.isAbsolute(fromFile) ? path.resolve(fromFile) : path.resolve(cwd, fromFile);
|
|
239
|
-
}
|
|
240
|
-
function isCanonicalDraftFromFile(cwd, fromFile) {
|
|
241
|
-
if (!fromFile)
|
|
242
|
-
return false;
|
|
243
|
-
return resolveFromFilePath(cwd, fromFile) === path.resolve(cwd, KEIYAKU_DRAFT_FILE);
|
|
244
|
-
}
|
|
245
|
-
async function assertStartPreFlight(cwd, fromFile) {
|
|
238
|
+
async function assertStartPreFlight(cwd) {
|
|
246
239
|
const keiyakuPath = path.join(cwd, KEIYAKU_FILE);
|
|
247
240
|
if (await fileExists(keiyakuPath)) {
|
|
248
241
|
throw new FlowError("KEIYAKU_FILE_EXISTS", `pre-flight failed: ${KEIYAKU_FILE} already exists in cwd`);
|
|
249
242
|
}
|
|
250
|
-
const draftPath = path.join(cwd, KEIYAKU_DRAFT_FILE);
|
|
251
|
-
const draftExists = await fileExists(draftPath);
|
|
252
|
-
if (draftExists && !isCanonicalDraftFromFile(cwd, fromFile)) {
|
|
253
|
-
throw new FlowError("DRAFT_FILE_EXISTS", `pre-flight failed: ${KEIYAKU_DRAFT_FILE} exists but from_file does not target it`);
|
|
254
|
-
}
|
|
255
243
|
}
|
|
256
244
|
function normalizeTitleForBranch(title) {
|
|
257
245
|
const normalized = title
|
|
@@ -268,6 +256,7 @@ function normalizeTitleForBranch(title) {
|
|
|
268
256
|
}
|
|
269
257
|
async function resolveStartInput(cwd, input) {
|
|
270
258
|
const fromFile = normalizeOptionalText(input.from_file);
|
|
259
|
+
const dirtyAllowlist = [...INTERNAL_START_DIRTY_ALLOWLIST];
|
|
271
260
|
const provided = {
|
|
272
261
|
title: normalizeOptionalText(input.title),
|
|
273
262
|
goal: normalizeOptionalText(input.goal),
|
|
@@ -297,6 +286,7 @@ async function resolveStartInput(cwd, input) {
|
|
|
297
286
|
criteria: normalizeMarkdownListItems("criteria", provided.criteria),
|
|
298
287
|
constraints: normalizeMarkdownListItems("constraints", provided.constraints ?? []),
|
|
299
288
|
fromFile: undefined,
|
|
289
|
+
dirtyAllowlist,
|
|
300
290
|
};
|
|
301
291
|
}
|
|
302
292
|
const draftPath = path.isAbsolute(fromFile) ? fromFile : path.join(cwd, fromFile);
|
|
@@ -337,6 +327,7 @@ async function resolveStartInput(cwd, input) {
|
|
|
337
327
|
criteria: normalizeMarkdownListItems("criteria", criteria),
|
|
338
328
|
constraints: normalizeMarkdownListItems("constraints", constraints),
|
|
339
329
|
fromFile,
|
|
330
|
+
dirtyAllowlist,
|
|
340
331
|
};
|
|
341
332
|
}
|
|
342
333
|
async function readBaseConstraints(cwd) {
|
|
@@ -379,18 +370,22 @@ async function handleStartFailure(cwd, error, keiyakuContent, fromFile) {
|
|
|
379
370
|
try {
|
|
380
371
|
const draftPath = path.join(cwd, KEIYAKU_DRAFT_FILE);
|
|
381
372
|
if (await fileExists(draftPath)) {
|
|
382
|
-
|
|
373
|
+
if (shouldEmitProgressLogs())
|
|
374
|
+
console.warn("[keiyaku] Race condition: Draft file exists. Content not saved.");
|
|
383
375
|
}
|
|
384
376
|
else {
|
|
385
377
|
await fs.writeFile(draftPath, keiyakuContent, { flag: "wx" });
|
|
386
378
|
const startToolName = resolveTermPreset().tools.start.name;
|
|
387
|
-
|
|
379
|
+
if (shouldEmitProgressLogs()) {
|
|
380
|
+
console.error(`[keiyaku] Start failed. Draft saved to ${KEIYAKU_DRAFT_FILE}. Retry with: ${startToolName} --from_file ${KEIYAKU_DRAFT_FILE}`);
|
|
381
|
+
}
|
|
388
382
|
savedDraft = true;
|
|
389
383
|
}
|
|
390
384
|
}
|
|
391
385
|
catch (draftSaveError) {
|
|
392
386
|
const message = draftSaveError instanceof Error ? draftSaveError.message : String(draftSaveError);
|
|
393
|
-
|
|
387
|
+
if (shouldEmitProgressLogs())
|
|
388
|
+
console.error(`[keiyaku] Failed to save draft file: ${message}`);
|
|
394
389
|
}
|
|
395
390
|
}
|
|
396
391
|
if (savedDraft) {
|
|
@@ -408,7 +403,6 @@ async function handleStartFailure(cwd, error, keiyakuContent, fromFile) {
|
|
|
408
403
|
export async function startKeiyaku(input) {
|
|
409
404
|
const { cwd, signal, name } = input;
|
|
410
405
|
const resolved = await resolveStartInput(cwd, input);
|
|
411
|
-
const startedFromCanonicalDraft = isCanonicalDraftFromFile(cwd, resolved.fromFile);
|
|
412
406
|
let keiyakuContent;
|
|
413
407
|
let createdBranch = false;
|
|
414
408
|
let keiyakuBranch;
|
|
@@ -427,11 +421,15 @@ export async function startKeiyaku(input) {
|
|
|
427
421
|
const existingBranches = await git.listLocalKeiyakuBranches(cwd);
|
|
428
422
|
if (existingBranches.length > 0) {
|
|
429
423
|
const branchWarning = `[keiyaku] existing local keiyaku branches detected (non-blocking): ${existingBranches.join(", ")}`;
|
|
430
|
-
|
|
424
|
+
if (shouldEmitProgressLogs())
|
|
425
|
+
console.error(branchWarning);
|
|
431
426
|
appendDebugLog(branchWarning, { cwd, section: "script" });
|
|
432
427
|
}
|
|
433
|
-
await assertStartPreFlight(cwd
|
|
434
|
-
|
|
428
|
+
await assertStartPreFlight(cwd);
|
|
429
|
+
// `KEIYAKU.draft.md` is a recovery artifact and should not block starting a new session
|
|
430
|
+
// (unless the user explicitly chooses to start from it).
|
|
431
|
+
const dirtyAllowlist = Array.from(new Set([KEIYAKU_DRAFT_FILE, ...(resolved.fromFile ? [resolved.fromFile] : []), ...resolved.dirtyAllowlist]));
|
|
432
|
+
await assertCleanWorkingTree(cwd, dirtyAllowlist.length > 0 ? dirtyAllowlist : undefined);
|
|
435
433
|
baseBranch = await git.getCurrentBranch(cwd);
|
|
436
434
|
const branchToken = normalizeTitleForBranch(resolved.title);
|
|
437
435
|
keiyakuBranch = `keiyaku/${branchToken}`;
|
|
@@ -440,7 +438,8 @@ export async function startKeiyaku(input) {
|
|
|
440
438
|
createdBranch = true;
|
|
441
439
|
await git.setKeiyakuBase(cwd, keiyakuBranch, baseBranch);
|
|
442
440
|
const switchedLog = `Switched to branch: ${keiyakuBranch} (base: ${baseBranch})`;
|
|
443
|
-
|
|
441
|
+
if (shouldEmitProgressLogs())
|
|
442
|
+
console.error(switchedLog);
|
|
444
443
|
appendDebugLog(switchedLog, { cwd, section: "script" });
|
|
445
444
|
// Ensure we write the content we prepared.
|
|
446
445
|
if (!keiyakuContent) {
|
|
@@ -454,6 +453,7 @@ export async function startKeiyaku(input) {
|
|
|
454
453
|
await fs.writeFile(path.join(cwd, TRACE_FILE), "# Keiyaku Trace\n");
|
|
455
454
|
await git.addFiles(cwd, [KEIYAKU_FILE, TRACE_FILE]);
|
|
456
455
|
await git.commit(cwd, `keiyaku(${branchToken}): open`);
|
|
456
|
+
const commit = await git.getLatestCommitHash(cwd);
|
|
457
457
|
const prompt = buildStartPrompt(resolved.title, resolved.goal, resolved.directive);
|
|
458
458
|
const { roundSummary } = await runAndRecordRound(cwd, branchToken, 1, prompt, {
|
|
459
459
|
signal,
|
|
@@ -462,16 +462,6 @@ export async function startKeiyaku(input) {
|
|
|
462
462
|
});
|
|
463
463
|
const summary = renderRoundSummary(roundSummary, TOOL_DEFAULT_POLICY);
|
|
464
464
|
const diff = await git.getIncrementalDiff(cwd);
|
|
465
|
-
if (startedFromCanonicalDraft) {
|
|
466
|
-
try {
|
|
467
|
-
await fs.unlink(path.join(cwd, KEIYAKU_DRAFT_FILE));
|
|
468
|
-
}
|
|
469
|
-
catch (error) {
|
|
470
|
-
if (error?.code !== "ENOENT") {
|
|
471
|
-
throw error;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
465
|
return {
|
|
476
466
|
status: "success",
|
|
477
467
|
round: 1,
|
|
@@ -480,6 +470,7 @@ export async function startKeiyaku(input) {
|
|
|
480
470
|
constraints: constraintsSection,
|
|
481
471
|
currentBranch: keiyakuBranch,
|
|
482
472
|
baseBranch,
|
|
473
|
+
commit,
|
|
483
474
|
};
|
|
484
475
|
}
|
|
485
476
|
catch (err) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astrosheep/keiyaku",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.20",
|
|
4
4
|
"description": "MCP server for running iterative keiyaku workflows with Codex subagents.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"prepublishOnly": "npm run build",
|
|
25
25
|
"start": "node build/index.js",
|
|
26
26
|
"test:unit": "node --import tsx --test --test-concurrency=1 tests/unit/unit.test.ts src/utils/keiyaku-document.test.ts",
|
|
27
|
-
"test:integration": "npx tsc && node --import tsx --test --test-concurrency=
|
|
28
|
-
"test": "node --import tsx --test --test-concurrency=1 tests/unit/unit.test.ts src/utils/keiyaku-document.test.ts && npx tsc && node --import tsx --test --test-concurrency=
|
|
27
|
+
"test:integration": "npx tsc && node --import tsx --test --test-concurrency=3 tests/integration/integration.test.ts",
|
|
28
|
+
"test": "node --import tsx --test --test-concurrency=1 tests/unit/unit.test.ts src/utils/keiyaku-document.test.ts && npx tsc && node --import tsx --test --test-concurrency=3 tests/integration/integration.test.ts"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@modelcontextprotocol/sdk": "*",
|