perttool 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/README.md +14 -8
  3. package/dist/application/cli-facade.d.ts +2 -1
  4. package/dist/application/cli-facade.d.ts.map +1 -1
  5. package/dist/application/cli-facade.js +2 -1
  6. package/dist/application/cli-facade.js.map +1 -1
  7. package/dist/application/contract11-candidate.d.ts +23 -0
  8. package/dist/application/contract11-candidate.d.ts.map +1 -0
  9. package/dist/application/contract11-candidate.js +48 -0
  10. package/dist/application/contract11-candidate.js.map +1 -0
  11. package/dist/application/contract11-migration.d.ts +35 -0
  12. package/dist/application/contract11-migration.d.ts.map +1 -0
  13. package/dist/application/contract11-migration.js +46 -0
  14. package/dist/application/contract11-migration.js.map +1 -0
  15. package/dist/application/contract11-runtime.d.ts +11 -0
  16. package/dist/application/contract11-runtime.d.ts.map +1 -0
  17. package/dist/application/contract11-runtime.js +65 -0
  18. package/dist/application/contract11-runtime.js.map +1 -0
  19. package/dist/application/contract8-milestone-acceptance.d.ts +6 -0
  20. package/dist/application/contract8-milestone-acceptance.d.ts.map +1 -1
  21. package/dist/application/contract8-milestone-acceptance.js +10 -1
  22. package/dist/application/contract8-milestone-acceptance.js.map +1 -1
  23. package/dist/application/contract9-projection.d.ts +1 -1
  24. package/dist/application/contract9-projection.d.ts.map +1 -1
  25. package/dist/application/contract9-projection.js.map +1 -1
  26. package/dist/application/plan-review-mutation.d.ts +52 -0
  27. package/dist/application/plan-review-mutation.d.ts.map +1 -0
  28. package/dist/application/plan-review-mutation.js +86 -0
  29. package/dist/application/plan-review-mutation.js.map +1 -0
  30. package/dist/assurance/canonical.d.ts +3 -1
  31. package/dist/assurance/canonical.d.ts.map +1 -1
  32. package/dist/assurance/canonical.js +2 -2
  33. package/dist/assurance/canonical.js.map +1 -1
  34. package/dist/cli.js +490 -132
  35. package/dist/cli.js.map +1 -1
  36. package/dist/command/contract11-discovery.d.ts +17 -0
  37. package/dist/command/contract11-discovery.d.ts.map +1 -0
  38. package/dist/command/contract11-discovery.js +129 -0
  39. package/dist/command/contract11-discovery.js.map +1 -0
  40. package/dist/command/contract11-usage.d.ts +24 -0
  41. package/dist/command/contract11-usage.d.ts.map +1 -0
  42. package/dist/command/contract11-usage.js +39 -0
  43. package/dist/command/contract11-usage.js.map +1 -0
  44. package/dist/core/index.d.ts +2 -2
  45. package/dist/core/index.d.ts.map +1 -1
  46. package/dist/core/index.js +2 -1
  47. package/dist/core/index.js.map +1 -1
  48. package/dist/help/contract11-guide.d.ts +10 -0
  49. package/dist/help/contract11-guide.d.ts.map +1 -0
  50. package/dist/help/contract11-guide.js +73 -0
  51. package/dist/help/contract11-guide.js.map +1 -0
  52. package/dist/index.d.ts +19 -5
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +15 -4
  55. package/dist/index.js.map +1 -1
  56. package/dist/model/canonical-json.d.ts +3 -0
  57. package/dist/model/canonical-json.d.ts.map +1 -0
  58. package/dist/model/canonical-json.js +47 -0
  59. package/dist/model/canonical-json.js.map +1 -0
  60. package/dist/model/rfc8785.d.ts +2 -0
  61. package/dist/model/rfc8785.d.ts.map +1 -0
  62. package/dist/model/rfc8785.js +47 -0
  63. package/dist/model/rfc8785.js.map +1 -0
  64. package/dist/plan-review/advance.d.ts +28 -0
  65. package/dist/plan-review/advance.d.ts.map +1 -0
  66. package/dist/plan-review/advance.js +67 -0
  67. package/dist/plan-review/advance.js.map +1 -0
  68. package/dist/plan-review/authority.d.ts +4 -0
  69. package/dist/plan-review/authority.d.ts.map +1 -0
  70. package/dist/plan-review/authority.js +21 -0
  71. package/dist/plan-review/authority.js.map +1 -0
  72. package/dist/plan-review/basis.d.ts +25 -0
  73. package/dist/plan-review/basis.d.ts.map +1 -0
  74. package/dist/plan-review/basis.js +287 -0
  75. package/dist/plan-review/basis.js.map +1 -0
  76. package/dist/plan-review/format.d.ts +5 -0
  77. package/dist/plan-review/format.d.ts.map +1 -0
  78. package/dist/plan-review/format.js +54 -0
  79. package/dist/plan-review/format.js.map +1 -0
  80. package/dist/plan-review/lifecycle.d.ts +11 -0
  81. package/dist/plan-review/lifecycle.d.ts.map +1 -0
  82. package/dist/plan-review/lifecycle.js +80 -0
  83. package/dist/plan-review/lifecycle.js.map +1 -0
  84. package/dist/plan-review/mutation-types.d.ts +112 -0
  85. package/dist/plan-review/mutation-types.d.ts.map +1 -0
  86. package/dist/plan-review/mutation-types.js +4 -0
  87. package/dist/plan-review/mutation-types.js.map +1 -0
  88. package/dist/plan-review/mutation.d.ts +4 -0
  89. package/dist/plan-review/mutation.d.ts.map +1 -0
  90. package/dist/plan-review/mutation.js +421 -0
  91. package/dist/plan-review/mutation.js.map +1 -0
  92. package/dist/plan-review/projection.d.ts +4 -0
  93. package/dist/plan-review/projection.d.ts.map +1 -0
  94. package/dist/plan-review/projection.js +19 -0
  95. package/dist/plan-review/projection.js.map +1 -0
  96. package/dist/plan-review/request-size.d.ts +3 -0
  97. package/dist/plan-review/request-size.d.ts.map +1 -0
  98. package/dist/plan-review/request-size.js +86 -0
  99. package/dist/plan-review/request-size.js.map +1 -0
  100. package/dist/plan-review/request.d.ts +11 -0
  101. package/dist/plan-review/request.d.ts.map +1 -0
  102. package/dist/plan-review/request.js +268 -0
  103. package/dist/plan-review/request.js.map +1 -0
  104. package/dist/plan-review/source-lexical.d.ts +23 -0
  105. package/dist/plan-review/source-lexical.d.ts.map +1 -0
  106. package/dist/plan-review/source-lexical.js +75 -0
  107. package/dist/plan-review/source-lexical.js.map +1 -0
  108. package/dist/plan-review/source-types.d.ts +81 -0
  109. package/dist/plan-review/source-types.d.ts.map +1 -0
  110. package/dist/plan-review/source-types.js +2 -0
  111. package/dist/plan-review/source-types.js.map +1 -0
  112. package/dist/plan-review/source.d.ts +16 -0
  113. package/dist/plan-review/source.d.ts.map +1 -0
  114. package/dist/plan-review/source.js +346 -0
  115. package/dist/plan-review/source.js.map +1 -0
  116. package/dist/plan-review/write.d.ts +4 -0
  117. package/dist/plan-review/write.d.ts.map +1 -0
  118. package/dist/plan-review/write.js +51 -0
  119. package/dist/plan-review/write.js.map +1 -0
  120. package/dist/planning-pool/history-guard.d.ts +7 -1
  121. package/dist/planning-pool/history-guard.d.ts.map +1 -1
  122. package/dist/planning-pool/history-guard.js +13 -12
  123. package/dist/planning-pool/history-guard.js.map +1 -1
  124. package/dist/planning-pool/projection.d.ts +1 -1
  125. package/dist/planning-pool/projection.d.ts.map +1 -1
  126. package/dist/planning-pool/projection.js.map +1 -1
  127. package/dist/planning-pool/source-lexical.d.ts.map +1 -1
  128. package/dist/planning-pool/source-lexical.js +2 -22
  129. package/dist/planning-pool/source-lexical.js.map +1 -1
  130. package/dist/recommendation/override-types.d.ts +2 -2
  131. package/dist/recommendation/override-types.d.ts.map +1 -1
  132. package/dist/recommendation/override.d.ts +1 -1
  133. package/dist/recommendation/override.d.ts.map +1 -1
  134. package/dist/recommendation/override.js +6 -5
  135. package/dist/recommendation/override.js.map +1 -1
  136. package/dist/schema/registry.d.ts +1 -1
  137. package/dist/schema/registry.d.ts.map +1 -1
  138. package/dist/schema/registry.js +5 -2
  139. package/dist/schema/registry.js.map +1 -1
  140. package/dist/temporal-schedule/source-lexical.d.ts +5 -0
  141. package/dist/temporal-schedule/source-lexical.d.ts.map +1 -1
  142. package/dist/temporal-schedule/source-lexical.js +21 -4
  143. package/dist/temporal-schedule/source-lexical.js.map +1 -1
  144. package/dist/version.d.ts +1 -1
  145. package/dist/version.d.ts.map +1 -1
  146. package/dist/version.js +2 -1
  147. package/dist/version.js.map +1 -1
  148. package/package.json +1 -1
  149. package/schemas/Perttool.AdvanceResult.v4.schema.json +4 -1
  150. package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
  151. package/schemas/Perttool.AnalysisResult.v7.schema.json +1 -1
  152. package/schemas/Perttool.CheckResult.v6.schema.json +1 -1
  153. package/schemas/Perttool.CliError.v1.schema.json +1 -1
  154. package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
  155. package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
  156. package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
  157. package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
  158. package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +1 -1
  159. package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
  160. package/schemas/Perttool.InitResult.v1.schema.json +1 -1
  161. package/schemas/Perttool.MilestoneAcceptanceMigrationResult.v1.schema.json +1 -1
  162. package/schemas/Perttool.MilestoneAcceptanceResult.v1.schema.json +1 -1
  163. package/schemas/Perttool.MutationResult.v6.schema.json +1 -1
  164. package/schemas/{Perttool.NextResult.v8.schema.json → Perttool.NextResult.v9.schema.json} +40 -7
  165. package/schemas/Perttool.PlanAssuranceResult.v2.schema.json +1 -1
  166. package/schemas/Perttool.PlanReviewMutationResult.v1.schema.json +2203 -0
  167. package/schemas/Perttool.PlanReviewResult.v1.schema.json +245 -0
  168. package/schemas/Perttool.PlanningMutationResult.v1.schema.json +1 -1
  169. package/schemas/Perttool.PlanningPoolResult.v1.schema.json +1 -1
  170. package/schemas/Perttool.PlanningReshapePreflightResult.v1.schema.json +1 -1
  171. package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
  172. package/schemas/Perttool.ProjectResult.v5.schema.json +1 -1
  173. package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
  174. package/schemas/Perttool.UnitMigrationResult.v5.schema.json +1 -1
  175. package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
  176. package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
@@ -0,0 +1,47 @@
1
+ export function assertUnicodeScalars(value) {
2
+ for (let index = 0; index < value.length; index += 1) {
3
+ const code = value.charCodeAt(index);
4
+ if (code >= 0xd800 && code <= 0xdbff) {
5
+ const next = value.charCodeAt(index + 1);
6
+ if (!(next >= 0xdc00 && next <= 0xdfff)) {
7
+ throw new Error("canonical JSON string contains a lone high surrogate");
8
+ }
9
+ index += 1;
10
+ }
11
+ else if (code >= 0xdc00 && code <= 0xdfff) {
12
+ throw new Error("canonical JSON string contains a lone low surrogate");
13
+ }
14
+ }
15
+ }
16
+ export function encodeCanonicalJson(value, sortObjectKeys = false) {
17
+ if (value === null)
18
+ return "null";
19
+ if (typeof value === "string") {
20
+ assertUnicodeScalars(value);
21
+ return JSON.stringify(value);
22
+ }
23
+ if (typeof value === "boolean")
24
+ return value ? "true" : "false";
25
+ if (typeof value === "number") {
26
+ if (!Number.isSafeInteger(value)) {
27
+ throw new Error("canonical JSON numbers must be safe integers");
28
+ }
29
+ return String(value);
30
+ }
31
+ if (Array.isArray(value)) {
32
+ return `[${value.map((item) => encodeCanonicalJson(item, sortObjectKeys)).join(",")}]`;
33
+ }
34
+ if (typeof value !== "object") {
35
+ throw new Error("canonical JSON value is unsupported");
36
+ }
37
+ const entries = Object.entries(value);
38
+ if (sortObjectKeys)
39
+ entries.sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0);
40
+ return `{${entries.map(([key, item]) => {
41
+ if (item === undefined) {
42
+ throw new Error(`canonical JSON field ${key} is undefined`);
43
+ }
44
+ return `${encodeCanonicalJson(key, sortObjectKeys)}:${encodeCanonicalJson(item, sortObjectKeys)}`;
45
+ }).join(",")}}`;
46
+ }
47
+ //# sourceMappingURL=canonical-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../src/model/canonical-json.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAc,EACd,cAAc,GAAG,KAAK;IAEtB,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACzF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAA0C,CAAC,CAAC;IAC3E,IAAI,cAAc;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;QACrC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,eAAe,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC;IACpG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function rfc8785Json(value: unknown): string;
2
+ //# sourceMappingURL=rfc8785.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfc8785.d.ts","sourceRoot":"","sources":["../../src/model/rfc8785.ts"],"names":[],"mappings":"AAyBA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAmBlD"}
@@ -0,0 +1,47 @@
1
+ function jsonString(value) {
2
+ for (let index = 0; index < value.length; index += 1) {
3
+ const code = value.charCodeAt(index);
4
+ if (code >= 0xd800 && code <= 0xdbff) {
5
+ const next = value.charCodeAt(index + 1);
6
+ if (next < 0xdc00 || next > 0xdfff) {
7
+ throw new Error("RFC 8785 input contains a lone high surrogate");
8
+ }
9
+ index += 1;
10
+ }
11
+ else if (code >= 0xdc00 && code <= 0xdfff) {
12
+ throw new Error("RFC 8785 input contains a lone low surrogate");
13
+ }
14
+ }
15
+ return JSON.stringify(value);
16
+ }
17
+ function jsonObject(value) {
18
+ const fields = Object.keys(value).sort().map((key) => {
19
+ const item = value[key];
20
+ if (item === undefined)
21
+ throw new Error(`RFC 8785 field ${key} is undefined`);
22
+ return `${jsonString(key)}:${rfc8785Json(item)}`;
23
+ });
24
+ return `{${fields.join(",")}}`;
25
+ }
26
+ export function rfc8785Json(value) {
27
+ if (value === null)
28
+ return "null";
29
+ switch (typeof value) {
30
+ case "string":
31
+ return jsonString(value);
32
+ case "boolean":
33
+ return String(value);
34
+ case "number":
35
+ if (!Number.isSafeInteger(value)) {
36
+ throw new Error("RFC 8785 number is not a safe integer");
37
+ }
38
+ return String(value);
39
+ case "object":
40
+ return Array.isArray(value)
41
+ ? `[${value.map(rfc8785Json).join(",")}]`
42
+ : jsonObject(value);
43
+ default:
44
+ throw new Error("RFC 8785 value is unsupported");
45
+ }
46
+ }
47
+ //# sourceMappingURL=rfc8785.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rfc8785.js","sourceRoot":"","sources":["../../src/model/rfc8785.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU,CAAC,KAAa;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,UAAU,CAAC,KAAwC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,eAAe,CAAC,CAAC;QAC9E,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAClC,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,QAAQ;YACX,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACzB,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;gBACzC,CAAC,CAAC,UAAU,CAAC,KAA0C,CAAC,CAAC;QAC7D;YACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { Diagnostic } from "../model/diagnostics.js";
2
+ import { type TextEdit } from "../mutation/text-edits.js";
3
+ import type { PlanningDestructiveRecord } from "../planning-pool/projection.js";
4
+ import { type PlanningHistoryGuard } from "../planning-pool/history-guard.js";
5
+ import type { AdvanceHistoryBaselineCapture } from "../history/git-probe.js";
6
+ import { assessPlanReviewTaskLifecycle } from "./lifecycle.js";
7
+ export interface PlanReviewAdvanceCleanup {
8
+ readonly edits: readonly TextEdit[];
9
+ readonly removedRequestIds: readonly string[];
10
+ readonly destructiveRecords: readonly PlanningDestructiveRecord[];
11
+ }
12
+ export interface PlanReviewAdvanceCandidate {
13
+ readonly ok: boolean;
14
+ readonly updatedText: string | null;
15
+ readonly edits: readonly TextEdit[];
16
+ readonly removedRequestIds: readonly string[];
17
+ readonly blockingRequestIds: readonly string[];
18
+ readonly destructiveRecords: readonly PlanningDestructiveRecord[];
19
+ readonly diagnostics: readonly Diagnostic[];
20
+ }
21
+ /** Compose these edits with the lower advance before validating the complete final candidate. */
22
+ export declare function planPlanReviewAdvanceCleanup(inputText: string, removedTaskIds: readonly string[]): PlanReviewAdvanceCleanup;
23
+ /** Join lower canonical advance edits with request cleanup before any write gate. */
24
+ export declare function composePlanReviewAdvanceCandidate(inputText: string, lowerEdits: readonly TextEdit[], removedTaskIds: readonly string[]): PlanReviewAdvanceCandidate;
25
+ /** Apply the existing exact HEAD/stage-0 record proof to removed requests. */
26
+ export declare function assessPlanReviewAdvanceHistory(inputText: string, candidate: PlanReviewAdvanceCandidate, baseline: AdvanceHistoryBaselineCapture, forceRequested?: boolean): PlanningHistoryGuard;
27
+ export { assessPlanReviewTaskLifecycle };
28
+ //# sourceMappingURL=advance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.d.ts","sourceRoot":"","sources":["../../src/plan-review/advance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAsC,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAO/D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,yBAAyB,EAAE,CAAC;CACnE;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAClE,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,iGAAiG;AACjG,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,wBAAwB,CA6B1B;AAED,qFAAqF;AACrF,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,QAAQ,EAAE,EAC/B,cAAc,EAAE,SAAS,MAAM,EAAE,GAChC,0BAA0B,CAkB5B;AAED,8EAA8E;AAC9E,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,0BAA0B,EACrC,QAAQ,EAAE,6BAA6B,EACvC,cAAc,UAAQ,GACrB,oBAAoB,CAatB;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { applyTextEdits, normalizeTextEdits } from "../mutation/text-edits.js";
2
+ import { assessPlanningHistoryBaseline, } from "../planning-pool/history-guard.js";
3
+ import { assessPlanReviewTaskLifecycle } from "./lifecycle.js";
4
+ import { scanPlanReviewDeclarationBlocks } from "./source-lexical.js";
5
+ import { parsePlanReviewSource, PLAN_REVIEW_SOURCE_CAPABILITY, } from "./source.js";
6
+ /** Compose these edits with the lower advance before validating the complete final candidate. */
7
+ export function planPlanReviewAdvanceCleanup(inputText, removedTaskIds) {
8
+ const input = parsePlanReviewSource(inputText, PLAN_REVIEW_SOURCE_CAPABILITY);
9
+ if (!input.ok || input.model === null) {
10
+ throw new TypeError("a valid Grammar 10 Plan Review input is required");
11
+ }
12
+ const removedTasks = new Set(removedTaskIds);
13
+ const removable = new Set(input.model.requests
14
+ .filter(({ outcome, taskId }) => outcome !== null && removedTasks.has(taskId))
15
+ .map(({ id }) => id));
16
+ const selected = scanPlanReviewDeclarationBlocks(inputText)
17
+ .filter(({ id }) => removable.has(id));
18
+ const edits = selected.map((block) => Object.freeze({
19
+ startOffset: block.header.start,
20
+ endOffset: block.lines.at(-1)?.end ?? block.header.end,
21
+ replacement: "",
22
+ }));
23
+ const destructiveRecords = selected.map((block) => Object.freeze({
24
+ ownerClass: "canonical",
25
+ entityKind: "plan_review_request",
26
+ qualifiedId: `${input.model.documentId}::${block.id}`,
27
+ startOffset: block.header.start,
28
+ endOffset: block.lines.at(-1)?.end ?? block.header.end,
29
+ }));
30
+ return Object.freeze({
31
+ edits: Object.freeze(edits),
32
+ removedRequestIds: Object.freeze(selected.map(({ id }) => id)),
33
+ destructiveRecords: Object.freeze(destructiveRecords),
34
+ });
35
+ }
36
+ /** Join lower canonical advance edits with request cleanup before any write gate. */
37
+ export function composePlanReviewAdvanceCandidate(inputText, lowerEdits, removedTaskIds) {
38
+ const cleanup = planPlanReviewAdvanceCleanup(inputText, removedTaskIds);
39
+ const edits = normalizeTextEdits(inputText, [...lowerEdits, ...cleanup.edits], "Plan Review canonical advance");
40
+ const candidate = applyTextEdits(inputText, edits);
41
+ const lifecycle = assessPlanReviewTaskLifecycle(inputText, candidate, "advance");
42
+ const checked = parsePlanReviewSource(candidate, PLAN_REVIEW_SOURCE_CAPABILITY);
43
+ const valid = lifecycle.ok && checked.ok;
44
+ return Object.freeze({
45
+ ok: valid,
46
+ updatedText: valid ? candidate : null,
47
+ edits: valid ? edits : Object.freeze([]),
48
+ removedRequestIds: valid ? cleanup.removedRequestIds : Object.freeze([]),
49
+ blockingRequestIds: lifecycle.blockingRequestIds,
50
+ destructiveRecords: valid ? cleanup.destructiveRecords : Object.freeze([]),
51
+ diagnostics: Object.freeze([...lifecycle.diagnostics,
52
+ ...checked.diagnostics]),
53
+ });
54
+ }
55
+ /** Apply the existing exact HEAD/stage-0 record proof to removed requests. */
56
+ export function assessPlanReviewAdvanceHistory(inputText, candidate, baseline, forceRequested = false) {
57
+ if (!candidate.ok || candidate.updatedText === null) {
58
+ throw new TypeError("a valid Plan Review advance candidate is required");
59
+ }
60
+ return assessPlanningHistoryBaseline(inputText, candidate.destructiveRecords, baseline, forceRequested, (source) => scanPlanReviewDeclarationBlocks(source).map((block) => Object.freeze({
61
+ kind: "plan_review_request", id: block.id,
62
+ startOffset: block.header.start,
63
+ endOffset: block.lines.at(-1)?.end ?? block.header.end,
64
+ })));
65
+ }
66
+ export { assessPlanReviewTaskLifecycle };
67
+ //# sourceMappingURL=advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.js","sourceRoot":"","sources":["../../src/plan-review/advance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { GovernanceSourceSnapshot } from "../governance/source.js";
2
+ import type { PlanReviewAuthorityDecisionV1 } from "./mutation-types.js";
3
+ export declare function evaluatePlanReviewAuthority(requestId: string, sourceDigest: string, candidateDigest: string, actor: string, acceptedOwners: readonly string[], effective: GovernanceSourceSnapshot["effective"]): PlanReviewAuthorityDecisionV1;
4
+ //# sourceMappingURL=authority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/plan-review/authority.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEzE,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,SAAS,MAAM,EAAE,EACjC,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,GAC/C,6BAA6B,CAiB/B"}
@@ -0,0 +1,21 @@
1
+ // R: Evaluate Plan Review resolution authority from the effective DAG owner and delegates.
2
+ import { compareStableStrings } from "../model/diagnostics.js";
3
+ export function evaluatePlanReviewAuthority(requestId, sourceDigest, candidateDigest, actor, acceptedOwners, effective) {
4
+ const delegates = Object.freeze([...effective.dagDelegates].sort(compareStableStrings));
5
+ const actorDirect = actor === effective.dagOwner || effective.dagDelegates.has(actor);
6
+ const ownerConfirmationSatisfied = acceptedOwners.includes(effective.dagOwner);
7
+ return Object.freeze({
8
+ model_version: 1,
9
+ request_id: requestId,
10
+ source_digest: sourceDigest,
11
+ candidate_digest: candidateDigest,
12
+ actor,
13
+ effective_dag_owner: effective.dagOwner,
14
+ effective_dag_delegates: delegates,
15
+ actor_direct: actorDirect,
16
+ owner_confirmation_required: !actorDirect,
17
+ owner_confirmation_satisfied: ownerConfirmationSatisfied,
18
+ authorized: actorDirect || ownerConfirmationSatisfied,
19
+ });
20
+ }
21
+ //# sourceMappingURL=authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/plan-review/authority.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAI/D,MAAM,UAAU,2BAA2B,CACzC,SAAiB,EACjB,YAAoB,EACpB,eAAuB,EACvB,KAAa,EACb,cAAiC,EACjC,SAAgD;IAEhD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IACxF,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtF,MAAM,0BAA0B,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,SAAS;QACrB,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,eAAe;QACjC,KAAK;QACL,mBAAmB,EAAE,SAAS,CAAC,QAAQ;QACvC,uBAAuB,EAAE,SAAS;QAClC,YAAY,EAAE,WAAW;QACzB,2BAA2B,EAAE,CAAC,WAAW;QACzC,4BAA4B,EAAE,0BAA0B;QACxD,UAAU,EAAE,WAAW,IAAI,0BAA0B;KACtD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { PlanReviewSourceModel } from "./source-types.js";
2
+ export declare const PLAN_REVIEW_BASIS_MODEL_VERSION: 1;
3
+ export declare const PLAN_REVIEW_BASIS_ID: "Perttool.PlanReviewBasis.v1";
4
+ export interface PlanReviewBasisV1 {
5
+ readonly model_version: 1;
6
+ readonly project: {
7
+ readonly id: string;
8
+ readonly finish_milestone_id: string;
9
+ readonly duration_unit: string;
10
+ readonly velocity: string | null;
11
+ readonly target_duration: string | null;
12
+ readonly critical_epsilon: string;
13
+ };
14
+ readonly calendars: readonly unknown[];
15
+ readonly resources: readonly unknown[];
16
+ readonly milestones: readonly unknown[];
17
+ readonly tasks: readonly unknown[];
18
+ readonly gates: readonly unknown[];
19
+ readonly assurance_relations: readonly unknown[];
20
+ readonly planning_pool: Readonly<Record<string, unknown>> | null;
21
+ }
22
+ export declare function projectPlanReviewBasis(model: PlanReviewSourceModel): PlanReviewBasisV1;
23
+ export declare function canonicalPlanReviewBasisJson(value: PlanReviewBasisV1): string;
24
+ export declare function digestPlanReviewBasis(value: PlanReviewBasisV1): `sha256:${string}`;
25
+ //# sourceMappingURL=basis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basis.d.ts","sourceRoot":"","sources":["../../src/plan-review/basis.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,eAAO,MAAM,+BAA+B,EAAG,CAAU,CAAC;AAC1D,eAAO,MAAM,oBAAoB,EAAG,6BAAsC,CAAC;AAE3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,OAAO,EAAE,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAClE;AAwQD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,iBAAiB,CAoCtF;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAE7E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,MAAM,EAAE,CAElF"}
@@ -0,0 +1,287 @@
1
+ // R: Project and digest the closed semantic planning basis for Plan Review.
2
+ import { canonicalizeEventDateTimeSourceToken, } from "../model/calendar.js";
3
+ import { canonicalizeExactDurationSourceToken } from "../model/exact-duration-source.js";
4
+ import { canonicalizeExactVelocitySourceToken } from "../model/exact-velocity-source.js";
5
+ import { compareStableStrings } from "../model/diagnostics.js";
6
+ import { sha256DigestUtf8 } from "../model/sha256.js";
7
+ import { rfc8785Json } from "../model/rfc8785.js";
8
+ import { fieldNamed, } from "../model/syntax.js";
9
+ import { evaluatePlanAssurance } from "../assurance/evaluate.js";
10
+ import { calendarRecord, timingRecord } from "../assurance/canonical.js";
11
+ import { projectPlanAssuranceInput } from "../assurance/source.js";
12
+ import { canonicalPlanningCalendar } from "../planning-pool/source-values.js";
13
+ import { canonicalInstant } from "../temporal-schedule/source-values.js";
14
+ export const PLAN_REVIEW_BASIS_MODEL_VERSION = 1;
15
+ export const PLAN_REVIEW_BASIS_ID = "Perttool.PlanReviewBasis.v1";
16
+ function requiredDeclaration(declarations, kind) {
17
+ const value = declarations.find((declaration) => declaration.kind === kind);
18
+ if (value === undefined)
19
+ throw new Error(`validated document has no ${kind}`);
20
+ return value;
21
+ }
22
+ function stringField(declaration, name) {
23
+ const value = fieldNamed(declaration, name)?.value;
24
+ if (value === undefined)
25
+ return null;
26
+ if (typeof value !== "string") {
27
+ throw new Error(`validated ${declaration.kind}.${name} is not a string`);
28
+ }
29
+ return value;
30
+ }
31
+ function integerField(declaration, name, fallback) {
32
+ const value = fieldNamed(declaration, name)?.value ?? fallback;
33
+ if (!Number.isSafeInteger(value)) {
34
+ throw new Error(`validated ${declaration.kind}.${name} is not an integer`);
35
+ }
36
+ return value;
37
+ }
38
+ function exactScalar(fieldText, fallback) {
39
+ if (fieldText === undefined)
40
+ return fallback;
41
+ const value = canonicalizeExactDurationSourceToken(fieldText);
42
+ if (value === null)
43
+ throw new Error("validated exact duration lost canonical form");
44
+ return value.token;
45
+ }
46
+ function calendarValue(value) {
47
+ if (value === null)
48
+ return null;
49
+ if (value.kind === "date")
50
+ return value.sourceText;
51
+ const canonical = canonicalizeEventDateTimeSourceToken(value.sourceText);
52
+ if (canonical === null)
53
+ throw new Error("validated date-time lost canonical form");
54
+ return canonical;
55
+ }
56
+ function temporalBounds(bounds, entityId) {
57
+ return bounds.filter(({ entityId: id }) => id === entityId).map((bound) => ({
58
+ event: bound.event,
59
+ direction: bound.direction,
60
+ value: canonicalInstant(bound.value),
61
+ }));
62
+ }
63
+ function calendarProfile(profile) {
64
+ return profile.kind === "continuous_fixed_offset"
65
+ ? { kind: "continuous_fixed_offset" }
66
+ : {
67
+ kind: "named_zone",
68
+ zone_id: profile.zoneId,
69
+ tzdb_release: profile.tzdbRelease,
70
+ calendar_id: profile.calendarId,
71
+ workday_hours: profile.workdayHours === null
72
+ ? null
73
+ : {
74
+ numerator: profile.workdayHours.numerator.toString(),
75
+ denominator: profile.workdayHours.denominator.toString(),
76
+ },
77
+ };
78
+ }
79
+ function calendars(model) {
80
+ return model.base.calendars.map((calendar) => ({
81
+ id: calendar.id,
82
+ profile: calendarProfile(model.base.profile),
83
+ weekdays: calendar.weekdays.map((day) => ({
84
+ weekday: day.weekday,
85
+ windows: day.windows.map((window) => ({
86
+ start_minute: window.startMinute,
87
+ end_minute: window.endMinute,
88
+ })),
89
+ })),
90
+ exceptions: calendar.exceptions.map((item) => ({
91
+ date: item.date,
92
+ windows: item.windows.map((window) => ({
93
+ start_minute: window.startMinute,
94
+ end_minute: window.endMinute,
95
+ })),
96
+ })),
97
+ }));
98
+ }
99
+ function resources(model, declarations) {
100
+ const availability = new Map(model.base.base.resources.map((item) => [item.resourceId, item]));
101
+ return declarations.filter(({ kind }) => kind === "resource").map((resource) => {
102
+ const temporal = availability.get(resource.id);
103
+ return {
104
+ id: resource.id,
105
+ capacity: integerField(resource, "capacity", 1),
106
+ calendar_id: temporal?.calendarId ?? null,
107
+ available_from: temporal?.availableFrom === null || temporal?.availableFrom === undefined
108
+ ? null
109
+ : canonicalInstant(temporal.availableFrom),
110
+ available_until: temporal?.availableUntil === null || temporal?.availableUntil === undefined
111
+ ? null
112
+ : canonicalInstant(temporal.availableUntil),
113
+ overrides: (temporal?.overrides ?? []).map((override) => ({
114
+ start: canonicalInstant(override.start),
115
+ end: canonicalInstant(override.end),
116
+ capacity: override.capacity,
117
+ })),
118
+ };
119
+ });
120
+ }
121
+ function milestones(model, declarations) {
122
+ return declarations.filter(({ kind }) => kind === "milestone").map((milestone) => ({
123
+ id: milestone.id,
124
+ deadline: calendarValue(fieldNamed(milestone, "deadline")?.value ?? null),
125
+ temporal_constraints: temporalBounds(model.base.base.milestoneBounds, milestone.id),
126
+ }));
127
+ }
128
+ function tasks(model) {
129
+ const input = projectPlanAssuranceInput(model.baseDocument);
130
+ return input.tasks.map(({ contract }) => ({
131
+ id: contract.taskId,
132
+ from_milestone_id: contract.fromMilestoneId,
133
+ to_milestone_id: contract.toMilestoneId,
134
+ description: contract.description,
135
+ timing: timingRecord(contract.durationOrEstimate),
136
+ not_before: "notBefore" in contract
137
+ ? contract.notBefore === null ? null : calendarRecord(contract.notBefore)
138
+ : null,
139
+ deadline: contract.deadline === null ? null : calendarRecord(contract.deadline),
140
+ priority: contract.priority,
141
+ requirements: [...contract.requirements]
142
+ .sort((left, right) => compareStableStrings(left.resourceId, right.resourceId))
143
+ .map(({ resourceId, units }) => ({ resource_id: resourceId, units })),
144
+ owner: contract.owner,
145
+ tags: [...contract.tags].sort(compareStableStrings),
146
+ source: contract.source,
147
+ temporal_constraints: temporalBounds(model.base.base.taskBounds, contract.taskId),
148
+ }));
149
+ }
150
+ function gates(declarations) {
151
+ return declarations.filter(({ kind }) => kind === "gate").map((gate) => ({
152
+ id: gate.id,
153
+ from_milestone_id: gate.from,
154
+ to_milestone_id: gate.to,
155
+ reason: stringField(gate, "reason") ?? "",
156
+ }));
157
+ }
158
+ function assuranceRelations(model) {
159
+ const evaluation = evaluatePlanAssurance(projectPlanAssuranceInput(model.baseDocument));
160
+ if (!evaluation.ok)
161
+ throw new Error("validated plan lost effective assurance relations");
162
+ return evaluation.effectiveDependencies.map((relation) => ({
163
+ relation_id: relation.relationId,
164
+ predecessor_task_id: relation.predecessorTaskId,
165
+ successor_task_id: relation.successorTaskId,
166
+ mode: relation.mode,
167
+ explicit: relation.explicit,
168
+ }));
169
+ }
170
+ function planningTiming(duration, estimate) {
171
+ const exact = (value) => ({
172
+ numerator: value.value.numerator.toString(),
173
+ denominator: value.value.denominator.toString(),
174
+ unit: value.unit,
175
+ });
176
+ if (duration !== null)
177
+ return { kind: "duration", value: exact(duration) };
178
+ if (estimate === null)
179
+ return null;
180
+ return {
181
+ kind: "estimate",
182
+ optimistic: exact(estimate.optimistic),
183
+ most_likely: exact(estimate.mostLikely),
184
+ pessimistic: exact(estimate.pessimistic),
185
+ };
186
+ }
187
+ function planningActivity(activity) {
188
+ return {
189
+ id: activity.id,
190
+ from_id: activity.from.id,
191
+ to_id: activity.to.id,
192
+ title: activity.title,
193
+ description: activity.description?.value ?? null,
194
+ timing: planningTiming(activity.duration, activity.estimate),
195
+ priority: activity.priority,
196
+ requirements: [...activity.requirements]
197
+ .sort((left, right) => compareStableStrings(left.resourceId, right.resourceId))
198
+ .map(({ resourceId, units }) => ({ resource_id: resourceId, units })),
199
+ owner: activity.owner,
200
+ tags: [...activity.tags].sort(compareStableStrings),
201
+ source: activity.source,
202
+ calendar_id: activity.calendarId,
203
+ when: activity.when.map((item) => ({
204
+ event: item.event,
205
+ direction: item.direction,
206
+ value: canonicalInstant(item.value),
207
+ })),
208
+ deadline: activity.deadline === null ? null : canonicalPlanningCalendar(activity.deadline.sourceText),
209
+ };
210
+ }
211
+ function planningPool(model) {
212
+ if (model.works.length === 0 &&
213
+ model.events.length === 0 &&
214
+ model.activities.length === 0 &&
215
+ model.windows.length === 0)
216
+ return null;
217
+ return {
218
+ works: model.works.map((work) => ({
219
+ id: work.id,
220
+ title: work.title,
221
+ description: work.description?.value ?? null,
222
+ event_ids: work.events.map(({ id }) => id).sort(compareStableStrings),
223
+ activity_ids: work.activities.map(({ id }) => id).sort(compareStableStrings),
224
+ milestone_link_ids: work.milestoneLinks.map(({ id }) => id).sort(compareStableStrings),
225
+ task_link_ids: work.taskLinks.map(({ id }) => id).sort(compareStableStrings),
226
+ depends_on_ids: work.dependsOn.map(({ id }) => id).sort(compareStableStrings),
227
+ })),
228
+ events: model.events.map((event) => ({
229
+ id: event.id,
230
+ title: event.title,
231
+ description: event.description?.value ?? null,
232
+ tags: [...event.tags].sort(compareStableStrings),
233
+ source: event.source,
234
+ })),
235
+ activities: model.activities.map(planningActivity),
236
+ windows: model.windows.map((window) => ({
237
+ id: window.id,
238
+ title: window.title,
239
+ objective: window.objective,
240
+ start: calendarValue(window.start),
241
+ end: calendarValue(window.end),
242
+ work_ids: window.works.map(({ id }) => id).sort(compareStableStrings),
243
+ })),
244
+ work_order: model.workOrder.map(({ id }) => id),
245
+ };
246
+ }
247
+ export function projectPlanReviewBasis(model) {
248
+ const declarations = model.baseDocument.document.declarations;
249
+ const project = requiredDeclaration(declarations, "project");
250
+ const finish = stringField(project, "finish");
251
+ const durationUnit = stringField(project, "duration_unit");
252
+ if (finish === null || durationUnit === null) {
253
+ throw new Error("validated project lost its planning identity");
254
+ }
255
+ const velocitySource = fieldNamed(project, "velocity")?.rawValue;
256
+ const velocity = velocitySource === undefined
257
+ ? null
258
+ : canonicalizeExactVelocitySourceToken(velocitySource);
259
+ if (velocitySource !== undefined && velocity === null) {
260
+ throw new Error("validated velocity lost canonical form");
261
+ }
262
+ return Object.freeze({
263
+ model_version: PLAN_REVIEW_BASIS_MODEL_VERSION,
264
+ project: Object.freeze({
265
+ id: project.id,
266
+ finish_milestone_id: finish,
267
+ duration_unit: durationUnit,
268
+ velocity,
269
+ target_duration: exactScalar(fieldNamed(project, "target_duration")?.rawValue, null),
270
+ critical_epsilon: exactScalar(fieldNamed(project, "critical_epsilon")?.rawValue, `0${durationUnit === "day" ? "d" : durationUnit === "hour" ? "h" : "p"}`),
271
+ }),
272
+ calendars: Object.freeze(calendars(model.base)),
273
+ resources: Object.freeze(resources(model, declarations)),
274
+ milestones: Object.freeze(milestones(model, declarations)),
275
+ tasks: Object.freeze(tasks(model)),
276
+ gates: Object.freeze(gates(declarations)),
277
+ assurance_relations: Object.freeze(assuranceRelations(model)),
278
+ planning_pool: planningPool(model.base),
279
+ });
280
+ }
281
+ export function canonicalPlanReviewBasisJson(value) {
282
+ return rfc8785Json(value);
283
+ }
284
+ export function digestPlanReviewBasis(value) {
285
+ return sha256DigestUtf8(canonicalPlanReviewBasisJson(value));
286
+ }
287
+ //# sourceMappingURL=basis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basis.js","sourceRoot":"","sources":["../../src/plan-review/basis.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EACL,oCAAoC,GAErC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oCAAoC,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,oCAAoC,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,UAAU,GAGX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAOnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAOzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAU,CAAC;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAAsC,CAAC;AAqB3E,SAAS,mBAAmB,CAC1B,YAA+D,EAC/D,IAA2B;IAE3B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC5E,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAClB,WAAmD,EACnD,IAAY;IAEZ,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAC,IAAI,IAAI,IAAI,kBAAkB,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CACnB,WAAmD,EACnD,IAAY,EACZ,QAAgB;IAEhB,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,aAAa,WAAW,CAAC,IAAI,IAAI,IAAI,oBAAoB,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,SAA6B,EAAE,QAAuB;IACzE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC7C,MAAM,KAAK,GAAG,oCAAoC,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,KAAK,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpF,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,SAAS,aAAa,CAAC,KAAmC;IACxD,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC;IACnD,MAAM,SAAS,GAAG,oCAAoC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACzE,IAAI,SAAS,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACnF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CACrB,MAAmC,EACnC,QAAgB;IAEhB,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1E,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;KACrC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,OAAsC;IAC7D,OAAO,OAAO,CAAC,IAAI,KAAK,yBAAyB;QAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,yBAAyB,EAAE;QACrC,CAAC,CAAC;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,WAAW,EAAE,OAAO,CAAC,UAAU;YAC/B,aAAa,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI;gBAC1C,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC;oBACE,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE;oBACpD,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE;iBACzD;SACN,CAAC;AACR,CAAC;AAED,SAAS,SAAS,CAAC,KAA8B;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7C,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpC,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,UAAU,EAAE,MAAM,CAAC,SAAS;aAC7B,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACrC,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,UAAU,EAAE,MAAM,CAAC,SAAS;aAC7B,CAAC,CAAC;SACJ,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,SAAS,CAChB,KAA4B,EAC5B,YAA+D;IAE/D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7E,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/C,WAAW,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI;YACzC,cAAc,EAAE,QAAQ,EAAE,aAAa,KAAK,IAAI,IAAI,QAAQ,EAAE,aAAa,KAAK,SAAS;gBACvF,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC5C,eAAe,EAAE,QAAQ,EAAE,cAAc,KAAK,IAAI,IAAI,QAAQ,EAAE,cAAc,KAAK,SAAS;gBAC1F,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC;YAC7C,SAAS,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACxD,KAAK,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACvC,GAAG,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CACjB,KAA4B,EAC5B,YAA+D;IAE/D,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACjF,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,QAAQ,EAAE,aAAa,CAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,KAA2C,IAAI,IAAI,CAAC;QAChH,oBAAoB,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC;KACpF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,KAAK,CAAC,KAA4B;IACzC,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACxC,EAAE,EAAE,QAAQ,CAAC,MAAM;QACnB,iBAAiB,EAAE,QAAQ,CAAC,eAAe;QAC3C,eAAe,EAAE,QAAQ,CAAC,aAAa;QACvC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjD,UAAU,EAAE,WAAW,IAAI,QAAQ;YACjC,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;YACzE,CAAC,CAAC,IAAI;QACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/E,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC;aACrC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aAC9E,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,oBAAoB,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC;KAClF,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,KAAK,CACZ,YAA+D;IAE/D,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvE,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,iBAAiB,EAAE,IAAI,CAAC,IAAK;QAC7B,eAAe,EAAE,IAAI,CAAC,EAAG;QACzB,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;KAC1C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA4B;IACtD,MAAM,UAAU,GAAG,qBAAqB,CAAC,yBAAyB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzF,OAAO,UAAU,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzD,WAAW,EAAE,QAAQ,CAAC,UAAU;QAChC,mBAAmB,EAAE,QAAQ,CAAC,iBAAiB;QAC/C,iBAAiB,EAAE,QAAQ,CAAC,eAAe;QAC3C,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CACrB,QAAuC,EACvC,QAAuC;IAEvC,MAAM,KAAK,GAAG,CAAC,KAA6B,EAAE,EAAE,CAAC,CAAC;QAChD,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE;QAC3C,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;QAC/C,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3E,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QACtC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgC;IACxD,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE;QACrB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI;QAChD,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;QAC5D,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC;aACrC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aAC9E,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;QACnD,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,WAAW,EAAE,QAAQ,CAAC,UAAU;QAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC;QACH,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;KACtG,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAA8B;IAClD,IACE,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACzB,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI;YAC5C,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACrE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAC5E,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACtF,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAC5E,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;SAC9E,CAAC,CAAC;QACH,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnC,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI;YAC7C,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAClD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACtC,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;YAClC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;SACtE,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;IAC9D,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC3D,IAAI,MAAM,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC;IACjE,MAAM,QAAQ,GAAG,cAAc,KAAK,SAAS;QAC3C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,oCAAoC,CAAC,cAAc,CAAC,CAAC;IACzD,IAAI,cAAc,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa,EAAE,+BAA+B;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;YACrB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,mBAAmB,EAAE,MAAM;YAC3B,aAAa,EAAE,YAAY;YAC3B,QAAQ;YACR,eAAe,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC;YACpF,gBAAgB,EAAE,WAAW,CAC3B,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,QAAQ,EACjD,IAAI,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CACxE;SACH,CAAC;QACF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACxD,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAC1D,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7D,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;KACxC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAwB;IACnE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,OAAO,gBAAgB,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PlanReviewFormatResult, PlanReviewSourceCapability } from "./source-types.js";
2
+ export declare function formatPlanReviewSource(text: string, capability: PlanReviewSourceCapability, options?: Readonly<{
3
+ maxDiagnostics?: number;
4
+ }>): PlanReviewFormatResult;
5
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/plan-review/format.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,sBAAsB,EACtB,0BAA0B,EAC3B,MAAM,mBAAmB,CAAC;AAgD3B,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,0BAA0B,EACtC,OAAO,GAAE,QAAQ,CAAC;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM,GAClD,sBAAsB,CAWxB"}