@unbrained/pm-cli 2026.5.2 → 2026.5.3
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/AGENTS.md +8 -1
- package/CHANGELOG.md +25 -0
- package/dist/cli/bootstrap-args.d.ts +18 -0
- package/dist/cli/bootstrap-args.js +242 -0
- package/dist/cli/bootstrap-args.js.map +1 -0
- package/dist/cli/commander-usage.d.ts +17 -0
- package/dist/cli/commander-usage.js +178 -0
- package/dist/cli/commander-usage.js.map +1 -0
- package/dist/cli/commands/activity.js +1 -9
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/calendar.js +3 -29
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/comments.js +1 -9
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/config.d.ts +21 -3
- package/dist/cli/commands/config.js +118 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.d.ts +90 -1
- package/dist/cli/commands/context.js +485 -23
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.js +2 -11
- package/dist/cli/commands/dedupe-audit.js.map +1 -1
- package/dist/cli/commands/history.js +1 -9
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/learnings.js +1 -9
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/list.js +3 -29
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/normalize.js +9 -6
- package/dist/cli/commands/normalize.js.map +1 -1
- package/dist/cli/commands/notes.js +1 -9
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/reindex.js +2 -7
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/search.js +4 -35
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test-runs.js +1 -11
- package/dist/cli/commands/test-runs.js.map +1 -1
- package/dist/cli/error-guidance.d.ts +13 -0
- package/dist/cli/error-guidance.js +43 -4
- package/dist/cli/error-guidance.js.map +1 -1
- package/dist/cli/extension-command-help.d.ts +48 -0
- package/dist/cli/extension-command-help.js +389 -0
- package/dist/cli/extension-command-help.js.map +1 -0
- package/dist/cli/help-content.js +9 -3
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/help-json-payload.d.ts +25 -0
- package/dist/cli/help-json-payload.js +265 -0
- package/dist/cli/help-json-payload.js.map +1 -0
- package/dist/cli/main.js +769 -4495
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/migration-gates.d.ts +22 -0
- package/dist/cli/migration-gates.js +146 -0
- package/dist/cli/migration-gates.js.map +1 -0
- package/dist/cli/register-list-query.d.ts +2 -0
- package/dist/cli/register-list-query.js +317 -0
- package/dist/cli/register-list-query.js.map +1 -0
- package/dist/cli/register-mutation.d.ts +2 -0
- package/dist/cli/register-mutation.js +795 -0
- package/dist/cli/register-mutation.js.map +1 -0
- package/dist/cli/register-operations.d.ts +2 -0
- package/dist/cli/register-operations.js +610 -0
- package/dist/cli/register-operations.js.map +1 -0
- package/dist/cli/register-setup.d.ts +2 -0
- package/dist/cli/register-setup.js +334 -0
- package/dist/cli/register-setup.js.map +1 -0
- package/dist/cli/registration-helpers.d.ts +53 -0
- package/dist/cli/registration-helpers.js +669 -0
- package/dist/cli/registration-helpers.js.map +1 -0
- package/dist/cli/shared-parsers.d.ts +6 -0
- package/dist/cli/shared-parsers.js +40 -0
- package/dist/cli/shared-parsers.js.map +1 -0
- package/dist/core/search/http-client.d.ts +29 -0
- package/dist/core/search/http-client.js +64 -0
- package/dist/core/search/http-client.js.map +1 -0
- package/dist/core/search/providers.d.ts +3 -13
- package/dist/core/search/providers.js +19 -69
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +2 -7
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/vector-stores.d.ts +3 -13
- package/dist/core/search/vector-stores.js +17 -66
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.d.ts +8 -0
- package/dist/core/sentry/helpers.js +28 -0
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/sentry/instrument.d.ts +21 -0
- package/dist/core/sentry/instrument.js +34 -3
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/constants.d.ts +3 -0
- package/dist/core/shared/constants.js +55 -1
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/front-matter-cache.d.ts +6 -0
- package/dist/core/store/front-matter-cache.js +150 -0
- package/dist/core/store/front-matter-cache.js.map +1 -0
- package/dist/core/store/item-store.js +2 -1
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings.js +36 -0
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +21 -3
- package/dist/core/telemetry/runtime.js +170 -10
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/sdk/cli-contracts.js +28 -0
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/types.d.ts +21 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -1
- package/docs/ARCHITECTURE.md +7 -1
- package/docs/COMMANDS.md +11 -1
- package/docs/CONFIGURATION.md +2 -0
- package/docs/RELEASING.md +33 -10
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"/","sources":["core/store/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACL,+BAA+B,EAC/B,kCAAkC,EAClC,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAWzD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,sBAAsB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACtD,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IACjD,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,QAAQ,EAAE;CAC/E,CAAC,CAAC;AAEH,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,KAAK,CAAC;QACN,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAClB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC9B,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QACzB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QAC1B,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;KAC5B,CAAC,CACH;SACA,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrH,QAAQ,EAAE,CAAC;SACR,KAAK,CACJ,CAAC,CAAC,KAAK,CAAC;QACN,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QACxB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACjB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;KACrB,CAAC,CACH;SACA,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC1C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC;SACD,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE;IAC3D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,QAAQ,EAAE;IACxD,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC;SACD,QAAQ,EAAE;IACb,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACvG,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,wBAAwB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClH,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtG,mBAAmB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxF,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxG,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpF,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnG,6BAA6B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACtD,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAChF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;KAC9B,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;KAChE,CAAC;IACF,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;KAC/E,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9E,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpF,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnG,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACxD,uCAAuC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvE,8CAA8C,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC9E,0CAA0C,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QAC1E,6CAA6C,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC9E,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,wBAAwB;IACpC,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACxC,CAAC;SACD,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE;KACrC,CAAC;SACD,QAAQ,EAAE;IACb,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,0BAA0B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClD,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACtC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACvD,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;KAC/C,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,2BAA2B;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC7B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACtC,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC;QACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;SAClB,CAAC;KACH,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;YACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;SACpB,CAAC;QACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,CAAC;KACH,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAY3C,SAAS,gCAAgC,CAAC,MAA2C;IACnF,OAAO,eAAe,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAmC;IACpE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,SAAS,6BAA6B,CAAC,UAA8B;IACnE,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,qBAAqB,EAAE,UAAU,CAAC,qBAAqB;YACvD,mBAAmB,EAAE,UAAU,CAAC,mBAAmB;YACnD,wBAAwB,EAAE,UAAU,CAAC,wBAAwB;YAC7D,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;YAC7C,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;YAC7C,6BAA6B,EAAE,UAAU,CAAC,6BAA6B;SACxE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAuF;IAEvF,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,yBAAyB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,gCAAgC,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO;YACL,MAAM;YACN,qBAAqB,EAAE,aAAa,CAAC,qBAAqB,IAAI,QAAQ,CAAC,qBAAqB;YAC5F,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,IAAI,QAAQ,CAAC,mBAAmB;YACtF,wBAAwB,EAAE,aAAa,CAAC,wBAAwB,IAAI,QAAQ,CAAC,wBAAwB;YACrG,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB;YAC7E,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,IAAI,QAAQ,CAAC,gBAAgB;YAC7E,6BAA6B,EAAE,aAAa,CAAC,6BAA6B,IAAI,QAAQ,CAAC,6BAA6B;SACrH,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM;QACN,GAAG,gCAAgC,CAAC,MAAM,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,+BAA+B,CAAC,OAAgB;IACvD,OAAO;QACL,QAAQ,EAAE,aAAa,EAAE;QACzB,QAAQ,EAAE;YACR,wBAAwB,EAAE,KAAK;SAChC;QACD,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,UAAU,GAAI,GAA+B,CAAC,WAAW,CAAC;IAChE,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,eAAe,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA4B;IACvD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACxH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,yCAAyC,CAAC,MAA4B;IAC7E,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;SAC5G,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACnC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAA0C,EAAE,CACzE;QACE,QAAQ;QACR,qBAAqB;QACrB,mBAAmB;QACnB,cAAc;QACd,UAAU;QACV,MAAM;QACN,YAAY;QACZ,QAAQ;QACR,SAAS;KACV,CAAC,QAAQ,CAAC,KAAK,CAAC,CAClB,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,MAA4B;IAClE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACrH,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC3C,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,MAAgC;IACzE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/C,OAAO;QACL,GAAG;QACH,MAAM;QACN,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACjD,WAAW,EAAE,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC3C,MAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM;QACN,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,2BAA2B,CAAC,UAA8B;IACjE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,uBAAuB,GAAG,UAAU,CAAC,sBAAsB,KAAK,SAAS,CAAC;IAChF,MAAM,4BAA4B,GAAG,UAAU,CAAC,2BAA2B,KAAK,SAAS,CAAC;IAC1F,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,KAAK,SAAS,CAAC;IACpD,MAAM,wBAAwB,GAAG,UAAU,CAAC,uBAAuB,KAAK,SAAS,CAAC;IAClF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACpF,MAAM,yBAAyB,GAAG,mBAAmB,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;SACvC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;SAC1D,MAAM,CAAC,CAAC,MAAM,EAAsC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC;SACvE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE;QAClC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuC,CAAC;QACpE,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,uBAAuB,IAAI,EAAE,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,oCAAoC,CAAC,MAAM,CAAC,CAAC;YAChE,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,SAAS;YACX,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACrD,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;YAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAC9C,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;IACL,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACxD,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACjD,sBAAsB,EAAE,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;QAClF,2BAA2B,EAAE,4BAA4B,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS;QACjG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACzC,uBAAuB,EAAE,wBAAwB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,WAA6C;IACxF,MAAM,UAAU,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;SACnC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;SAC5D,MAAM,CAAC,CAAC,UAAU,EAAoC,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC5D,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,CAAC;QACpC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,UAAU,GAAG,sBAAsB,CAAC;QACxC,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE;KACzD,CAAC,CAAC;IACH,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,QAAQ;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QACzD,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;QAC/C,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;QAClD,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QAC7D,UAAU,EAAE;YACV,GAAG,QAAQ,CAAC,UAAU;YACtB,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;YAC7C,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;YAC7C,wBAAwB,EAAE,yCAAyC,CAAC,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;YAClH,uCAAuC,EAAE,8BAA8B,CACrE,QAAQ,CAAC,UAAU,EAAE,uCAAuC;gBAC1D,QAAQ,CAAC,UAAU,CAAC,uCAAuC,CAC9D;YACD,8CAA8C,EAAE,8BAA8B,CAC5E,QAAQ,CAAC,UAAU,EAAE,8CAA8C;gBACjE,QAAQ,CAAC,UAAU,CAAC,8CAA8C,CACrE;YACD,0CAA0C,EAAE,8BAA8B,CACxE,QAAQ,CAAC,UAAU,EAAE,0CAA0C;gBAC7D,QAAQ,CAAC,UAAU,CAAC,0CAA0C,CACjE;YACD,6CAA6C,EAAE,8BAA8B,CAC3E,QAAQ,CAAC,UAAU,EAAE,6CAA6C;gBAChE,QAAQ,CAAC,UAAU,CAAC,6CAA6C,CACpE;SACF;QACD,UAAU;QACV,QAAQ,EAAE;YACR,kBAAkB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;SACzG;QACD,OAAO,EAAE;YACP,uBAAuB,EAAE,QAAQ,CAAC,OAAO,EAAE,uBAAuB,IAAI,QAAQ,CAAC,OAAO,CAAC,uBAAuB;SAC/G;QACD,SAAS,EAAE;YACT,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO;YAClE,0BAA0B,EACxB,QAAQ,CAAC,SAAS,EAAE,0BAA0B,IAAI,QAAQ,CAAC,SAAS,CAAC,0BAA0B;YACjG,aAAa,EAAE,QAAQ,CAAC,SAAS,EAAE,aAAa,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa;YACpF,QAAQ,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ;YACrE,eAAe,EAAE,QAAQ,CAAC,SAAS,EAAE,eAAe,IAAI,QAAQ,CAAC,SAAS,CAAC,eAAe;YAC1F,cAAc,EAAE,QAAQ,CAAC,SAAS,EAAE,cAAc,IAAI,QAAQ,CAAC,SAAS,CAAC,cAAc;SACxF;QACD,UAAU,EAAE;YACV,WAAW,EAAE,4BAA4B,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;SAC5E;QACD,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;QAC1E,UAAU,EAAE;YACV,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;YACzC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;SAC5C;QACD,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE;QAClD,SAAS,EAAE;YACT,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;YACtE,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;SACvE;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO;YACvE,MAAM,EAAE,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE;YAC5E,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE;SAChF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAoB;IACpD,MAAM,UAAU,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACpD,MAAM,kBAAkB,GAAe;QACrC,GAAG,QAAQ;QACX,UAAU,EAAE;YACV,GAAG,QAAQ,CAAC,UAAU;YACtB,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;YAC7C,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;YAC7C,wBAAwB,EAAE,yCAAyC,CAAC,QAAQ,CAAC,UAAU,EAAE,wBAAwB,CAAC;YAClH,uCAAuC,EAAE,8BAA8B,CACrE,QAAQ,CAAC,UAAU,EAAE,uCAAuC;gBAC1D,iBAAiB,CAAC,UAAU,CAAC,uCAAuC,CACvE;YACD,8CAA8C,EAAE,8BAA8B,CAC5E,QAAQ,CAAC,UAAU,EAAE,8CAA8C;gBACjE,iBAAiB,CAAC,UAAU,CAAC,8CAA8C,CAC9E;YACD,0CAA0C,EAAE,8BAA8B,CACxE,QAAQ,CAAC,UAAU,EAAE,0CAA0C;gBAC7D,iBAAiB,CAAC,UAAU,CAAC,0CAA0C,CAC1E;YACD,6CAA6C,EAAE,8BAA8B,CAC3E,QAAQ,CAAC,UAAU,EAAE,6CAA6C;gBAChE,iBAAiB,CAAC,UAAU,CAAC,6CAA6C,CAC7E;SACF;QACD,UAAU;QACV,UAAU,EAAE;YACV,WAAW,EAAE,4BAA4B,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;SAC5E;QACD,MAAM,EAAE,8BAA8B,CAAC,QAAQ,CAAC,MAAM,CAAC;KACxD,CAAC;IACF,MAAM,OAAO,GAAG,WAAW,CACzB;QACE,GAAI,kBAAyD;QAC7D,UAAU,EAAE,6BAA6B,CAAC,UAAU,CAAY;KACjE,EACD;QACA,SAAS;QACT,WAAW;QACX,gBAAgB;QAChB,aAAa;QACb,OAAO;QACP,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,YAAY;QACZ,UAAU;QACV,SAAS;QACT,WAAW;QACX,YAAY;QACZ,QAAQ;QACR,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,cAAc;KACb,CACF,CAAC;IAEF,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAgC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAiC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5F,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAkC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9F,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAqC,EAAE;QAC9E,uBAAuB;QACvB,kBAAkB;QAClB,kBAAkB;QAClB,0BAA0B;QAC1B,yCAAyC;QACzC,gDAAgD;QAChD,4CAA4C;QAC5C,+CAA+C;KAChD,CAAC,CAAC;IACH,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAqC,EAAE;QAC9E,QAAQ;QACR,uBAAuB;QACvB,qBAAqB;QACrB,0BAA0B;QAC1B,kBAAkB;QAClB,kBAAkB;QAClB,+BAA+B;KAChC,CAAC,CAAC;IACH,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAmC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACpG,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAkC,EAAE,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACvG,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,SAAoC,EAAE;QAC5E,SAAS;QACT,4BAA4B;QAC5B,eAAe;QACf,UAAU;QACV,iBAAiB;QACjB,gBAAgB;KACjB,CAAC,CAAC;IACH,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAqC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACjG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAiC,EAAE;QACtE,SAAS;QACT,OAAO;QACP,UAAU;QACV,QAAQ;QACR,UAAU;QACV,sBAAsB;KACvB,CAAC,CAAC;IACF,OAAO,CAAC,MAAkC,CAAC,KAAK,GAAG,WAAW,CAC7D,CAAE,OAAO,CAAC,MAAkC,CAAC,KAAK,IAAI,EAAE,CAA4B,EACpF,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAC7C,CAAC;IACD,OAAO,CAAC,MAAkC,CAAC,QAAQ,GAAG,WAAW,CAChE,CAAE,OAAO,CAAC,MAAkC,CAAC,QAAQ,IAAI,EAAE,CAA4B,EACvF,CAAC,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,CAAC,CAC3G,CAAC;IACF,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,UAAqC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAiC,EAAE;QACtE,iBAAiB;QACjB,wBAAwB;QACxB,aAAa;QACb,iBAAiB;QACjB,sBAAsB;QACtB,2BAA2B;QAC3B,UAAU;KACX,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,SAAoC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnG,OAAO,CAAC,SAAqC,CAAC,MAAM,GAAG,WAAW,CACjE,CAAE,OAAO,CAAC,SAAqC,CAAC,MAAM,IAAI,EAAE,CAA4B,EACxF,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CACjC,CAAC;IACD,OAAO,CAAC,SAAqC,CAAC,MAAM,GAAG,WAAW,CACjE,CAAE,OAAO,CAAC,SAAqC,CAAC,MAAM,IAAI,EAAE,CAA4B,EACxF,CAAC,UAAU,EAAE,OAAO,CAAC,CACtB,CAAC;IACF,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,YAAuC,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IACrH,OAAO,CAAC,YAAwC,CAAC,MAAM,GAAG,WAAW,CACpE,CAAE,OAAO,CAAC,YAAwC,CAAC,MAAM,IAAI,EAAE,CAA4B,EAC3F,CAAC,KAAK,EAAE,SAAS,CAAC,CACnB,CAAC;IACD,OAAO,CAAC,YAAwC,CAAC,OAAO,GAAG,WAAW,CACrE,CAAE,OAAO,CAAC,YAAwC,CAAC,OAAO,IAAI,EAAE,CAA4B,EAC5F,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAc;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,+BAA+B,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,oBAAoB,CAAC;QACzB,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,+BAA+B,CAAC,4BAA4B,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,+BAA+B,CAAC,8BAA8B,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,MAAM,+BAA+B,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5F,MAAM,oBAAoB,GAAG,MAAM,kCAAkC,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QACrG,MAAM,QAAQ,GAAG;YACf,GAAG,cAAc;YACjB,UAAU,EAAE;gBACV,WAAW,EAAE,4BAA4B,CAAC;oBACxC,GAAG,cAAc,CAAC,UAAU,CAAC,WAAW;oBACxC,GAAG,CAAC,oBAAoB,CAAC,0BAA0B,IAAI,EAAE,CAAC;iBAC3D,CAAC;aACH;YACD,MAAM,EAAE,oBAAoB,CAAC,MAAM;SACpC,CAAC;QACF,OAAO;YACL,QAAQ;YACR,QAAQ,EAAE;gBACR,wBAAwB,EAAE,qBAAqB,CAAC,MAAM,CAAC;aACxD;YACD,QAAQ,EAAE;gBACR,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,oCAAoC,WAAW,EAAE,CAAC;gBACvG,GAAG,oBAAoB,CAAC,QAAQ;aACjC;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,+BAA+B,CAAC,4BAA4B,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,OAAO,CAAC,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,QAAoB,EAAE,EAAE,GAAG,iBAAiB;IAC9F,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjE,MAAM,qBAAqB,CAAC;QAC1B,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,SAAS;QAChB,EAAE;KACH,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { GOVERNANCE_PRESET_DEFAULTS, SETTINGS_DEFAULTS } from \"../shared/constants.js\";\nimport { readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport {\n ensureRuntimeSchemaFileScaffold,\n loadRuntimeSchemaFromOptionalFiles,\n normalizeRuntimeSchemaSettings,\n} from \"../schema/runtime-schema.js\";\nimport { getSettingsPath } from \"./paths.js\";\nimport { orderObject } from \"../shared/serialization.js\";\nimport type {\n GovernanceSettings,\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n GovernancePreset,\n ValidateMetadataRequiredField,\n} from \"../../types/index.js\";\n\nconst itemTypeOptionSchema = z.object({\n key: z.string(),\n values: z.array(z.string()),\n required: z.boolean().optional(),\n aliases: z.array(z.string()).optional(),\n description: z.string().optional(),\n});\n\nconst itemTypeCommandOptionPolicySchema = z.object({\n command: z.union([z.literal(\"create\"), z.literal(\"update\")]),\n option: z.string(),\n required: z.boolean().optional(),\n visible: z.boolean().optional(),\n enabled: z.boolean().optional(),\n});\n\nconst itemTypeDefinitionSchema = z.object({\n name: z.string(),\n folder: z.string().optional(),\n aliases: z.array(z.string()).optional(),\n required_create_fields: z.array(z.string()).optional(),\n required_create_repeatables: z.array(z.string()).optional(),\n options: z.array(itemTypeOptionSchema).optional(),\n command_option_policies: z.array(itemTypeCommandOptionPolicySchema).optional(),\n});\n\nconst runtimeStatusDefinitionSchema = z.object({\n id: z.string(),\n aliases: z.array(z.string()).optional(),\n roles: z\n .array(\n z.union([\n z.literal(\"draft\"),\n z.literal(\"active\"),\n z.literal(\"blocked\"),\n z.literal(\"terminal\"),\n z.literal(\"terminal_done\"),\n z.literal(\"terminal_canceled\"),\n z.literal(\"default_open\"),\n z.literal(\"default_close\"),\n z.literal(\"default_cancel\"),\n ]),\n )\n .optional(),\n description: z.string().optional(),\n order: z.number().optional(),\n});\n\nconst runtimeFieldDefinitionSchema = z.object({\n key: z.string(),\n front_matter_key: z.string().optional(),\n cli_flag: z.string().optional(),\n cli_aliases: z.array(z.string()).optional(),\n description: z.string().optional(),\n type: z.union([z.literal(\"string\"), z.literal(\"number\"), z.literal(\"boolean\"), z.literal(\"string_array\")]).optional(),\n commands: z\n .array(\n z.union([\n z.literal(\"create\"),\n z.literal(\"update\"),\n z.literal(\"update_many\"),\n z.literal(\"list\"),\n z.literal(\"search\"),\n z.literal(\"calendar\"),\n z.literal(\"context\"),\n ]),\n )\n .optional(),\n repeatable: z.boolean().optional(),\n required: z.boolean().optional(),\n required_on_create: z.boolean().optional(),\n required_types: z.array(z.string()).optional(),\n allow_unset: z.boolean().optional(),\n});\n\nconst runtimeSchemaSettingsSchema = z\n .object({\n version: z.number().int().optional(),\n files: z\n .object({\n types: z.string().optional(),\n statuses: z.string().optional(),\n fields: z.string().optional(),\n workflows: z.string().optional(),\n })\n .optional(),\n statuses: z.array(runtimeStatusDefinitionSchema).optional(),\n fields: z.array(runtimeFieldDefinitionSchema).optional(),\n workflow: z\n .object({\n draft_status: z.string().optional(),\n open_status: z.string().optional(),\n in_progress_status: z.string().optional(),\n blocked_status: z.string().optional(),\n close_status: z.string().optional(),\n canceled_status: z.string().optional(),\n })\n .optional(),\n unknown_field_policy: z.union([z.literal(\"allow\"), z.literal(\"warn\"), z.literal(\"reject\")]).optional(),\n })\n .optional();\n\nconst governanceSettingsSchema = z\n .object({\n preset: z.union([z.literal(\"minimal\"), z.literal(\"default\"), z.literal(\"strict\"), z.literal(\"custom\")]).optional(),\n ownership_enforcement: z.union([z.literal(\"none\"), z.literal(\"warn\"), z.literal(\"strict\")]).optional(),\n create_mode_default: z.union([z.literal(\"progressive\"), z.literal(\"strict\")]).optional(),\n close_validation_default: z.union([z.literal(\"off\"), z.literal(\"warn\"), z.literal(\"strict\")]).optional(),\n parent_reference: z.union([z.literal(\"warn\"), z.literal(\"strict_error\")]).optional(),\n metadata_profile: z.union([z.literal(\"core\"), z.literal(\"strict\"), z.literal(\"custom\")]).optional(),\n force_required_for_stale_lock: z.boolean().optional(),\n })\n .optional();\n\nconst settingsSchema = z.object({\n version: z.number().int(),\n id_prefix: z.string(),\n author_default: z.string(),\n item_format: z.union([z.literal(\"toon\"), z.literal(\"json_markdown\")]).optional(),\n locks: z.object({\n ttl_seconds: z.number().int(),\n }),\n output: z.object({\n default_format: z.union([z.literal(\"toon\"), z.literal(\"json\")]),\n }),\n history: z\n .object({\n missing_stream: z.union([z.literal(\"auto_create\"), z.literal(\"strict_error\")]),\n })\n .optional(),\n validation: z\n .object({\n sprint_release_format: z.union([z.literal(\"warn\"), z.literal(\"strict_error\")]),\n parent_reference: z.union([z.literal(\"warn\"), z.literal(\"strict_error\")]).optional(),\n metadata_profile: z.union([z.literal(\"core\"), z.literal(\"strict\"), z.literal(\"custom\")]).optional(),\n metadata_required_fields: z.array(z.string()).optional(),\n lifecycle_stale_blocker_reason_patterns: z.array(z.string()).optional(),\n lifecycle_closure_like_blocked_reason_patterns: z.array(z.string()).optional(),\n lifecycle_closure_like_resolution_patterns: z.array(z.string()).optional(),\n lifecycle_closure_like_actual_result_patterns: z.array(z.string()).optional(),\n })\n .optional(),\n governance: governanceSettingsSchema,\n workflow: z\n .object({\n definition_of_done: z.array(z.string()),\n })\n .optional(),\n testing: z\n .object({\n record_results_to_items: z.boolean(),\n })\n .optional(),\n telemetry: z\n .object({\n enabled: z.boolean(),\n first_run_prompt_completed: z.boolean().optional(),\n capture_level: z.union([z.literal(\"minimal\"), z.literal(\"redacted\"), z.literal(\"max\")]).optional(),\n endpoint: z.string().optional(),\n installation_id: z.string().optional(),\n retention_days: z.number().int().positive().optional(),\n })\n .optional(),\n item_types: z\n .object({\n definitions: z.array(itemTypeDefinitionSchema),\n })\n .optional(),\n schema: runtimeSchemaSettingsSchema,\n extensions: z.object({\n enabled: z.array(z.string()),\n disabled: z.array(z.string()),\n }),\n search: z.object({\n score_threshold: z.number(),\n hybrid_semantic_weight: z.number().optional(),\n max_results: z.number().int(),\n embedding_model: z.string(),\n embedding_batch_size: z.number().int(),\n scanner_max_batch_retries: z.number().int(),\n provider: z.string().optional(),\n }),\n providers: z.object({\n openai: z.object({\n base_url: z.string(),\n api_key: z.string(),\n model: z.string(),\n }),\n ollama: z.object({\n base_url: z.string(),\n model: z.string(),\n }),\n }),\n vector_store: z.object({\n adapter: z.string().optional(),\n qdrant: z.object({\n url: z.string(),\n api_key: z.string(),\n }),\n lancedb: z.object({\n path: z.string(),\n }),\n }),\n});\n\nconst SETTINGS_WRITE_OP = \"settings:write\";\n\nexport interface SettingsReadMetadata {\n has_explicit_item_format: boolean;\n}\n\nexport interface SettingsReadResult {\n settings: PmSettings;\n metadata: SettingsReadMetadata;\n warnings: string[];\n}\n\nfunction resolveGovernanceKnobsFromPreset(preset: Exclude<GovernancePreset, \"custom\">): Omit<GovernanceSettings, \"preset\"> {\n return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset]);\n}\n\nfunction normalizeGovernancePreset(value: GovernancePreset | undefined): GovernancePreset {\n if (value === \"minimal\" || value === \"default\" || value === \"strict\" || value === \"custom\") {\n return value;\n }\n return SETTINGS_DEFAULTS.governance.preset;\n}\n\nfunction normalizeGovernanceForPersist(governance: GovernanceSettings): Partial<GovernanceSettings> & { preset: GovernancePreset } {\n if (governance.preset === \"custom\") {\n return {\n preset: \"custom\",\n ownership_enforcement: governance.ownership_enforcement,\n create_mode_default: governance.create_mode_default,\n close_validation_default: governance.close_validation_default,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n force_required_for_stale_lock: governance.force_required_for_stale_lock,\n };\n }\n return {\n preset: governance.preset,\n };\n}\n\nexport function resolveGovernanceKnobs(\n settings: Pick<PmSettings, \"governance\"> | { governance?: Partial<GovernanceSettings> },\n): GovernanceSettings {\n const rawGovernance = settings.governance ?? {};\n const preset = normalizeGovernancePreset(rawGovernance.preset);\n if (preset === \"custom\") {\n const baseline = resolveGovernanceKnobsFromPreset(\"default\");\n return {\n preset,\n ownership_enforcement: rawGovernance.ownership_enforcement ?? baseline.ownership_enforcement,\n create_mode_default: rawGovernance.create_mode_default ?? baseline.create_mode_default,\n close_validation_default: rawGovernance.close_validation_default ?? baseline.close_validation_default,\n parent_reference: rawGovernance.parent_reference ?? baseline.parent_reference,\n metadata_profile: rawGovernance.metadata_profile ?? baseline.metadata_profile,\n force_required_for_stale_lock: rawGovernance.force_required_for_stale_lock ?? baseline.force_required_for_stale_lock,\n };\n }\n return {\n preset,\n ...resolveGovernanceKnobsFromPreset(preset),\n };\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\nfunction buildFallbackSettingsReadResult(warning?: string): SettingsReadResult {\n return {\n settings: cloneDefaults(),\n metadata: {\n has_explicit_item_format: false,\n },\n warnings: warning ? [warning] : [],\n };\n}\n\nfunction hasExplicitItemFormat(raw: unknown): boolean {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return false;\n }\n const itemFormat = (raw as Record<string, unknown>).item_format;\n return itemFormat === \"toon\" || itemFormat === \"json_markdown\";\n}\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\nfunction normalizeValidationMetadataRequiredFields(values: string[] | undefined): ValidateMetadataRequiredField[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll(\"-\", \"_\")))]\n .filter((value) => value.length > 0)\n .sort((left, right) => left.localeCompare(right));\n return normalized.filter((value): value is ValidateMetadataRequiredField =>\n [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n ].includes(value),\n );\n}\n\nfunction normalizeValidationPatternList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction normalizeItemTypeOptionDefinition(option: ItemTypeOptionDefinition): ItemTypeOptionDefinition | null {\n const key = option.key.trim();\n if (key.length === 0) {\n return null;\n }\n const values = normalizeStringList(option.values);\n const aliases = normalizeStringList(option.aliases);\n const description = option.description?.trim();\n return {\n key,\n values,\n required: option.required === true ? true : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n description: description && description.length > 0 ? description : undefined,\n };\n}\n\nfunction normalizeItemTypeCommandOptionPolicy(\n policy: ItemTypeCommandOptionPolicy,\n): ItemTypeCommandOptionPolicy | null {\n const option = policy.option.trim();\n if (option.length === 0) {\n return null;\n }\n return {\n command: policy.command,\n option,\n required: policy.required,\n visible: policy.visible,\n enabled: policy.enabled,\n };\n}\n\nfunction normalizeItemTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n const name = definition.name.trim();\n if (name.length === 0) {\n return null;\n }\n const hasRequiredCreateFields = definition.required_create_fields !== undefined;\n const hasRequiredCreateRepeatables = definition.required_create_repeatables !== undefined;\n const hasOptions = definition.options !== undefined;\n const hasCommandOptionPolicies = definition.command_option_policies !== undefined;\n const folder = definition.folder?.trim();\n const aliases = normalizeStringList(definition.aliases);\n const requiredCreateFields = normalizeStringList(definition.required_create_fields);\n const requiredCreateRepeatables = normalizeStringList(definition.required_create_repeatables);\n const options = (definition.options ?? [])\n .map((option) => normalizeItemTypeOptionDefinition(option))\n .filter((option): option is ItemTypeOptionDefinition => option !== null)\n .sort((left, right) => left.key.localeCompare(right.key));\n const commandOptionPolicies = (() => {\n const dedupedByKey = new Map<string, ItemTypeCommandOptionPolicy>();\n for (const policy of definition.command_option_policies ?? []) {\n const normalized = normalizeItemTypeCommandOptionPolicy(policy);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`, normalized);\n }\n return [...dedupedByKey.values()].sort((left, right) =>\n left.command === right.command\n ? left.option.localeCompare(right.option)\n : left.command.localeCompare(right.command),\n );\n })();\n return {\n name,\n folder: folder && folder.length > 0 ? folder : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n required_create_fields: hasRequiredCreateFields ? requiredCreateFields : undefined,\n required_create_repeatables: hasRequiredCreateRepeatables ? requiredCreateRepeatables : undefined,\n options: hasOptions ? options : undefined,\n command_option_policies: hasCommandOptionPolicies ? commandOptionPolicies : undefined,\n };\n}\n\nexport function normalizeItemTypeDefinitions(definitions: ItemTypeDefinition[] | undefined): ItemTypeDefinition[] {\n const normalized = (definitions ?? [])\n .map((definition) => normalizeItemTypeDefinition(definition))\n .filter((definition): definition is ItemTypeDefinition => definition !== null);\n const dedupedByName = new Map<string, ItemTypeDefinition>();\n for (const definition of normalized) {\n dedupedByName.set(definition.name.toLowerCase(), definition);\n }\n return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction mergeSettings(raw: unknown): PmSettings {\n const defaults = cloneDefaults();\n const parsed = settingsSchema.safeParse(raw);\n if (!parsed.success) {\n return defaults;\n }\n const settings = parsed.data;\n const governance = resolveGovernanceKnobs({\n governance: settings.governance ?? { preset: \"default\" },\n });\n return {\n ...defaults,\n ...settings,\n item_format: settings.item_format ?? defaults.item_format,\n locks: { ...defaults.locks, ...settings.locks },\n output: { ...defaults.output, ...settings.output },\n history: { ...defaults.history, ...(settings.history ?? {}) },\n validation: {\n ...defaults.validation,\n ...(settings.validation ?? {}),\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n defaults.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n defaults.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n defaults.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n defaults.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n },\n governance,\n workflow: {\n definition_of_done: [...(settings.workflow?.definition_of_done ?? defaults.workflow.definition_of_done)],\n },\n testing: {\n record_results_to_items: settings.testing?.record_results_to_items ?? defaults.testing.record_results_to_items,\n },\n telemetry: {\n enabled: settings.telemetry?.enabled ?? defaults.telemetry.enabled,\n first_run_prompt_completed:\n settings.telemetry?.first_run_prompt_completed ?? defaults.telemetry.first_run_prompt_completed,\n capture_level: settings.telemetry?.capture_level ?? defaults.telemetry.capture_level,\n endpoint: settings.telemetry?.endpoint ?? defaults.telemetry.endpoint,\n installation_id: settings.telemetry?.installation_id ?? defaults.telemetry.installation_id,\n retention_days: settings.telemetry?.retention_days ?? defaults.telemetry.retention_days,\n },\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema ?? defaults.schema),\n extensions: {\n enabled: [...settings.extensions.enabled],\n disabled: [...settings.extensions.disabled],\n },\n search: { ...defaults.search, ...settings.search },\n providers: {\n openai: { ...defaults.providers.openai, ...settings.providers.openai },\n ollama: { ...defaults.providers.ollama, ...settings.providers.ollama },\n },\n vector_store: {\n adapter: settings.vector_store.adapter ?? defaults.vector_store.adapter,\n qdrant: { ...defaults.vector_store.qdrant, ...settings.vector_store.qdrant },\n lancedb: { ...defaults.vector_store.lancedb, ...settings.vector_store.lancedb },\n },\n };\n}\n\nexport function serializeSettings(settings: PmSettings): string {\n const governance = resolveGovernanceKnobs(settings);\n const normalizedSettings: PmSettings = {\n ...settings,\n validation: {\n ...settings.validation,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n },\n governance,\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema),\n };\n const ordered = orderObject(\n {\n ...(normalizedSettings as unknown as Record<string, unknown>),\n governance: normalizeGovernanceForPersist(governance) as unknown,\n },\n [\n \"version\",\n \"id_prefix\",\n \"author_default\",\n \"item_format\",\n \"locks\",\n \"output\",\n \"history\",\n \"validation\",\n \"governance\",\n \"workflow\",\n \"testing\",\n \"telemetry\",\n \"item_types\",\n \"schema\",\n \"extensions\",\n \"search\",\n \"providers\",\n \"vector_store\",\n ],\n );\n\n ordered.locks = orderObject(ordered.locks as Record<string, unknown>, [\"ttl_seconds\"]);\n ordered.output = orderObject(ordered.output as Record<string, unknown>, [\"default_format\"]);\n ordered.history = orderObject(ordered.history as Record<string, unknown>, [\"missing_stream\"]);\n ordered.validation = orderObject(ordered.validation as Record<string, unknown>, [\n \"sprint_release_format\",\n \"parent_reference\",\n \"metadata_profile\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n ]);\n ordered.governance = orderObject(ordered.governance as Record<string, unknown>, [\n \"preset\",\n \"ownership_enforcement\",\n \"create_mode_default\",\n \"close_validation_default\",\n \"parent_reference\",\n \"metadata_profile\",\n \"force_required_for_stale_lock\",\n ]);\n ordered.workflow = orderObject(ordered.workflow as Record<string, unknown>, [\"definition_of_done\"]);\n ordered.testing = orderObject(ordered.testing as Record<string, unknown>, [\"record_results_to_items\"]);\n ordered.telemetry = orderObject(ordered.telemetry as Record<string, unknown>, [\n \"enabled\",\n \"first_run_prompt_completed\",\n \"capture_level\",\n \"endpoint\",\n \"installation_id\",\n \"retention_days\",\n ]);\n ordered.item_types = orderObject(ordered.item_types as Record<string, unknown>, [\"definitions\"]);\n ordered.schema = orderObject(ordered.schema as Record<string, unknown>, [\n \"version\",\n \"files\",\n \"statuses\",\n \"fields\",\n \"workflow\",\n \"unknown_field_policy\",\n ]);\n (ordered.schema as Record<string, unknown>).files = orderObject(\n ((ordered.schema as Record<string, unknown>).files ?? {}) as Record<string, unknown>,\n [\"types\", \"statuses\", \"fields\", \"workflows\"],\n );\n (ordered.schema as Record<string, unknown>).workflow = orderObject(\n ((ordered.schema as Record<string, unknown>).workflow ?? {}) as Record<string, unknown>,\n [\"draft_status\", \"open_status\", \"in_progress_status\", \"blocked_status\", \"close_status\", \"canceled_status\"],\n );\n ordered.extensions = orderObject(ordered.extensions as Record<string, unknown>, [\"enabled\", \"disabled\"]);\n ordered.search = orderObject(ordered.search as Record<string, unknown>, [\n \"score_threshold\",\n \"hybrid_semantic_weight\",\n \"max_results\",\n \"embedding_model\",\n \"embedding_batch_size\",\n \"scanner_max_batch_retries\",\n \"provider\",\n ]);\n ordered.providers = orderObject(ordered.providers as Record<string, unknown>, [\"openai\", \"ollama\"]);\n (ordered.providers as Record<string, unknown>).openai = orderObject(\n ((ordered.providers as Record<string, unknown>).openai ?? {}) as Record<string, unknown>,\n [\"base_url\", \"api_key\", \"model\"],\n );\n (ordered.providers as Record<string, unknown>).ollama = orderObject(\n ((ordered.providers as Record<string, unknown>).ollama ?? {}) as Record<string, unknown>,\n [\"base_url\", \"model\"],\n );\n ordered.vector_store = orderObject(ordered.vector_store as Record<string, unknown>, [\"adapter\", \"qdrant\", \"lancedb\"]);\n (ordered.vector_store as Record<string, unknown>).qdrant = orderObject(\n ((ordered.vector_store as Record<string, unknown>).qdrant ?? {}) as Record<string, unknown>,\n [\"url\", \"api_key\"],\n );\n (ordered.vector_store as Record<string, unknown>).lancedb = orderObject(\n ((ordered.vector_store as Record<string, unknown>).lancedb ?? {}) as Record<string, unknown>,\n [\"path\"],\n );\n\n return `${JSON.stringify(ordered, null, 2)}\\n`;\n}\n\nexport async function readSettingsWithMetadata(pmRoot: string): Promise<SettingsReadResult> {\n const settingsPath = getSettingsPath(pmRoot);\n const raw = await readFileIfExists(settingsPath);\n if (raw === null) {\n return buildFallbackSettingsReadResult();\n }\n await runActiveOnReadHooks({\n path: settingsPath,\n scope: \"project\",\n });\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return buildFallbackSettingsReadResult(\"settings_read_invalid_json\");\n }\n\n const validated = settingsSchema.safeParse(parsed);\n if (!validated.success) {\n return buildFallbackSettingsReadResult(\"settings_read_invalid_schema\");\n }\n\n try {\n const mergedSettings = mergeSettings(validated.data);\n const schemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, mergedSettings.schema);\n const loadedSchemaSections = await loadRuntimeSchemaFromOptionalFiles(pmRoot, mergedSettings.schema);\n const settings = {\n ...mergedSettings,\n item_types: {\n definitions: normalizeItemTypeDefinitions([\n ...mergedSettings.item_types.definitions,\n ...(loadedSchemaSections.type_definitions_from_file ?? []),\n ]),\n },\n schema: loadedSchemaSections.schema,\n };\n return {\n settings,\n metadata: {\n has_explicit_item_format: hasExplicitItemFormat(parsed),\n },\n warnings: [\n ...schemaScaffold.created_paths.map((createdPath) => `runtime_schema_bootstrap_created:${createdPath}`),\n ...loadedSchemaSections.warnings,\n ],\n };\n } catch {\n return buildFallbackSettingsReadResult(\"settings_read_merge_failed\");\n }\n}\n\nexport async function readSettings(pmRoot: string): Promise<PmSettings> {\n return (await readSettingsWithMetadata(pmRoot)).settings;\n}\n\nexport async function writeSettings(pmRoot: string, settings: PmSettings, op = SETTINGS_WRITE_OP): Promise<void> {\n const settingsPath = getSettingsPath(pmRoot);\n await writeFileAtomic(settingsPath, serializeSettings(settings));\n await runActiveOnWriteHooks({\n path: settingsPath,\n scope: \"project\",\n op,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"/","sources":["core/store/settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { GOVERNANCE_PRESET_DEFAULTS, SETTINGS_DEFAULTS } from \"../shared/constants.js\";\nimport { readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport {\n ensureRuntimeSchemaFileScaffold,\n loadRuntimeSchemaFromOptionalFiles,\n normalizeRuntimeSchemaSettings,\n} from \"../schema/runtime-schema.js\";\nimport { getSettingsPath } from \"./paths.js\";\nimport { orderObject } from \"../shared/serialization.js\";\nimport type {\n GovernanceSettings,\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n GovernancePreset,\n ValidateMetadataRequiredField,\n} from \"../../types/index.js\";\n\nconst itemTypeOptionSchema = z.object({\n key: z.string(),\n values: z.array(z.string()),\n required: z.boolean().optional(),\n aliases: z.array(z.string()).optional(),\n description: z.string().optional(),\n});\n\nconst itemTypeCommandOptionPolicySchema = z.object({\n command: z.union([z.literal(\"create\"), z.literal(\"update\")]),\n option: z.string(),\n required: z.boolean().optional(),\n visible: z.boolean().optional(),\n enabled: z.boolean().optional(),\n});\n\nconst itemTypeDefinitionSchema = z.object({\n name: z.string(),\n folder: z.string().optional(),\n aliases: z.array(z.string()).optional(),\n required_create_fields: z.array(z.string()).optional(),\n required_create_repeatables: z.array(z.string()).optional(),\n options: z.array(itemTypeOptionSchema).optional(),\n command_option_policies: z.array(itemTypeCommandOptionPolicySchema).optional(),\n});\n\nconst runtimeStatusDefinitionSchema = z.object({\n id: z.string(),\n aliases: z.array(z.string()).optional(),\n roles: z\n .array(\n z.union([\n z.literal(\"draft\"),\n z.literal(\"active\"),\n z.literal(\"blocked\"),\n z.literal(\"terminal\"),\n z.literal(\"terminal_done\"),\n z.literal(\"terminal_canceled\"),\n z.literal(\"default_open\"),\n z.literal(\"default_close\"),\n z.literal(\"default_cancel\"),\n ]),\n )\n .optional(),\n description: z.string().optional(),\n order: z.number().optional(),\n});\n\nconst runtimeFieldDefinitionSchema = z.object({\n key: z.string(),\n front_matter_key: z.string().optional(),\n cli_flag: z.string().optional(),\n cli_aliases: z.array(z.string()).optional(),\n description: z.string().optional(),\n type: z.union([z.literal(\"string\"), z.literal(\"number\"), z.literal(\"boolean\"), z.literal(\"string_array\")]).optional(),\n commands: z\n .array(\n z.union([\n z.literal(\"create\"),\n z.literal(\"update\"),\n z.literal(\"update_many\"),\n z.literal(\"list\"),\n z.literal(\"search\"),\n z.literal(\"calendar\"),\n z.literal(\"context\"),\n ]),\n )\n .optional(),\n repeatable: z.boolean().optional(),\n required: z.boolean().optional(),\n required_on_create: z.boolean().optional(),\n required_types: z.array(z.string()).optional(),\n allow_unset: z.boolean().optional(),\n});\n\nconst runtimeSchemaSettingsSchema = z\n .object({\n version: z.number().int().optional(),\n files: z\n .object({\n types: z.string().optional(),\n statuses: z.string().optional(),\n fields: z.string().optional(),\n workflows: z.string().optional(),\n })\n .optional(),\n statuses: z.array(runtimeStatusDefinitionSchema).optional(),\n fields: z.array(runtimeFieldDefinitionSchema).optional(),\n workflow: z\n .object({\n draft_status: z.string().optional(),\n open_status: z.string().optional(),\n in_progress_status: z.string().optional(),\n blocked_status: z.string().optional(),\n close_status: z.string().optional(),\n canceled_status: z.string().optional(),\n })\n .optional(),\n unknown_field_policy: z.union([z.literal(\"allow\"), z.literal(\"warn\"), z.literal(\"reject\")]).optional(),\n })\n .optional();\n\nconst governanceSettingsSchema = z\n .object({\n preset: z.union([z.literal(\"minimal\"), z.literal(\"default\"), z.literal(\"strict\"), z.literal(\"custom\")]).optional(),\n ownership_enforcement: z.union([z.literal(\"none\"), z.literal(\"warn\"), z.literal(\"strict\")]).optional(),\n create_mode_default: z.union([z.literal(\"progressive\"), z.literal(\"strict\")]).optional(),\n close_validation_default: z.union([z.literal(\"off\"), z.literal(\"warn\"), z.literal(\"strict\")]).optional(),\n parent_reference: z.union([z.literal(\"warn\"), z.literal(\"strict_error\")]).optional(),\n metadata_profile: z.union([z.literal(\"core\"), z.literal(\"strict\"), z.literal(\"custom\")]).optional(),\n force_required_for_stale_lock: z.boolean().optional(),\n })\n .optional();\n\nconst settingsSchema = z.object({\n version: z.number().int(),\n id_prefix: z.string(),\n author_default: z.string(),\n item_format: z.union([z.literal(\"toon\"), z.literal(\"json_markdown\")]).optional(),\n locks: z.object({\n ttl_seconds: z.number().int(),\n }),\n output: z.object({\n default_format: z.union([z.literal(\"toon\"), z.literal(\"json\")]),\n }),\n history: z\n .object({\n missing_stream: z.union([z.literal(\"auto_create\"), z.literal(\"strict_error\")]),\n })\n .optional(),\n validation: z\n .object({\n sprint_release_format: z.union([z.literal(\"warn\"), z.literal(\"strict_error\")]),\n parent_reference: z.union([z.literal(\"warn\"), z.literal(\"strict_error\")]).optional(),\n metadata_profile: z.union([z.literal(\"core\"), z.literal(\"strict\"), z.literal(\"custom\")]).optional(),\n metadata_required_fields: z.array(z.string()).optional(),\n lifecycle_stale_blocker_reason_patterns: z.array(z.string()).optional(),\n lifecycle_closure_like_blocked_reason_patterns: z.array(z.string()).optional(),\n lifecycle_closure_like_resolution_patterns: z.array(z.string()).optional(),\n lifecycle_closure_like_actual_result_patterns: z.array(z.string()).optional(),\n })\n .optional(),\n governance: governanceSettingsSchema,\n workflow: z\n .object({\n definition_of_done: z.array(z.string()),\n })\n .optional(),\n testing: z\n .object({\n record_results_to_items: z.boolean(),\n })\n .optional(),\n telemetry: z\n .object({\n enabled: z.boolean(),\n first_run_prompt_completed: z.boolean().optional(),\n capture_level: z.union([z.literal(\"minimal\"), z.literal(\"redacted\"), z.literal(\"max\")]).optional(),\n endpoint: z.string().optional(),\n installation_id: z.string().optional(),\n retention_days: z.number().int().positive().optional(),\n })\n .optional(),\n item_types: z\n .object({\n definitions: z.array(itemTypeDefinitionSchema),\n })\n .optional(),\n schema: runtimeSchemaSettingsSchema,\n context: z\n .object({\n default_depth: z.union([z.literal(\"brief\"), z.literal(\"standard\"), z.literal(\"deep\")]).optional(),\n activity_limit: z.number().int().positive().optional(),\n stale_threshold_days: z.number().int().positive().optional(),\n sections: z\n .object({\n hierarchy: z.boolean().optional(),\n activity: z.boolean().optional(),\n progress: z.boolean().optional(),\n blockers: z.boolean().optional(),\n files: z.boolean().optional(),\n workload: z.boolean().optional(),\n staleness: z.boolean().optional(),\n tests: z.boolean().optional(),\n })\n .optional(),\n })\n .optional(),\n extensions: z.object({\n enabled: z.array(z.string()),\n disabled: z.array(z.string()),\n }),\n search: z.object({\n score_threshold: z.number(),\n hybrid_semantic_weight: z.number().optional(),\n max_results: z.number().int(),\n embedding_model: z.string(),\n embedding_batch_size: z.number().int(),\n scanner_max_batch_retries: z.number().int(),\n provider: z.string().optional(),\n }),\n providers: z.object({\n openai: z.object({\n base_url: z.string(),\n api_key: z.string(),\n model: z.string(),\n }),\n ollama: z.object({\n base_url: z.string(),\n model: z.string(),\n }),\n }),\n vector_store: z.object({\n adapter: z.string().optional(),\n qdrant: z.object({\n url: z.string(),\n api_key: z.string(),\n }),\n lancedb: z.object({\n path: z.string(),\n }),\n }),\n});\n\nconst SETTINGS_WRITE_OP = \"settings:write\";\n\nexport interface SettingsReadMetadata {\n has_explicit_item_format: boolean;\n}\n\nexport interface SettingsReadResult {\n settings: PmSettings;\n metadata: SettingsReadMetadata;\n warnings: string[];\n}\n\nfunction resolveGovernanceKnobsFromPreset(preset: Exclude<GovernancePreset, \"custom\">): Omit<GovernanceSettings, \"preset\"> {\n return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset]);\n}\n\nfunction normalizeGovernancePreset(value: GovernancePreset | undefined): GovernancePreset {\n if (value === \"minimal\" || value === \"default\" || value === \"strict\" || value === \"custom\") {\n return value;\n }\n return SETTINGS_DEFAULTS.governance.preset;\n}\n\nfunction normalizeGovernanceForPersist(governance: GovernanceSettings): Partial<GovernanceSettings> & { preset: GovernancePreset } {\n if (governance.preset === \"custom\") {\n return {\n preset: \"custom\",\n ownership_enforcement: governance.ownership_enforcement,\n create_mode_default: governance.create_mode_default,\n close_validation_default: governance.close_validation_default,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n force_required_for_stale_lock: governance.force_required_for_stale_lock,\n };\n }\n return {\n preset: governance.preset,\n };\n}\n\nexport function resolveGovernanceKnobs(\n settings: Pick<PmSettings, \"governance\"> | { governance?: Partial<GovernanceSettings> },\n): GovernanceSettings {\n const rawGovernance = settings.governance ?? {};\n const preset = normalizeGovernancePreset(rawGovernance.preset);\n if (preset === \"custom\") {\n const baseline = resolveGovernanceKnobsFromPreset(\"default\");\n return {\n preset,\n ownership_enforcement: rawGovernance.ownership_enforcement ?? baseline.ownership_enforcement,\n create_mode_default: rawGovernance.create_mode_default ?? baseline.create_mode_default,\n close_validation_default: rawGovernance.close_validation_default ?? baseline.close_validation_default,\n parent_reference: rawGovernance.parent_reference ?? baseline.parent_reference,\n metadata_profile: rawGovernance.metadata_profile ?? baseline.metadata_profile,\n force_required_for_stale_lock: rawGovernance.force_required_for_stale_lock ?? baseline.force_required_for_stale_lock,\n };\n }\n return {\n preset,\n ...resolveGovernanceKnobsFromPreset(preset),\n };\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\nfunction buildFallbackSettingsReadResult(warning?: string): SettingsReadResult {\n return {\n settings: cloneDefaults(),\n metadata: {\n has_explicit_item_format: false,\n },\n warnings: warning ? [warning] : [],\n };\n}\n\nfunction hasExplicitItemFormat(raw: unknown): boolean {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return false;\n }\n const itemFormat = (raw as Record<string, unknown>).item_format;\n return itemFormat === \"toon\" || itemFormat === \"json_markdown\";\n}\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\nfunction normalizeValidationMetadataRequiredFields(values: string[] | undefined): ValidateMetadataRequiredField[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll(\"-\", \"_\")))]\n .filter((value) => value.length > 0)\n .sort((left, right) => left.localeCompare(right));\n return normalized.filter((value): value is ValidateMetadataRequiredField =>\n [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n ].includes(value),\n );\n}\n\nfunction normalizeValidationPatternList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction normalizeItemTypeOptionDefinition(option: ItemTypeOptionDefinition): ItemTypeOptionDefinition | null {\n const key = option.key.trim();\n if (key.length === 0) {\n return null;\n }\n const values = normalizeStringList(option.values);\n const aliases = normalizeStringList(option.aliases);\n const description = option.description?.trim();\n return {\n key,\n values,\n required: option.required === true ? true : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n description: description && description.length > 0 ? description : undefined,\n };\n}\n\nfunction normalizeItemTypeCommandOptionPolicy(\n policy: ItemTypeCommandOptionPolicy,\n): ItemTypeCommandOptionPolicy | null {\n const option = policy.option.trim();\n if (option.length === 0) {\n return null;\n }\n return {\n command: policy.command,\n option,\n required: policy.required,\n visible: policy.visible,\n enabled: policy.enabled,\n };\n}\n\nfunction normalizeItemTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n const name = definition.name.trim();\n if (name.length === 0) {\n return null;\n }\n const hasRequiredCreateFields = definition.required_create_fields !== undefined;\n const hasRequiredCreateRepeatables = definition.required_create_repeatables !== undefined;\n const hasOptions = definition.options !== undefined;\n const hasCommandOptionPolicies = definition.command_option_policies !== undefined;\n const folder = definition.folder?.trim();\n const aliases = normalizeStringList(definition.aliases);\n const requiredCreateFields = normalizeStringList(definition.required_create_fields);\n const requiredCreateRepeatables = normalizeStringList(definition.required_create_repeatables);\n const options = (definition.options ?? [])\n .map((option) => normalizeItemTypeOptionDefinition(option))\n .filter((option): option is ItemTypeOptionDefinition => option !== null)\n .sort((left, right) => left.key.localeCompare(right.key));\n const commandOptionPolicies = (() => {\n const dedupedByKey = new Map<string, ItemTypeCommandOptionPolicy>();\n for (const policy of definition.command_option_policies ?? []) {\n const normalized = normalizeItemTypeCommandOptionPolicy(policy);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`, normalized);\n }\n return [...dedupedByKey.values()].sort((left, right) =>\n left.command === right.command\n ? left.option.localeCompare(right.option)\n : left.command.localeCompare(right.command),\n );\n })();\n return {\n name,\n folder: folder && folder.length > 0 ? folder : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n required_create_fields: hasRequiredCreateFields ? requiredCreateFields : undefined,\n required_create_repeatables: hasRequiredCreateRepeatables ? requiredCreateRepeatables : undefined,\n options: hasOptions ? options : undefined,\n command_option_policies: hasCommandOptionPolicies ? commandOptionPolicies : undefined,\n };\n}\n\nexport function normalizeItemTypeDefinitions(definitions: ItemTypeDefinition[] | undefined): ItemTypeDefinition[] {\n const normalized = (definitions ?? [])\n .map((definition) => normalizeItemTypeDefinition(definition))\n .filter((definition): definition is ItemTypeDefinition => definition !== null);\n const dedupedByName = new Map<string, ItemTypeDefinition>();\n for (const definition of normalized) {\n dedupedByName.set(definition.name.toLowerCase(), definition);\n }\n return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction mergeSettings(raw: unknown): PmSettings {\n const defaults = cloneDefaults();\n const parsed = settingsSchema.safeParse(raw);\n if (!parsed.success) {\n return defaults;\n }\n const settings = parsed.data;\n const governance = resolveGovernanceKnobs({\n governance: settings.governance ?? { preset: \"default\" },\n });\n return {\n ...defaults,\n ...settings,\n item_format: settings.item_format ?? defaults.item_format,\n locks: { ...defaults.locks, ...settings.locks },\n output: { ...defaults.output, ...settings.output },\n history: { ...defaults.history, ...(settings.history ?? {}) },\n validation: {\n ...defaults.validation,\n ...(settings.validation ?? {}),\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n defaults.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n defaults.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n defaults.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n defaults.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n },\n governance,\n workflow: {\n definition_of_done: [...(settings.workflow?.definition_of_done ?? defaults.workflow.definition_of_done)],\n },\n testing: {\n record_results_to_items: settings.testing?.record_results_to_items ?? defaults.testing.record_results_to_items,\n },\n telemetry: {\n enabled: settings.telemetry?.enabled ?? defaults.telemetry.enabled,\n first_run_prompt_completed:\n settings.telemetry?.first_run_prompt_completed ?? defaults.telemetry.first_run_prompt_completed,\n capture_level: settings.telemetry?.capture_level ?? defaults.telemetry.capture_level,\n endpoint: settings.telemetry?.endpoint ?? defaults.telemetry.endpoint,\n installation_id: settings.telemetry?.installation_id ?? defaults.telemetry.installation_id,\n retention_days: settings.telemetry?.retention_days ?? defaults.telemetry.retention_days,\n },\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema ?? defaults.schema),\n context: {\n default_depth: settings.context?.default_depth ?? defaults.context.default_depth,\n activity_limit: settings.context?.activity_limit ?? defaults.context.activity_limit,\n stale_threshold_days: settings.context?.stale_threshold_days ?? defaults.context.stale_threshold_days,\n sections: {\n ...defaults.context.sections,\n ...(settings.context?.sections ?? {}),\n },\n },\n extensions: {\n enabled: [...settings.extensions.enabled],\n disabled: [...settings.extensions.disabled],\n },\n search: { ...defaults.search, ...settings.search },\n providers: {\n openai: { ...defaults.providers.openai, ...settings.providers.openai },\n ollama: { ...defaults.providers.ollama, ...settings.providers.ollama },\n },\n vector_store: {\n adapter: settings.vector_store.adapter ?? defaults.vector_store.adapter,\n qdrant: { ...defaults.vector_store.qdrant, ...settings.vector_store.qdrant },\n lancedb: { ...defaults.vector_store.lancedb, ...settings.vector_store.lancedb },\n },\n };\n}\n\nexport function serializeSettings(settings: PmSettings): string {\n const governance = resolveGovernanceKnobs(settings);\n const normalizedSettings: PmSettings = {\n ...settings,\n validation: {\n ...settings.validation,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n },\n governance,\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema),\n };\n const ordered = orderObject(\n {\n ...(normalizedSettings as unknown as Record<string, unknown>),\n governance: normalizeGovernanceForPersist(governance) as unknown,\n },\n [\n \"version\",\n \"id_prefix\",\n \"author_default\",\n \"item_format\",\n \"locks\",\n \"output\",\n \"history\",\n \"validation\",\n \"governance\",\n \"workflow\",\n \"testing\",\n \"telemetry\",\n \"item_types\",\n \"schema\",\n \"context\",\n \"extensions\",\n \"search\",\n \"providers\",\n \"vector_store\",\n ],\n );\n\n ordered.locks = orderObject(ordered.locks as Record<string, unknown>, [\"ttl_seconds\"]);\n ordered.output = orderObject(ordered.output as Record<string, unknown>, [\"default_format\"]);\n ordered.history = orderObject(ordered.history as Record<string, unknown>, [\"missing_stream\"]);\n ordered.validation = orderObject(ordered.validation as Record<string, unknown>, [\n \"sprint_release_format\",\n \"parent_reference\",\n \"metadata_profile\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n ]);\n ordered.governance = orderObject(ordered.governance as Record<string, unknown>, [\n \"preset\",\n \"ownership_enforcement\",\n \"create_mode_default\",\n \"close_validation_default\",\n \"parent_reference\",\n \"metadata_profile\",\n \"force_required_for_stale_lock\",\n ]);\n ordered.workflow = orderObject(ordered.workflow as Record<string, unknown>, [\"definition_of_done\"]);\n ordered.testing = orderObject(ordered.testing as Record<string, unknown>, [\"record_results_to_items\"]);\n ordered.telemetry = orderObject(ordered.telemetry as Record<string, unknown>, [\n \"enabled\",\n \"first_run_prompt_completed\",\n \"capture_level\",\n \"endpoint\",\n \"installation_id\",\n \"retention_days\",\n ]);\n ordered.item_types = orderObject(ordered.item_types as Record<string, unknown>, [\"definitions\"]);\n ordered.schema = orderObject(ordered.schema as Record<string, unknown>, [\n \"version\",\n \"files\",\n \"statuses\",\n \"fields\",\n \"workflow\",\n \"unknown_field_policy\",\n ]);\n (ordered.schema as Record<string, unknown>).files = orderObject(\n ((ordered.schema as Record<string, unknown>).files ?? {}) as Record<string, unknown>,\n [\"types\", \"statuses\", \"fields\", \"workflows\"],\n );\n (ordered.schema as Record<string, unknown>).workflow = orderObject(\n ((ordered.schema as Record<string, unknown>).workflow ?? {}) as Record<string, unknown>,\n [\"draft_status\", \"open_status\", \"in_progress_status\", \"blocked_status\", \"close_status\", \"canceled_status\"],\n );\n ordered.context = orderObject(ordered.context as Record<string, unknown>, [\n \"default_depth\",\n \"activity_limit\",\n \"stale_threshold_days\",\n \"sections\",\n ]);\n (ordered.context as Record<string, unknown>).sections = orderObject(\n ((ordered.context as Record<string, unknown>).sections ?? {}) as Record<string, unknown>,\n [\"hierarchy\", \"activity\", \"progress\", \"blockers\", \"files\", \"workload\", \"staleness\", \"tests\"],\n );\n ordered.extensions = orderObject(ordered.extensions as Record<string, unknown>, [\"enabled\", \"disabled\"]);\n ordered.search = orderObject(ordered.search as Record<string, unknown>, [\n \"score_threshold\",\n \"hybrid_semantic_weight\",\n \"max_results\",\n \"embedding_model\",\n \"embedding_batch_size\",\n \"scanner_max_batch_retries\",\n \"provider\",\n ]);\n ordered.providers = orderObject(ordered.providers as Record<string, unknown>, [\"openai\", \"ollama\"]);\n (ordered.providers as Record<string, unknown>).openai = orderObject(\n ((ordered.providers as Record<string, unknown>).openai ?? {}) as Record<string, unknown>,\n [\"base_url\", \"api_key\", \"model\"],\n );\n (ordered.providers as Record<string, unknown>).ollama = orderObject(\n ((ordered.providers as Record<string, unknown>).ollama ?? {}) as Record<string, unknown>,\n [\"base_url\", \"model\"],\n );\n ordered.vector_store = orderObject(ordered.vector_store as Record<string, unknown>, [\"adapter\", \"qdrant\", \"lancedb\"]);\n (ordered.vector_store as Record<string, unknown>).qdrant = orderObject(\n ((ordered.vector_store as Record<string, unknown>).qdrant ?? {}) as Record<string, unknown>,\n [\"url\", \"api_key\"],\n );\n (ordered.vector_store as Record<string, unknown>).lancedb = orderObject(\n ((ordered.vector_store as Record<string, unknown>).lancedb ?? {}) as Record<string, unknown>,\n [\"path\"],\n );\n\n return `${JSON.stringify(ordered, null, 2)}\\n`;\n}\n\nexport async function readSettingsWithMetadata(pmRoot: string): Promise<SettingsReadResult> {\n const settingsPath = getSettingsPath(pmRoot);\n const raw = await readFileIfExists(settingsPath);\n if (raw === null) {\n return buildFallbackSettingsReadResult();\n }\n await runActiveOnReadHooks({\n path: settingsPath,\n scope: \"project\",\n });\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return buildFallbackSettingsReadResult(\"settings_read_invalid_json\");\n }\n\n const validated = settingsSchema.safeParse(parsed);\n if (!validated.success) {\n return buildFallbackSettingsReadResult(\"settings_read_invalid_schema\");\n }\n\n try {\n const mergedSettings = mergeSettings(validated.data);\n const schemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, mergedSettings.schema);\n const loadedSchemaSections = await loadRuntimeSchemaFromOptionalFiles(pmRoot, mergedSettings.schema);\n const settings = {\n ...mergedSettings,\n item_types: {\n definitions: normalizeItemTypeDefinitions([\n ...mergedSettings.item_types.definitions,\n ...(loadedSchemaSections.type_definitions_from_file ?? []),\n ]),\n },\n schema: loadedSchemaSections.schema,\n };\n return {\n settings,\n metadata: {\n has_explicit_item_format: hasExplicitItemFormat(parsed),\n },\n warnings: [\n ...schemaScaffold.created_paths.map((createdPath) => `runtime_schema_bootstrap_created:${createdPath}`),\n ...loadedSchemaSections.warnings,\n ],\n };\n } catch {\n return buildFallbackSettingsReadResult(\"settings_read_merge_failed\");\n }\n}\n\nexport async function readSettings(pmRoot: string): Promise<PmSettings> {\n return (await readSettingsWithMetadata(pmRoot)).settings;\n}\n\nexport async function writeSettings(pmRoot: string, settings: PmSettings, op = SETTINGS_WRITE_OP): Promise<void> {\n const settingsPath = getSettingsPath(pmRoot);\n await writeFileAtomic(settingsPath, serializeSettings(settings));\n await runActiveOnWriteHooks({\n path: settingsPath,\n scope: \"project\",\n op,\n });\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { GlobalOptions } from "../shared/command-types.js";
|
|
2
|
+
import { type TelemetryErrorCategory } from "../shared/constants.js";
|
|
2
3
|
declare const PM_TELEMETRY_SOURCE_CONTEXT_VALUES: readonly ["user", "automation", "test", "dogfood", "audit_smoke"];
|
|
3
4
|
/** Wait for the most recent background flush to settle. Test-only helper. */
|
|
4
5
|
export declare function waitForPendingFlush(): Promise<void>;
|
|
@@ -31,10 +32,27 @@ export interface TelemetryCommandContext {
|
|
|
31
32
|
global: GlobalOptions;
|
|
32
33
|
pm_root: string;
|
|
33
34
|
}
|
|
34
|
-
export
|
|
35
|
-
export declare function finishTelemetryCommand(activeCommand: ActiveTelemetryCommand | null, outcome: {
|
|
35
|
+
export interface TelemetryCommandOutcome {
|
|
36
36
|
ok: boolean;
|
|
37
37
|
error?: string;
|
|
38
38
|
result?: unknown;
|
|
39
|
-
|
|
39
|
+
exit_code?: number;
|
|
40
|
+
error_code?: string;
|
|
41
|
+
error_category?: TelemetryErrorCategory;
|
|
42
|
+
}
|
|
43
|
+
export interface TelemetryErrorEventContext {
|
|
44
|
+
command: string;
|
|
45
|
+
args: string[];
|
|
46
|
+
options: Record<string, unknown>;
|
|
47
|
+
global: GlobalOptions;
|
|
48
|
+
pm_version: string;
|
|
49
|
+
pm_root: string;
|
|
50
|
+
error_code: string;
|
|
51
|
+
error_message: string;
|
|
52
|
+
exit_code: number;
|
|
53
|
+
error_category?: TelemetryErrorCategory;
|
|
54
|
+
}
|
|
55
|
+
export declare function startTelemetryCommand(context: TelemetryCommandContext): Promise<ActiveTelemetryCommand | null>;
|
|
56
|
+
export declare function finishTelemetryCommand(activeCommand: ActiveTelemetryCommand | null, outcome: TelemetryCommandOutcome): Promise<void>;
|
|
57
|
+
export declare function emitTelemetryErrorEvent(context: TelemetryErrorEventContext): Promise<void>;
|
|
40
58
|
export {};
|
|
@@ -2,6 +2,7 @@ import crypto from "node:crypto";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { appendLineAtomic, readFileIfExists, writeFileAtomic } from "../fs/fs-utils.js";
|
|
5
|
+
import { resolveTelemetryErrorCategory } from "../shared/constants.js";
|
|
5
6
|
import { nowIso } from "../shared/time.js";
|
|
6
7
|
import { resolveGlobalPmRoot } from "../store/paths.js";
|
|
7
8
|
import { readSettings, writeSettings } from "../store/settings.js";
|
|
@@ -52,6 +53,9 @@ const SENSITIVE_INLINE_KEY_PATTERN = "(?:token|secret|password|passwd|api[_-]?ke
|
|
|
52
53
|
const INLINE_SENSITIVE_ASSIGNMENT_PATTERN = new RegExp(`\\b(${SENSITIVE_INLINE_KEY_PATTERN})\\s*([:=])\\s*([^\\s,;]+)`, "giu");
|
|
53
54
|
const INLINE_SENSITIVE_FLAG_PATTERN = new RegExp(`(--${SENSITIVE_INLINE_KEY_PATTERN})(=|\\s+)([^\\s,;]+)`, "giu");
|
|
54
55
|
const ABSOLUTE_PATH_TOKEN_PATTERN = /(^|[\s"'`(=])\/(?:[^\s"'`),;]+)/g;
|
|
56
|
+
const EMAIL_PATTERN = /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/giu;
|
|
57
|
+
const BEARER_TOKEN_PATTERN = /bearer\s+[a-z0-9._=-]+/giu;
|
|
58
|
+
const PRIVATE_IP_PATTERN = /\b(?:10\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)|172\.(?:1[6-9]|2\d|3[01])\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)|192\.168\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.(?:25[0-5]|2[0-4]\d|[01]?\d?\d))\b/g;
|
|
55
59
|
function queuePath(globalPmRoot) {
|
|
56
60
|
return path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);
|
|
57
61
|
}
|
|
@@ -102,10 +106,14 @@ function redactInlineSensitiveAssignments(input) {
|
|
|
102
106
|
function redactAbsolutePathTokens(input) {
|
|
103
107
|
return input.replaceAll(ABSOLUTE_PATH_TOKEN_PATTERN, (_match, prefix) => `${prefix}[redacted_path]`);
|
|
104
108
|
}
|
|
109
|
+
function sanitizeCommonSensitiveTokens(input) {
|
|
110
|
+
const withoutEmails = input.replaceAll(EMAIL_PATTERN, "[redacted_email]");
|
|
111
|
+
const withoutBearer = withoutEmails.replaceAll(BEARER_TOKEN_PATTERN, "bearer [redacted_token]");
|
|
112
|
+
return withoutBearer.replaceAll(PRIVATE_IP_PATTERN, "[redacted_ip]");
|
|
113
|
+
}
|
|
105
114
|
function sanitizeStringRedacted(input) {
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutBearer);
|
|
115
|
+
const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);
|
|
116
|
+
const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);
|
|
109
117
|
const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);
|
|
110
118
|
const trimmed = withoutAbsolutePaths.trim();
|
|
111
119
|
if (trimmed.startsWith("/") && trimmed.length > 1) {
|
|
@@ -117,12 +125,17 @@ function sanitizeStringRedacted(input) {
|
|
|
117
125
|
return withoutAbsolutePaths;
|
|
118
126
|
}
|
|
119
127
|
function sanitizeStringMax(input) {
|
|
120
|
-
const
|
|
121
|
-
const withoutInlineSecrets = redactInlineSensitiveAssignments(
|
|
122
|
-
|
|
123
|
-
|
|
128
|
+
const withoutCommonSensitiveTokens = sanitizeCommonSensitiveTokens(input);
|
|
129
|
+
const withoutInlineSecrets = redactInlineSensitiveAssignments(withoutCommonSensitiveTokens);
|
|
130
|
+
const withoutAbsolutePaths = redactAbsolutePathTokens(withoutInlineSecrets);
|
|
131
|
+
const trimmed = withoutAbsolutePaths.trim();
|
|
132
|
+
if (trimmed.startsWith("/") && trimmed.length > 1) {
|
|
133
|
+
return "[redacted_path]";
|
|
134
|
+
}
|
|
135
|
+
if (withoutAbsolutePaths.length > 2048) {
|
|
136
|
+
return `${withoutAbsolutePaths.slice(0, 2045)}...`;
|
|
124
137
|
}
|
|
125
|
-
return
|
|
138
|
+
return withoutAbsolutePaths;
|
|
126
139
|
}
|
|
127
140
|
function sanitizeString(input, captureLevel = "redacted") {
|
|
128
141
|
if (captureLevel === "max") {
|
|
@@ -207,6 +220,28 @@ function normalizePmVersion(value) {
|
|
|
207
220
|
const trimmed = value?.trim() ?? "";
|
|
208
221
|
return trimmed.length > 0 ? trimmed : "0.0.0";
|
|
209
222
|
}
|
|
223
|
+
function normalizeTelemetryErrorCode(value) {
|
|
224
|
+
const normalized = value?.trim();
|
|
225
|
+
return normalized && normalized.length > 0 ? normalized : undefined;
|
|
226
|
+
}
|
|
227
|
+
function normalizeTelemetryExitCode(exitCode, ok) {
|
|
228
|
+
if (Number.isFinite(exitCode)) {
|
|
229
|
+
return Math.max(0, Math.trunc(exitCode ?? 0));
|
|
230
|
+
}
|
|
231
|
+
return ok ? 0 : 1;
|
|
232
|
+
}
|
|
233
|
+
function normalizeTelemetryErrorCategory(params) {
|
|
234
|
+
if (params.ok) {
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
if (typeof params.errorCategory === "string" && params.errorCategory.trim().length > 0) {
|
|
238
|
+
return params.errorCategory;
|
|
239
|
+
}
|
|
240
|
+
if (typeof params.errorCode === "string" && params.errorCode.trim().length > 0) {
|
|
241
|
+
return resolveTelemetryErrorCategory(params.errorCode);
|
|
242
|
+
}
|
|
243
|
+
return "unknown";
|
|
244
|
+
}
|
|
210
245
|
function resolveTelemetrySourceContext(globalOptions) {
|
|
211
246
|
const override = (process.env[PM_TELEMETRY_SOURCE_CONTEXT_ENV] ?? "").trim().toLowerCase();
|
|
212
247
|
if (PM_TELEMETRY_SOURCE_CONTEXT_SET.has(override)) {
|
|
@@ -305,6 +340,13 @@ async function exportLocalOtelSpan(activeCommand, outcome, finishedAtIso, durati
|
|
|
305
340
|
}
|
|
306
341
|
const serviceNameCandidate = sanitizeString((process.env[OTEL_SERVICE_NAME_ENV] ?? "").trim());
|
|
307
342
|
const serviceName = serviceNameCandidate.length > 0 ? serviceNameCandidate : "pm-cli";
|
|
343
|
+
const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);
|
|
344
|
+
const normalizedErrorCode = normalizeTelemetryErrorCode(outcome.error_code);
|
|
345
|
+
const normalizedErrorCategory = normalizeTelemetryErrorCategory({
|
|
346
|
+
ok: outcome.ok,
|
|
347
|
+
errorCode: normalizedErrorCode,
|
|
348
|
+
errorCategory: outcome.error_category,
|
|
349
|
+
});
|
|
308
350
|
const attributes = [
|
|
309
351
|
otlpStringAttribute("pm.command", sanitizeString(activeCommand.command)),
|
|
310
352
|
otlpStringAttribute("pm.version", activeCommand.pm_version),
|
|
@@ -315,8 +357,15 @@ async function exportLocalOtelSpan(activeCommand, outcome, finishedAtIso, durati
|
|
|
315
357
|
otlpStringAttribute("pm.pm_root_hash", activeCommand.pm_root_hash),
|
|
316
358
|
otlpStringAttribute("pm.cwd_hash", activeCommand.cwd_hash),
|
|
317
359
|
otlpBoolAttribute("pm.ok", outcome.ok),
|
|
360
|
+
otlpIntAttribute("pm.exit_code", normalizedExitCode),
|
|
318
361
|
otlpIntAttribute("pm.duration_ms", durationMs),
|
|
319
362
|
];
|
|
363
|
+
if (typeof normalizedErrorCode === "string") {
|
|
364
|
+
attributes.push(otlpStringAttribute("pm.error_code", normalizedErrorCode));
|
|
365
|
+
}
|
|
366
|
+
if (typeof normalizedErrorCategory === "string") {
|
|
367
|
+
attributes.push(otlpStringAttribute("pm.error_category", normalizedErrorCategory));
|
|
368
|
+
}
|
|
320
369
|
if (typeof outcome.error === "string" && outcome.error.trim().length > 0) {
|
|
321
370
|
attributes.push(otlpStringAttribute("pm.error", sanitizeString(outcome.error)));
|
|
322
371
|
}
|
|
@@ -436,7 +485,7 @@ function buildCommandStartPayload(params) {
|
|
|
436
485
|
};
|
|
437
486
|
}
|
|
438
487
|
function buildCommandFinishPayload(params) {
|
|
439
|
-
const { captureLevel, pmVersion, sourceContext, outcome, durationMs, startedAt } = params;
|
|
488
|
+
const { captureLevel, pmVersion, sourceContext, outcome, durationMs, startedAt, exitCode, errorCode, errorCategory } = params;
|
|
440
489
|
if (captureLevel === "minimal") {
|
|
441
490
|
return {
|
|
442
491
|
capture_level: captureLevel,
|
|
@@ -444,6 +493,9 @@ function buildCommandFinishPayload(params) {
|
|
|
444
493
|
source_context: sourceContext.source_context,
|
|
445
494
|
source_context_source: sourceContext.source_context_source,
|
|
446
495
|
ok: outcome.ok,
|
|
496
|
+
exit_code: exitCode,
|
|
497
|
+
error_code: errorCode,
|
|
498
|
+
error_category: errorCategory,
|
|
447
499
|
error: outcome.error ? sanitizeString(outcome.error, "redacted") : undefined,
|
|
448
500
|
duration_ms: durationMs,
|
|
449
501
|
};
|
|
@@ -454,12 +506,53 @@ function buildCommandFinishPayload(params) {
|
|
|
454
506
|
source_context: sourceContext.source_context,
|
|
455
507
|
source_context_source: sourceContext.source_context_source,
|
|
456
508
|
ok: outcome.ok,
|
|
509
|
+
exit_code: exitCode,
|
|
510
|
+
error_code: errorCode,
|
|
511
|
+
error_category: errorCategory,
|
|
457
512
|
error: outcome.error ? sanitizeString(outcome.error, captureLevel) : undefined,
|
|
458
513
|
duration_ms: durationMs,
|
|
459
514
|
started_at: startedAt,
|
|
460
515
|
result_summary: summarizeResult(outcome.result, captureLevel),
|
|
461
516
|
};
|
|
462
517
|
}
|
|
518
|
+
function buildCommandErrorPayload(params) {
|
|
519
|
+
const { captureLevel, pmVersion, sourceContext, command, args, options, pmRootHash, cwdHash, installationId, errorCode, errorMessage, errorCategory, exitCode, } = params;
|
|
520
|
+
if (captureLevel === "minimal") {
|
|
521
|
+
return {
|
|
522
|
+
capture_level: captureLevel,
|
|
523
|
+
pm_version: pmVersion,
|
|
524
|
+
source_context: sourceContext.source_context,
|
|
525
|
+
source_context_source: sourceContext.source_context_source,
|
|
526
|
+
error_code: errorCode,
|
|
527
|
+
error_category: errorCategory,
|
|
528
|
+
exit_code: exitCode,
|
|
529
|
+
error: sanitizeString(errorMessage, "redacted"),
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
capture_level: captureLevel,
|
|
534
|
+
pm_version: pmVersion,
|
|
535
|
+
source_context: sourceContext.source_context,
|
|
536
|
+
source_context_source: sourceContext.source_context_source,
|
|
537
|
+
attempted_command: sanitizeString(command, captureLevel),
|
|
538
|
+
attempted_args: sanitizeCommandArgs(args, captureLevel),
|
|
539
|
+
attempted_options: sanitizeValue(options, undefined, captureLevel),
|
|
540
|
+
error_code: errorCode,
|
|
541
|
+
error_category: errorCategory,
|
|
542
|
+
exit_code: exitCode,
|
|
543
|
+
error: sanitizeString(errorMessage, captureLevel),
|
|
544
|
+
pm_root_hash: pmRootHash,
|
|
545
|
+
cwd_hash: cwdHash,
|
|
546
|
+
runtime: {
|
|
547
|
+
node: process.version,
|
|
548
|
+
platform: process.platform,
|
|
549
|
+
arch: process.arch,
|
|
550
|
+
hostname_hash: hashWithInstallationId(installationId, os.hostname()),
|
|
551
|
+
stdin_tty: process.stdin.isTTY === true,
|
|
552
|
+
stdout_tty: process.stdout.isTTY === true,
|
|
553
|
+
},
|
|
554
|
+
};
|
|
555
|
+
}
|
|
463
556
|
async function ensureInstallationId(globalPmRoot) {
|
|
464
557
|
const settings = await readSettings(globalPmRoot);
|
|
465
558
|
let changed = false;
|
|
@@ -729,6 +822,13 @@ export async function finishTelemetryCommand(activeCommand, outcome) {
|
|
|
729
822
|
try {
|
|
730
823
|
const finishedAt = nowIso();
|
|
731
824
|
const durationMs = Math.max(0, Date.now() - activeCommand.started_at_ms);
|
|
825
|
+
const normalizedErrorCode = normalizeTelemetryErrorCode(outcome.error_code);
|
|
826
|
+
const normalizedErrorCategory = normalizeTelemetryErrorCategory({
|
|
827
|
+
ok: outcome.ok,
|
|
828
|
+
errorCode: normalizedErrorCode,
|
|
829
|
+
errorCategory: outcome.error_category,
|
|
830
|
+
});
|
|
831
|
+
const normalizedExitCode = normalizeTelemetryExitCode(outcome.exit_code, outcome.ok);
|
|
732
832
|
const event = {
|
|
733
833
|
schema_version: TELEMETRY_SCHEMA_VERSION,
|
|
734
834
|
event_id: crypto.randomUUID(),
|
|
@@ -747,11 +847,71 @@ export async function finishTelemetryCommand(activeCommand, outcome) {
|
|
|
747
847
|
outcome,
|
|
748
848
|
durationMs,
|
|
749
849
|
startedAt: activeCommand.started_at,
|
|
850
|
+
exitCode: normalizedExitCode,
|
|
851
|
+
errorCode: normalizedErrorCode,
|
|
852
|
+
errorCategory: normalizedErrorCategory,
|
|
750
853
|
}),
|
|
751
854
|
};
|
|
752
855
|
await enqueueTelemetryEvent(activeCommand.global_pm_root, event);
|
|
753
856
|
_lastFlushPromise = flushQueue(activeCommand.global_pm_root, activeCommand.endpoint, activeCommand.retention_days).catch(() => { });
|
|
754
|
-
void exportLocalOtelSpan(activeCommand,
|
|
857
|
+
void exportLocalOtelSpan(activeCommand, {
|
|
858
|
+
...outcome,
|
|
859
|
+
exit_code: normalizedExitCode,
|
|
860
|
+
error_code: normalizedErrorCode,
|
|
861
|
+
error_category: normalizedErrorCategory,
|
|
862
|
+
}, finishedAt, durationMs).catch(() => { });
|
|
863
|
+
}
|
|
864
|
+
catch {
|
|
865
|
+
// Telemetry must never block command execution.
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
export async function emitTelemetryErrorEvent(context) {
|
|
869
|
+
if (telemetryDisabledByEnvironment()) {
|
|
870
|
+
return;
|
|
871
|
+
}
|
|
872
|
+
try {
|
|
873
|
+
const globalPmRoot = resolveGlobalPmRoot(process.cwd());
|
|
874
|
+
const settings = await readSettings(globalPmRoot);
|
|
875
|
+
if (!settings.telemetry.enabled) {
|
|
876
|
+
return;
|
|
877
|
+
}
|
|
878
|
+
const captureLevel = normalizeCaptureLevel(settings.telemetry.capture_level);
|
|
879
|
+
const { installationId, endpoint, retentionDays } = await ensureInstallationId(globalPmRoot);
|
|
880
|
+
const pmVersion = normalizePmVersion(context.pm_version);
|
|
881
|
+
const sourceContext = resolveTelemetrySourceContext(context.global);
|
|
882
|
+
const pmRootHash = hashWithInstallationId(installationId, context.pm_root);
|
|
883
|
+
const cwdHash = hashWithInstallationId(installationId, process.cwd());
|
|
884
|
+
const occurredAt = nowIso();
|
|
885
|
+
const normalizedErrorCode = normalizeTelemetryErrorCode(context.error_code) ?? "unknown_error";
|
|
886
|
+
const normalizedErrorCategory = context.error_category ?? resolveTelemetryErrorCategory(normalizedErrorCode);
|
|
887
|
+
const normalizedExitCode = normalizeTelemetryExitCode(context.exit_code, false);
|
|
888
|
+
const normalizedCommand = context.command.trim().length > 0 ? context.command : "<unknown>";
|
|
889
|
+
const event = {
|
|
890
|
+
schema_version: TELEMETRY_SCHEMA_VERSION,
|
|
891
|
+
event_id: crypto.randomUUID(),
|
|
892
|
+
event_type: "command_error",
|
|
893
|
+
occurred_at: occurredAt,
|
|
894
|
+
installation_id: installationId,
|
|
895
|
+
session_id: PROCESS_SESSION_ID,
|
|
896
|
+
command: sanitizeString(normalizedCommand, "redacted"),
|
|
897
|
+
payload: buildCommandErrorPayload({
|
|
898
|
+
captureLevel,
|
|
899
|
+
pmVersion,
|
|
900
|
+
sourceContext,
|
|
901
|
+
command: normalizedCommand,
|
|
902
|
+
args: context.args,
|
|
903
|
+
options: context.options,
|
|
904
|
+
pmRootHash,
|
|
905
|
+
cwdHash,
|
|
906
|
+
installationId,
|
|
907
|
+
errorCode: normalizedErrorCode,
|
|
908
|
+
errorCategory: normalizedErrorCategory,
|
|
909
|
+
exitCode: normalizedExitCode,
|
|
910
|
+
errorMessage: context.error_message,
|
|
911
|
+
}),
|
|
912
|
+
};
|
|
913
|
+
await enqueueTelemetryEvent(globalPmRoot, event);
|
|
914
|
+
_lastFlushPromise = flushQueue(globalPmRoot, endpoint, retentionDays).catch(() => { });
|
|
755
915
|
}
|
|
756
916
|
catch {
|
|
757
917
|
// Telemetry must never block command execution.
|