memorydetective 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/README.md +39 -9
- package/USAGE.md +73 -3
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.js +58 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/prompts.d.ts +26 -0
- package/dist/runtime/prompts.js +143 -0
- package/dist/runtime/prompts.js.map +1 -0
- package/dist/runtime/resources.d.ts +26 -0
- package/dist/runtime/resources.js +71 -0
- package/dist/runtime/resources.js.map +1 -0
- package/dist/runtime/staticAnalysisHints.d.ts +29 -0
- package/dist/runtime/staticAnalysisHints.js +209 -0
- package/dist/runtime/staticAnalysisHints.js.map +1 -0
- package/dist/tools/classifyCycle.d.ts +7 -0
- package/dist/tools/classifyCycle.js +112 -0
- package/dist/tools/classifyCycle.js.map +1 -1
- package/dist/tools/getInvestigationPlaybook.d.ts +4 -1
- package/dist/tools/getInvestigationPlaybook.js +3 -1
- package/dist/tools/getInvestigationPlaybook.js.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/runtime/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources surface — exposes the cycle-pattern catalog as browsable
|
|
3
|
+
* read-only resources. Clients can list / read patterns without burning a
|
|
4
|
+
* tool call (cheaper than `classifyCycle`'s incidental output).
|
|
5
|
+
*
|
|
6
|
+
* URI shape: `memorydetective://patterns/{patternId}`
|
|
7
|
+
*
|
|
8
|
+
* Each resource body is markdown — clients render it directly in the UI.
|
|
9
|
+
*/
|
|
10
|
+
export interface PatternResource {
|
|
11
|
+
uri: string;
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
mimeType: "text/markdown";
|
|
15
|
+
}
|
|
16
|
+
export interface PatternResourceBody {
|
|
17
|
+
uri: string;
|
|
18
|
+
mimeType: "text/markdown";
|
|
19
|
+
text: string;
|
|
20
|
+
}
|
|
21
|
+
/** Build the resource list shown to clients via `resources/list`. */
|
|
22
|
+
export declare function listPatternResources(): PatternResource[];
|
|
23
|
+
/** Resolve a pattern URI to a markdown body, or return null if unknown. */
|
|
24
|
+
export declare function readPatternResource(uri: string): PatternResourceBody | null;
|
|
25
|
+
export declare function patternUri(patternId: string): string;
|
|
26
|
+
export declare function patternIdFromUri(uri: string): string | null;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resources surface — exposes the cycle-pattern catalog as browsable
|
|
3
|
+
* read-only resources. Clients can list / read patterns without burning a
|
|
4
|
+
* tool call (cheaper than `classifyCycle`'s incidental output).
|
|
5
|
+
*
|
|
6
|
+
* URI shape: `memorydetective://patterns/{patternId}`
|
|
7
|
+
*
|
|
8
|
+
* Each resource body is markdown — clients render it directly in the UI.
|
|
9
|
+
*/
|
|
10
|
+
import { PATTERNS } from "../tools/classifyCycle.js";
|
|
11
|
+
const URI_SCHEME = "memorydetective";
|
|
12
|
+
const PATTERNS_HOST = "patterns";
|
|
13
|
+
/** Build the resource list shown to clients via `resources/list`. */
|
|
14
|
+
export function listPatternResources() {
|
|
15
|
+
return PATTERNS.map((p) => ({
|
|
16
|
+
uri: patternUri(p.id),
|
|
17
|
+
name: p.name,
|
|
18
|
+
description: oneLineDescription(p),
|
|
19
|
+
mimeType: "text/markdown",
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
/** Resolve a pattern URI to a markdown body, or return null if unknown. */
|
|
23
|
+
export function readPatternResource(uri) {
|
|
24
|
+
const id = patternIdFromUri(uri);
|
|
25
|
+
if (!id)
|
|
26
|
+
return null;
|
|
27
|
+
const pattern = PATTERNS.find((p) => p.id === id);
|
|
28
|
+
if (!pattern)
|
|
29
|
+
return null;
|
|
30
|
+
return {
|
|
31
|
+
uri,
|
|
32
|
+
mimeType: "text/markdown",
|
|
33
|
+
text: renderPatternMarkdown(pattern),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function patternUri(patternId) {
|
|
37
|
+
return `${URI_SCHEME}://${PATTERNS_HOST}/${patternId}`;
|
|
38
|
+
}
|
|
39
|
+
export function patternIdFromUri(uri) {
|
|
40
|
+
const prefix = `${URI_SCHEME}://${PATTERNS_HOST}/`;
|
|
41
|
+
if (!uri.startsWith(prefix))
|
|
42
|
+
return null;
|
|
43
|
+
const id = uri.slice(prefix.length);
|
|
44
|
+
return id.length > 0 ? id : null;
|
|
45
|
+
}
|
|
46
|
+
/** Single-line summary used as the resource list description. */
|
|
47
|
+
function oneLineDescription(p) {
|
|
48
|
+
// The full fixHint can be long; the list view should be scannable.
|
|
49
|
+
return p.name;
|
|
50
|
+
}
|
|
51
|
+
/** Markdown body for `resources/read` responses. */
|
|
52
|
+
function renderPatternMarkdown(p) {
|
|
53
|
+
return [
|
|
54
|
+
`# ${p.name}`,
|
|
55
|
+
"",
|
|
56
|
+
`**Pattern ID:** \`${p.id}\``,
|
|
57
|
+
"",
|
|
58
|
+
"## Fix hint",
|
|
59
|
+
"",
|
|
60
|
+
p.fixHint,
|
|
61
|
+
"",
|
|
62
|
+
"---",
|
|
63
|
+
"",
|
|
64
|
+
"*This is a built-in pattern from the `memorydetective` cycle classifier. " +
|
|
65
|
+
"When a `.memgraph` cycle matches this pattern, `classifyCycle` returns this fix hint " +
|
|
66
|
+
"in its `primaryMatch.fixHint` field, and `verifyFix` can gate a cycle-semantic diff " +
|
|
67
|
+
`against \`expectedPatternId: "${p.id}"\`.*`,
|
|
68
|
+
"",
|
|
69
|
+
].join("\n");
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/runtime/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,aAAa,GAAG,UAAU,CAAC;AAejC,qEAAqE;AACrE,MAAM,UAAU,oBAAoB;IAClC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAClC,QAAQ,EAAE,eAAwB;KACnC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO;QACL,GAAG;QACH,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,qBAAqB,CAAC,OAAO,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,GAAG,UAAU,MAAM,aAAa,IAAI,SAAS,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAG,GAAG,UAAU,MAAM,aAAa,GAAG,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,iEAAiE;AACjE,SAAS,kBAAkB,CAAC,CAA+B;IACzD,mEAAmE;IACnE,OAAO,CAAC,CAAC,IAAI,CAAC;AAChB,CAAC;AAED,oDAAoD;AACpD,SAAS,qBAAqB,CAAC,CAI9B;IACC,OAAO;QACL,KAAK,CAAC,CAAC,IAAI,EAAE;QACb,EAAE;QACF,qBAAqB,CAAC,CAAC,EAAE,IAAI;QAC7B,EAAE;QACF,aAAa;QACb,EAAE;QACF,CAAC,CAAC,OAAO;QACT,EAAE;QACF,KAAK;QACL,EAAE;QACF,2EAA2E;YACzE,uFAAuF;YACvF,sFAAsF;YACtF,iCAAiC,CAAC,CAAC,EAAE,OAAO;QAC9C,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static-analysis bridge: maps each cycle pattern in the catalog to the
|
|
3
|
+
* SwiftLint rule (or other static analyzer) that *would* have caught it
|
|
4
|
+
* at parse time, OR explicitly notes when no static rule exists yet.
|
|
5
|
+
*
|
|
6
|
+
* Reinforces the differentiator: memorydetective sees the *runtime evidence*
|
|
7
|
+
* (the actual cycle in a memgraph) where compilers and linters miss it
|
|
8
|
+
* because the cycle's existence requires runtime conditions (closure
|
|
9
|
+
* actually outlives owner, AsyncSequence actually never terminates, etc.).
|
|
10
|
+
*
|
|
11
|
+
* Sources:
|
|
12
|
+
* - SwiftLint rules: https://realm.github.io/SwiftLint/rule-directory.html
|
|
13
|
+
* - SwiftLint open-but-unshipped @escaping rule (8 years old):
|
|
14
|
+
* https://github.com/realm/SwiftLint/issues/776
|
|
15
|
+
* - Swift compiler nested-closure [weak self] warning (partial fix):
|
|
16
|
+
* https://github.com/swiftlang/swift/issues/72391 — PR #77063
|
|
17
|
+
*/
|
|
18
|
+
export interface StaticAnalysisHint {
|
|
19
|
+
/** SwiftLint rule identifier, or null when no rule exists. */
|
|
20
|
+
rule: string | null;
|
|
21
|
+
/** URL to the rule docs OR the open issue tracking the gap. */
|
|
22
|
+
url: string | null;
|
|
23
|
+
/** Plain-English explanation of the relationship. */
|
|
24
|
+
explanation: string;
|
|
25
|
+
}
|
|
26
|
+
/** Returns the static-analysis hint for a given pattern, or null if unknown. */
|
|
27
|
+
export declare function getStaticAnalysisHint(patternId: string): StaticAnalysisHint | null;
|
|
28
|
+
/** All known pattern ids that have hints. Used in tests for coverage assertion. */
|
|
29
|
+
export declare function knownHintPatternIds(): string[];
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static-analysis bridge: maps each cycle pattern in the catalog to the
|
|
3
|
+
* SwiftLint rule (or other static analyzer) that *would* have caught it
|
|
4
|
+
* at parse time, OR explicitly notes when no static rule exists yet.
|
|
5
|
+
*
|
|
6
|
+
* Reinforces the differentiator: memorydetective sees the *runtime evidence*
|
|
7
|
+
* (the actual cycle in a memgraph) where compilers and linters miss it
|
|
8
|
+
* because the cycle's existence requires runtime conditions (closure
|
|
9
|
+
* actually outlives owner, AsyncSequence actually never terminates, etc.).
|
|
10
|
+
*
|
|
11
|
+
* Sources:
|
|
12
|
+
* - SwiftLint rules: https://realm.github.io/SwiftLint/rule-directory.html
|
|
13
|
+
* - SwiftLint open-but-unshipped @escaping rule (8 years old):
|
|
14
|
+
* https://github.com/realm/SwiftLint/issues/776
|
|
15
|
+
* - Swift compiler nested-closure [weak self] warning (partial fix):
|
|
16
|
+
* https://github.com/swiftlang/swift/issues/72391 — PR #77063
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Pattern-id → static-analysis hint. Every pattern in `classifyCycle.PATTERNS`
|
|
20
|
+
* gets an entry — either a real rule or an explicit `null` rule with reasoning.
|
|
21
|
+
*/
|
|
22
|
+
const HINTS = {
|
|
23
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
24
|
+
// v1.0 core
|
|
25
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
26
|
+
"swiftui.tag-index-projection": {
|
|
27
|
+
rule: null,
|
|
28
|
+
url: null,
|
|
29
|
+
explanation: "No static rule exists. The cycle is in SwiftUI's internal observation graph (TagIndexProjection), not in the user's closure. Static analyzers don't model SwiftUI internals.",
|
|
30
|
+
},
|
|
31
|
+
"swiftui.dictstorage-weakbox-cycle": {
|
|
32
|
+
rule: null,
|
|
33
|
+
url: null,
|
|
34
|
+
explanation: "No static rule exists. SwiftUI's `_DictionaryStorage<...WeakBox<AnyLocationBase>>` is a private observation type; user code never references it directly.",
|
|
35
|
+
},
|
|
36
|
+
"swiftui.foreach-state-tap": {
|
|
37
|
+
rule: null,
|
|
38
|
+
url: null,
|
|
39
|
+
explanation: "No static rule exists. The leak appears when a tap-gesture closure captures self and ForEachState outlives the closure — neither side is detectable in isolation.",
|
|
40
|
+
},
|
|
41
|
+
"closure.viewmodel-wrapped-strong": {
|
|
42
|
+
rule: null,
|
|
43
|
+
url: "https://github.com/realm/SwiftLint/issues/776",
|
|
44
|
+
explanation: "SwiftLint has an open-but-unshipped rule for `@escaping` closure capture cycles (issue #776, open since 2017). Until that ships, this can only be caught at runtime via the memgraph.",
|
|
45
|
+
},
|
|
46
|
+
"viewcontroller.uinavigationcontroller-host": {
|
|
47
|
+
rule: null,
|
|
48
|
+
url: null,
|
|
49
|
+
explanation: "No static rule exists. The cycle requires `UIViewControllerRepresentable` plus a hosting controller plus a `dismantleUIViewController` that doesn't clear the view-controller stack — too contextual for static analysis.",
|
|
50
|
+
},
|
|
51
|
+
"combine.sink-store-self-capture": {
|
|
52
|
+
rule: "weak_self",
|
|
53
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
54
|
+
explanation: "SwiftLint's `weak_self` rule warns on closure bodies that reference `self` without `[weak self]`. Catches the most obvious cases. Doesn't catch nested closures where only the inner one has `[weak self]` (Swift compiler issue #72391, partially fixed in PR #77063).",
|
|
55
|
+
},
|
|
56
|
+
"concurrency.task-without-weak-self": {
|
|
57
|
+
rule: "weak_self",
|
|
58
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
59
|
+
explanation: "SwiftLint `weak_self` flags `Task { self.foo() }` without `[weak self]`. The runtime evidence is still useful when the warning is suppressed or the closure is nested.",
|
|
60
|
+
},
|
|
61
|
+
"notificationcenter.observer-strong": {
|
|
62
|
+
rule: "weak_self",
|
|
63
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
64
|
+
explanation: "Same as `combine.sink-store-self-capture` — `weak_self` catches the closure form. Doesn't help when the observer is stored as `NSObjectProtocol` and never explicitly removed in `deinit`.",
|
|
65
|
+
},
|
|
66
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
67
|
+
// v1.4 expansion
|
|
68
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
69
|
+
"timer.scheduled-target-strong": {
|
|
70
|
+
rule: null,
|
|
71
|
+
url: null,
|
|
72
|
+
explanation: "No static rule. The leak is in the *target/selector* form of `Timer.scheduledTimer` — selector-based APIs aren't analyzable for retain semantics by SwiftLint.",
|
|
73
|
+
},
|
|
74
|
+
"displaylink.target-strong": {
|
|
75
|
+
rule: null,
|
|
76
|
+
url: null,
|
|
77
|
+
explanation: "Same as `timer.scheduled-target-strong` — selector-based target retention is opaque to static analysis.",
|
|
78
|
+
},
|
|
79
|
+
"gesture.target-strong": {
|
|
80
|
+
rule: null,
|
|
81
|
+
url: null,
|
|
82
|
+
explanation: "No static rule for `addTarget(_:action:)` retention. The closure-style `UIAction` API (iOS 14+) avoids this; promoting it would prevent the leak by construction.",
|
|
83
|
+
},
|
|
84
|
+
"kvo.observation-not-invalidated": {
|
|
85
|
+
rule: "weak_self",
|
|
86
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
87
|
+
explanation: "`weak_self` partially helps (the change-handler closure should `[weak self]`). Doesn't catch the `token.invalidate()` omission — that requires lifecycle analysis.",
|
|
88
|
+
},
|
|
89
|
+
"urlsession.delegate-strong": {
|
|
90
|
+
rule: null,
|
|
91
|
+
url: null,
|
|
92
|
+
explanation: "No static rule. `URLSession.init(configuration:delegate:delegateQueue:)`'s strong-delegate semantics is documented Apple behavior, not a closure-capture issue.",
|
|
93
|
+
},
|
|
94
|
+
"dispatch.source-event-handler-self": {
|
|
95
|
+
rule: "weak_self",
|
|
96
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
97
|
+
explanation: "`weak_self` catches `setEventHandler { self.foo() }`. Doesn't catch the missing `setEventHandler {}` clear-out in `deinit`.",
|
|
98
|
+
},
|
|
99
|
+
"notificationcenter.observer-not-removed": {
|
|
100
|
+
rule: null,
|
|
101
|
+
url: null,
|
|
102
|
+
explanation: "No static rule. The leak is the *omission* of `removeObserver(_:)` in `deinit` — static analyzers don't reason about lifecycle balance.",
|
|
103
|
+
},
|
|
104
|
+
"delegate.strong-reference": {
|
|
105
|
+
rule: "weak_delegate",
|
|
106
|
+
url: "https://realm.github.io/SwiftLint/weak_delegate.html",
|
|
107
|
+
explanation: "SwiftLint's `weak_delegate` rule warns on `var delegate: SomeProtocol?` without `weak`. Catches the canonical case directly.",
|
|
108
|
+
},
|
|
109
|
+
"swiftui.envobject-back-reference": {
|
|
110
|
+
rule: null,
|
|
111
|
+
url: null,
|
|
112
|
+
explanation: "No static rule. `@EnvironmentObject` strong back-references to UIKit interop classes require dependency-graph analysis SwiftLint doesn't perform.",
|
|
113
|
+
},
|
|
114
|
+
"combine.assign-to-self": {
|
|
115
|
+
rule: null,
|
|
116
|
+
url: null,
|
|
117
|
+
explanation: "No static rule. `.assign(to: \\.x, on: self)` is syntactically valid; the retention is in the Combine internals.",
|
|
118
|
+
},
|
|
119
|
+
"concurrency.task-mainactor-view": {
|
|
120
|
+
rule: "weak_self",
|
|
121
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
122
|
+
explanation: "`weak_self` catches the closure body. Doesn't catch the SwiftUI-view-storage lifetime issue — `.task { ... }` modifier vs `Task { ... }` block can't be told apart by syntax alone.",
|
|
123
|
+
},
|
|
124
|
+
"concurrency.asyncstream-continuation-self": {
|
|
125
|
+
rule: null,
|
|
126
|
+
url: null,
|
|
127
|
+
explanation: "No static rule. `AsyncStream` continuation retention is a runtime property — the consuming Task either terminates or it doesn't.",
|
|
128
|
+
},
|
|
129
|
+
"webkit.scriptmessage-handler-strong": {
|
|
130
|
+
rule: null,
|
|
131
|
+
url: null,
|
|
132
|
+
explanation: "No static rule. `WKUserContentController.add(_:name:)` has documented strong-retain semantics; the cycle requires the handler to also own the WebView.",
|
|
133
|
+
},
|
|
134
|
+
"coordinator.parent-strong-back-reference": {
|
|
135
|
+
rule: null,
|
|
136
|
+
url: null,
|
|
137
|
+
explanation: "No static rule. The Coordinator pattern's `parentCoordinator` property usually isn't named `delegate`, so `weak_delegate` doesn't fire. A custom rule could match `parent*Coordinator` properties — would be a useful SwiftLint contribution.",
|
|
138
|
+
},
|
|
139
|
+
"rxswift.disposebag-self-cycle": {
|
|
140
|
+
rule: "weak_self",
|
|
141
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
142
|
+
explanation: "`weak_self` partially helps for explicit closures. Doesn't catch the unbound-method-reference form: `subscribe(onNext: self.handle)` — Swift auto-captures the instance strongly with no syntax cue.",
|
|
143
|
+
},
|
|
144
|
+
"realm.notificationtoken-retained": {
|
|
145
|
+
rule: "weak_self",
|
|
146
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
147
|
+
explanation: "`weak_self` catches the observe closure. Doesn't catch the `token?.invalidate()` omission in `deinit`.",
|
|
148
|
+
},
|
|
149
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
150
|
+
// v1.5 catalog completion
|
|
151
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
152
|
+
"coreanimation.animation-delegate-strong": {
|
|
153
|
+
rule: null,
|
|
154
|
+
url: null,
|
|
155
|
+
explanation: "No static rule. `CAAnimation.delegate`'s strong-retain is Apple-documented behavior, not detectable from source. A targeted SwiftLint custom rule could flag `anim.delegate = self` patterns near `layer.add(anim, ...)` — has not been written.",
|
|
156
|
+
},
|
|
157
|
+
"coreanimation.layer-delegate-cycle": {
|
|
158
|
+
rule: null,
|
|
159
|
+
url: null,
|
|
160
|
+
explanation: "No static rule. The leak depends on whether the layer's delegate is a UIView (auto-paired, safe) or another type (leaks). Runtime-only.",
|
|
161
|
+
},
|
|
162
|
+
"coredata.fetchedresultscontroller-delegate": {
|
|
163
|
+
rule: null,
|
|
164
|
+
url: null,
|
|
165
|
+
explanation: "No static rule. `NSFetchedResultsController.delegate` is declared `weak` in modern bridging headers, so `weak_delegate` doesn't fire — but the change-tracker still retains via the ObjC contract. Runtime-only.",
|
|
166
|
+
},
|
|
167
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
168
|
+
// v1.6 catalog expansion
|
|
169
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
170
|
+
"swiftui.observable-state-modal-leak": {
|
|
171
|
+
rule: null,
|
|
172
|
+
url: null,
|
|
173
|
+
explanation: "No static rule. The leak depends on `@Observable` + modal presentation lifecycle interaction — too contextual for SwiftLint.",
|
|
174
|
+
},
|
|
175
|
+
"swiftui.navigationpath-stored-in-viewmodel": {
|
|
176
|
+
rule: null,
|
|
177
|
+
url: null,
|
|
178
|
+
explanation: "No static rule. `NavigationPath` is a value type held on a class — perfectly normal syntactically. The leak is in the lifecycle of pushed elements, observable only at runtime.",
|
|
179
|
+
},
|
|
180
|
+
"concurrency.async-sequence-on-self": {
|
|
181
|
+
rule: null,
|
|
182
|
+
url: "https://forums.swift.org/t/memory-leak-issue-while-asynchronously-iterating-over-async-sequence/64584",
|
|
183
|
+
explanation: "No static rule, and `[weak self]` does NOT help here — the iteration itself holds self. Documented on Swift Forums (#64584). A future swift-format/SwiftLint rule could warn on `for await ... in <storedSeq> { /* uses self */ }` patterns.",
|
|
184
|
+
},
|
|
185
|
+
"concurrency.notificationcenter-async-observer-task": {
|
|
186
|
+
rule: null,
|
|
187
|
+
url: "https://forums.swift.org/t/asyncsequence-version-of-notifications-is-causing-memory-leaks/77257",
|
|
188
|
+
explanation: "Same as `concurrency.async-sequence-on-self` — `[weak self]` is insufficient because the iteration holds the actor isolation context. Specifically called out on Swift Forums (#77257).",
|
|
189
|
+
},
|
|
190
|
+
"swiftui.observations-closure-strong-self": {
|
|
191
|
+
rule: "weak_self",
|
|
192
|
+
url: "https://realm.github.io/SwiftLint/weak_self.html",
|
|
193
|
+
explanation: "`weak_self` catches the closure body — same shape as `Combine.sink`. The `Observations { }` API is brand-new (Swift 6.2 / Xcode 26), so most projects haven't enabled the rule for it yet.",
|
|
194
|
+
},
|
|
195
|
+
"webkit.wkscriptmessagehandler-bridge": {
|
|
196
|
+
rule: null,
|
|
197
|
+
url: null,
|
|
198
|
+
explanation: "No static rule. The 3-link cycle requires a class to both own a `WKWebView` AND conform to `WKScriptMessageHandler` — detectable at runtime via the memgraph but not via SwiftLint conformance analysis.",
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
/** Returns the static-analysis hint for a given pattern, or null if unknown. */
|
|
202
|
+
export function getStaticAnalysisHint(patternId) {
|
|
203
|
+
return HINTS[patternId] ?? null;
|
|
204
|
+
}
|
|
205
|
+
/** All known pattern ids that have hints. Used in tests for coverage assertion. */
|
|
206
|
+
export function knownHintPatternIds() {
|
|
207
|
+
return Object.keys(HINTS);
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=staticAnalysisHints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staticAnalysisHints.js","sourceRoot":"","sources":["../../src/runtime/staticAnalysisHints.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { type StaticAnalysisHint } from "../runtime/staticAnalysisHints.js";
|
|
2
3
|
import type { CycleNode, LeaksReport, NextCallSuggestion } from "../types.js";
|
|
3
4
|
export declare const classifyCycleSchema: z.ZodObject<{
|
|
4
5
|
path: z.ZodString;
|
|
@@ -22,6 +23,12 @@ export interface PatternMatch {
|
|
|
22
23
|
reason: string;
|
|
23
24
|
/** Suggested fix direction (one-liner). */
|
|
24
25
|
fixHint: string;
|
|
26
|
+
/**
|
|
27
|
+
* Optional bridge to static analysis: which SwiftLint rule (if any) would
|
|
28
|
+
* have caught this cycle at parse time, or an explicit gap notice when no
|
|
29
|
+
* rule exists. Populated for every catalog pattern.
|
|
30
|
+
*/
|
|
31
|
+
staticAnalysisHint?: StaticAnalysisHint;
|
|
25
32
|
}
|
|
26
33
|
export interface CycleClassification {
|
|
27
34
|
rootClass: string;
|
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { runLeaksAndParse } from "../runtime/leaks.js";
|
|
3
3
|
import { rootCyclesOnly, walkCycles } from "../parsers/leaksOutput.js";
|
|
4
4
|
import { pickPrimaryAppClass, suggestionsForClassification, } from "../runtime/suggestions.js";
|
|
5
|
+
import { getStaticAnalysisHint, } from "../runtime/staticAnalysisHints.js";
|
|
5
6
|
export const classifyCycleSchema = z.object({
|
|
6
7
|
path: z.string().min(1).describe("Absolute path to a `.memgraph` file."),
|
|
7
8
|
maxResults: z
|
|
@@ -365,6 +366,115 @@ export const PATTERNS = [
|
|
|
365
366
|
return hasFrc ? "high" : null;
|
|
366
367
|
},
|
|
367
368
|
},
|
|
369
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
370
|
+
// v1.6 catalog expansion — 6 patterns for the Swift 6 / Observation /
|
|
371
|
+
// SwiftData / NavigationStack era. Sourced from Apple Developer Forums
|
|
372
|
+
// (#736110, #716804, #748042, #22795), Swift Forums (#64584, #77257),
|
|
373
|
+
// Donny Wals on the Observations API, and the Embrace WKWebView writeup.
|
|
374
|
+
// ────────────────────────────────────────────────────────────────────────
|
|
375
|
+
{
|
|
376
|
+
id: "swiftui.observable-state-modal-leak",
|
|
377
|
+
name: "@Observable class held as @State across modal presentation",
|
|
378
|
+
fixHint: "Passing a reference type marked `@Observable` as `@State` to a modally-presented view can leak the model: SwiftUI's internal sheet-presentation infrastructure (around `_OptionalContent` / `_SheetPresentationModifier`) retains the value across dismiss cycles. Apple confirmed fixed in iOS 17.x, but reproduces in user code on older targets. Move the observable to `@StateObject`/`@State` on the *parent* and pass it down via `@Bindable`, or use the new `.sheet(item:)` form with a local-scope value type. Do not store the same `@Observable` model as `@State` inside the modal content view itself.",
|
|
379
|
+
match: (_root, allClasses) => {
|
|
380
|
+
const classes = Array.from(allClasses);
|
|
381
|
+
const hasObservable = classes.some((c) => c.includes("_$ObservationRegistrar") ||
|
|
382
|
+
c.includes("ObservationRegistrar") ||
|
|
383
|
+
c.includes("_ObservableType"));
|
|
384
|
+
const hasModal = classes.some((c) => c.includes("_OptionalContent") ||
|
|
385
|
+
c.includes("SheetPresentation") ||
|
|
386
|
+
c.includes("PresentedViewController") ||
|
|
387
|
+
c.includes("PresentationHostingController"));
|
|
388
|
+
if (hasObservable && hasModal)
|
|
389
|
+
return "high";
|
|
390
|
+
if (hasObservable)
|
|
391
|
+
return "low";
|
|
392
|
+
return null;
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
id: "swiftui.navigationpath-stored-in-viewmodel",
|
|
397
|
+
name: "NavigationPath retains every element ever pushed into it",
|
|
398
|
+
fixHint: "`NavigationPath` is a value type, but storing it on a class (typically a view-model exposed to the view) creates an append-only retention chain: every destination value pushed into the path is held until the entire path is replaced. Apple feedback `FB11643551` is still unfixed as of iOS 17. Either keep the path local to the view via `@State var path = NavigationPath()`, or, when you must persist it across view-model lifecycles, periodically reset it with `path = NavigationPath()` after `popToRoot()`-style navigations. Avoid storing destination view-model references *as* NavigationPath elements — store identifiers and resolve to view-models lazily.",
|
|
399
|
+
match: (_root, allClasses) => {
|
|
400
|
+
const classes = Array.from(allClasses);
|
|
401
|
+
const hasPath = classes.some((c) => c.includes("NavigationPath") ||
|
|
402
|
+
c.includes("AnyHashableStorageBase") ||
|
|
403
|
+
c.includes("NavigationStackStore"));
|
|
404
|
+
return hasPath ? "high" : null;
|
|
405
|
+
},
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
id: "concurrency.async-sequence-on-self",
|
|
409
|
+
name: "`for await` over an infinite AsyncSequence pins self via the consuming Task",
|
|
410
|
+
fixHint: "`for await value in someSequence { use(self) }` inside a `Task { }` stored on `self` creates a cycle that no `[weak self]` capture list can break: the iteration *itself* holds `self` strongly via the closure context the compiler synthesizes. If the sequence never terminates (infinite stream, NotificationCenter feed, AsyncChannel), the task never completes and `deinit` never fires. Fix by capturing only the values you need *outside* the loop body: `let tracker = self.tracker; Task { for await v in seq { await tracker.handle(v) } }`. For infinite sequences, store the Task as `private var observation: Task<Void, Never>?` and call `observation?.cancel()` in `deinit`.",
|
|
411
|
+
match: (_root, allClasses) => {
|
|
412
|
+
const classes = Array.from(allClasses);
|
|
413
|
+
const hasAsyncSeq = classes.some((c) => c.includes("AsyncSequence") ||
|
|
414
|
+
c.includes("AsyncMapSequence") ||
|
|
415
|
+
c.includes("AsyncFilterSequence") ||
|
|
416
|
+
c.includes("AsyncCompactMapSequence") ||
|
|
417
|
+
c.includes("AsyncIteratorProtocol"));
|
|
418
|
+
const hasTask = classes.some((c) => c.includes("_Concurrency.Task") || /\bTask<[^>]+>/.test(c));
|
|
419
|
+
if (hasAsyncSeq && hasTask)
|
|
420
|
+
return "high";
|
|
421
|
+
if (hasAsyncSeq)
|
|
422
|
+
return "medium";
|
|
423
|
+
return null;
|
|
424
|
+
},
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
id: "concurrency.notificationcenter-async-observer-task",
|
|
428
|
+
name: "`for await ... in NotificationCenter.notifications(named:)` retains self forever",
|
|
429
|
+
fixHint: "Special case of `concurrency.async-sequence-on-self` — `NotificationCenter.default.notifications(named:)` returns an `AsyncSequence` that never terminates implicitly, so the consuming Task never completes and pins whatever it touches. Even `[weak self]` doesn't help because the iteration itself holds the actor isolation context. Fix: explicitly cancel the Task in `deinit`/`onDisappear`, store it as `private var observation: Task<Void, Never>?`, and prefer `for await _ in seq { let me = self; await me?.handle() }` instead of capturing self via the loop body.",
|
|
430
|
+
match: (_root, allClasses) => {
|
|
431
|
+
const classes = Array.from(allClasses);
|
|
432
|
+
const hasNotifAsync = classes.some((c) => c.includes("NotificationCenter.Notifications") ||
|
|
433
|
+
c.includes("NSNotification.Notifications") ||
|
|
434
|
+
(c.includes("NotificationCenter") && c.includes("AsyncSequence")));
|
|
435
|
+
return hasNotifAsync ? "high" : null;
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
id: "swiftui.observations-closure-strong-self",
|
|
440
|
+
name: "Swift 6.2 `Observations { }` closure retains self",
|
|
441
|
+
fixHint: "The Swift 6.2 / Xcode 26 `Observations` API is the non-SwiftUI way to react to `@Observable` property changes. Each call to the closure happens whenever an observed property changes — internally `Observations` retains the closure to re-invoke it, and the closure usually captures `self` via property reads. Result: classic strong-closure cycle. Capture `[weak self]` inside the closure body just like you would for `Combine.sink` or `KVO.observe`. This pattern is *not* the same as inside SwiftUI body re-evaluation, where the dependency tracker manages closure lifetime for you. NEW API — ship classifier match at `confidence: probable` until validated against more real-world memgraphs.",
|
|
442
|
+
match: (_root, allClasses) => {
|
|
443
|
+
const classes = Array.from(allClasses);
|
|
444
|
+
const hasObservations = classes.some((c) => c.includes("Observations") &&
|
|
445
|
+
!c.includes("ObservationRegistrar") &&
|
|
446
|
+
!c.includes("ObservationTracking"));
|
|
447
|
+
const hasClosure = classes.some((c) => c.includes("Closure context"));
|
|
448
|
+
if (hasObservations && hasClosure)
|
|
449
|
+
return "high";
|
|
450
|
+
if (hasObservations)
|
|
451
|
+
return "medium";
|
|
452
|
+
return null;
|
|
453
|
+
},
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
id: "webkit.wkscriptmessagehandler-bridge",
|
|
457
|
+
name: "WKScriptMessageHandler bridge: handler ↔ webview ↔ contentController cycle",
|
|
458
|
+
fixHint: "`WKUserContentController.add(_:name:)` strong-retains its `WKScriptMessageHandler`. When the handler is also the *bridge* class that owns the `WKWebView` (typical pattern: a `WebViewBridge` exposes JS-callable methods to the page), you get a 3-link cycle: bridge → webView → configuration → userContentController → bridge. Fix: wrap the handler in a `WeakScriptMessageHandler` proxy class that holds the real handler weakly; or call `userContentController.removeScriptMessageHandler(forName:)` for every name added before the WKWebView is removed from its hierarchy. Setting the handler to `nil` is not enough — the strong retention is on the controller, not on the handler property.",
|
|
459
|
+
match: (_root, allClasses) => {
|
|
460
|
+
const classes = Array.from(allClasses);
|
|
461
|
+
const hasWK = classes.some((c) => c.includes("WKUserContentController") ||
|
|
462
|
+
c.includes("WKScriptMessageHandler") ||
|
|
463
|
+
c.includes("WKWebView") ||
|
|
464
|
+
c.includes("WKWebViewConfiguration"));
|
|
465
|
+
// Already covered by webkit.scriptmessage-handler-strong with broader
|
|
466
|
+
// signal; this pattern fires *additionally* when both the handler-named
|
|
467
|
+
// class AND the WKWebView appear in the same cycle (the "bridge" shape).
|
|
468
|
+
const hasHandler = classes.some((c) => c.includes("WKScriptMessageHandler") || /Bridge$|Handler$/.test(c));
|
|
469
|
+
const hasWebView = classes.some((c) => c.includes("WKWebView") || c.includes("WKWebViewConfiguration"));
|
|
470
|
+
// Only fire when all three signals coexist — that's the actual bridge
|
|
471
|
+
// shape. The broader `webkit.scriptmessage-handler-strong` (v1.4)
|
|
472
|
+
// already covers the "any WK class appears" case at medium/high.
|
|
473
|
+
if (hasWK && hasHandler && hasWebView)
|
|
474
|
+
return "high";
|
|
475
|
+
return null;
|
|
476
|
+
},
|
|
477
|
+
},
|
|
368
478
|
];
|
|
369
479
|
/** Pure: classify each ROOT CYCLE in the parsed report. */
|
|
370
480
|
export function classifyReport(report, maxResults = 20) {
|
|
@@ -383,12 +493,14 @@ export function classifyReport(report, maxResults = 20) {
|
|
|
383
493
|
for (const p of PATTERNS) {
|
|
384
494
|
const conf = p.match(root, allClasses);
|
|
385
495
|
if (conf) {
|
|
496
|
+
const hint = getStaticAnalysisHint(p.id);
|
|
386
497
|
matches.push({
|
|
387
498
|
patternId: p.id,
|
|
388
499
|
name: p.name,
|
|
389
500
|
confidence: conf,
|
|
390
501
|
reason: `Pattern ${p.id} matched`,
|
|
391
502
|
fixHint: p.fixHint,
|
|
503
|
+
...(hint ? { staticAnalysisHint: hint } : {}),
|
|
392
504
|
});
|
|
393
505
|
}
|
|
394
506
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classifyCycle.js","sourceRoot":"","sources":["../../src/tools/classifyCycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"classifyCycle.js","sourceRoot":"","sources":["../../src/tools/classifyCycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EACL,mBAAmB,EACnB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,GAEtB,MAAM,mCAAmC,CAAC;AAG3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC,CAAC;AAsDH;0EAC0E;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAwB;IAC3C;QACE,EAAE,EAAE,8BAA8B;QAClC,IAAI,EAAE,2CAA2C;QACjD,OAAO,EACL,gOAAgO;QAClO,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAClE,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI;KACX;IACD;QACE,EAAE,EAAE,mCAAmC;QACvC,IAAI,EAAE,sEAAsE;QAC5E,OAAO,EACL,uOAAuO;QACzO,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YACzD,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI;KACX;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EACL,qKAAqK;QACvK,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;YACtE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI;KACX;IACD;QACE,EAAE,EAAE,kCAAkC;QACtC,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EACL,mNAAmN;QACrN,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACd,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC1C,IACE,IAAI,CAAC,UAAU,KAAK,UAAU;oBAC9B,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,yBAAyB,CAAC,IAAI,KAAK,CAAC,EACzD,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,EAAE,EAAE,4CAA4C;QAChD,IAAI,EAAE,mEAAmE;QACzE,OAAO,EACL,kLAAkL;QACpL,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACnE,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI;KACX;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,IAAI,EAAE,iEAAiE;QACvE,OAAO,EACL,0TAA0T;QAC5T,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACvG,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtE,OAAO,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,CAAC;KACF;IACD;QACE,EAAE,EAAE,oCAAoC;QACxC,IAAI,EAAE,+CAA+C;QACrD,OAAO,EACL,mVAAmV;QACrV,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC/B,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACvB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CACvB,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtE,OAAO,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,CAAC;KACF;IACD;QACE,EAAE,EAAE,oCAAoC;QACxC,IAAI,EAAE,kDAAkD;QACxD,OAAO,EACL,2dAA2d;QAC7d,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBAClC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC7B,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtE,OAAO,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,CAAC;KACF;IAED,2EAA2E;IAC3E,oEAAoE;IACpE,oEAAoE;IACpE,6DAA6D;IAC7D,2EAA2E;IAE3E;QACE,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EACL,8QAA8Q;QAChR,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CACxE,CAAC;YACF,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC;KACF;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,IAAI,EAAE,uDAAuD;QAC7D,OAAO,EACL,yTAAyT;QAC3T,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7D,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;gBACtB,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC5B,CAAC;YACF,OAAO,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,CAAC;KACF;IACD;QACE,EAAE,EAAE,yCAAyC;QAC7C,IAAI,EAAE,gDAAgD;QACtD,OAAO,EACL,qZAAqZ;QACvZ,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBAClC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CACnC,CAAC;YACF,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CACnC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAC/D,CAAC;YACF,OAAO,QAAQ,IAAI,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,CAAC;KACF;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,6CAA6C;QACnD,OAAO,EACL,8YAA8Y;QAChZ,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,gEAAgE;YAChE,iEAAiE;YACjE,2DAA2D;YAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrD,CAAC;YACF,OAAO,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,CAAC;KACF;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,2DAA2D;QACjE,OAAO,EACL,yYAAyY;QAC3Y,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACzB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACrB,CAAC,KAAK,OAAO;gBACb,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CACtB,CAAC;YACF,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAClC,CAAC;KACF;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,kCAAkC;QACxC,OAAO,EACL,qSAAqS;QACvS,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,CAAC;KACF;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,4DAA4D;QAClE,OAAO,EACL,4WAA4W;QAC9W,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC1B,CAAC;YACF,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpC,CAAC;KACF;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,IAAI,EAAE,0DAA0D;QAChE,OAAO,EACL,iUAAiU;QACnU,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;gBACnC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CACtC,CAAC;YACF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,CAAC;KACF;IACD;QACE,EAAE,EAAE,4BAA4B;QAChC,IAAI,EAAE,0CAA0C;QAChD,OAAO,EACL,8UAA8U;QAChV,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,KAAK,YAAY;gBAClB,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3B,CAAC;YACF,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACpC,CAAC;KACF;IACD;QACE,EAAE,EAAE,kCAAkC;QACtC,IAAI,EAAE,6EAA6E;QACnF,OAAO,EACL,uWAAuW;QACzW,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAC5E,CAAC;YACF,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;gBACtC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAClC,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAC9C,CAAC;YACF,IAAI,aAAa,IAAI,aAAa,IAAI,QAAQ;gBAAE,OAAO,MAAM,CAAC;YAC9D,IAAI,aAAa,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,EAAE,EAAE,2CAA2C;QAC/C,IAAI,EAAE,sEAAsE;QAC5E,OAAO,EACL,6XAA6X;QAC/X,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACzB,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAC3C,CAAC;YACF,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC;KACF;IACD;QACE,EAAE,EAAE,qCAAqC;QACzC,IAAI,EAAE,4DAA4D;QAClE,OAAO,EACL,4YAA4Y;QAC9Y,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBACrC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC1B,CAAC;YACF,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/B,CAAC;KACF;IACD;QACE,EAAE,EAAE,oCAAoC;QACxC,IAAI,EAAE,mDAAmD;QACzD,OAAO,EACL,wXAAwX;QAC1X,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAC5B,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CACjC,CAAC;YACF,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC;KACF;IACD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,mEAAmE;QACzE,OAAO,EACL,oUAAoU;QACtU,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBACzC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBAClC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CACzB,CAAC;YACF,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/B,CAAC;KACF;IACD;QACE,EAAE,EAAE,kCAAkC;QACtC,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EACL,mOAAmO;QACrO,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;gBAC1C,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CACrC,CAAC;YACF,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;KACF;IACD;QACE,EAAE,EAAE,0CAA0C;QAC9C,IAAI,EAAE,kDAAkD;QACxD,OAAO,EACL,+UAA+U;QACjV,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,kEAAkE;YAClE,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC;gBAAE,OAAO,MAAM,CAAC;YAC5C,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IAED,2EAA2E;IAC3E,wEAAwE;IACxE,mEAAmE;IACnE,2EAA2E;IAE3E;QACE,EAAE,EAAE,yCAAyC;QAC7C,IAAI,EAAE,6DAA6D;QACnE,OAAO,EACL,2eAA2e;QAC7e,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAC9B,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC/B,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAC9B,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,KAAK,aAAa;gBACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAC5B,CAAC;YACF,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACjC,CAAC;KACF;IACD;QACE,EAAE,EAAE,oCAAoC;QACxC,IAAI,EAAE,sDAAsD;QAC5D,OAAO,EACL,uhBAAuhB;QACzhB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBAC7B,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAC5B,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC/B,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACzB,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC5B,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAChD,CAAC;YACF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAC9D,CAAC;YACF,sEAAsE;YACtE,oEAAoE;YACpE,qDAAqD;YACrD,IAAI,WAAW,IAAI,CAAC,SAAS;gBAAE,OAAO,MAAM,CAAC;YAC7C,IAAI,WAAW;gBAAE,OAAO,QAAQ,CAAC;YACjC,IAAI,UAAU,IAAI,CAAC,SAAS;gBAAE,OAAO,QAAQ,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,EAAE,EAAE,4CAA4C;QAChD,IAAI,EAAE,iDAAiD;QACvD,OAAO,EACL,6eAA6e;QAC/e,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;gBACxC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;gBACzC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAC3C,CAAC;YACF,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,CAAC;KACF;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,yEAAyE;IACzE,2EAA2E;IAE3E;QACE,EAAE,EAAE,qCAAqC;QACzC,IAAI,EAAE,4DAA4D;QAClE,OAAO,EACL,qlBAAqlB;QACvlB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBAClC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAChC,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAC9B,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC/B,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBACrC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAC9C,CAAC;YACF,IAAI,aAAa,IAAI,QAAQ;gBAAE,OAAO,MAAM,CAAC;YAC7C,IAAI,aAAa;gBAAE,OAAO,KAAK,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,EAAE,EAAE,4CAA4C;QAChD,IAAI,EAAE,0DAA0D;QAChE,OAAO,EACL,ipBAAipB;QACnpB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAC5B,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CACrC,CAAC;YACF,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACjC,CAAC;KACF;IACD;QACE,EAAE,EAAE,oCAAoC;QACxC,IAAI,EAAE,6EAA6E;QACnF,OAAO,EACL,iqBAAiqB;QACnqB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC3B,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;gBAC9B,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACjC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBACrC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CACtC,CAAC;YACF,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7D,CAAC;YACF,IAAI,WAAW,IAAI,OAAO;gBAAE,OAAO,MAAM,CAAC;YAC1C,IAAI,WAAW;gBAAE,OAAO,QAAQ,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,EAAE,EAAE,oDAAoD;QACxD,IAAI,EAAE,kFAAkF;QACxF,OAAO,EACL,qjBAAqjB;QACvjB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;gBAC9C,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;gBAC1C,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CACpE,CAAC;YACF,OAAO,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;KACF;IACD;QACE,EAAE,EAAE,0CAA0C;QAC9C,IAAI,EAAE,mDAAmD;QACzD,OAAO,EACL,krBAAkrB;QACprB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAClC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC1B,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBACnC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACrC,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtE,IAAI,eAAe,IAAI,UAAU;gBAAE,OAAO,MAAM,CAAC;YACjD,IAAI,eAAe;gBAAE,OAAO,QAAQ,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;KACF;IACD;QACE,EAAE,EAAE,sCAAsC;QAC1C,IAAI,EAAE,4EAA4E;QAClF,OAAO,EACL,6qBAA6qB;QAC/qB,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBACrC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;gBACpC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACvB,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CACvC,CAAC;YACF,sEAAsE;YACtE,wEAAwE;YACxE,yEAAyE;YACzE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CACrE,CAAC;YACF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CACvE,CAAC;YACF,sEAAsE;YACtE,kEAAkE;YAClE,iEAAiE;YACjE,IAAI,KAAK,IAAI,UAAU,IAAI,UAAU;gBAAE,OAAO,MAAM,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;KACF;CACF,CAAC;AAEF,2DAA2D;AAC3D,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,UAAU,GAAG,EAAE;IAMf,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAe,EAAE,CAAC;IACzC,MAAM,UAAU,GAA0B,KAAK;SAC5C,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;SACpB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS;gBAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACvC,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC;oBACX,SAAS,EAAE,CAAC,CAAC,EAAE;oBACf,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,UAAU;oBACjC,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9C,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAW,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACtE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;YAChC,UAAU,EAAE,OAAO;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;IACL,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,cAAc,CACnE,MAAM,EACN,KAAK,CAAC,UAAU,IAAI,EAAE,CACvB,CAAC;IAEF,wEAAwE;IACxE,qEAAqE;IACrE,wEAAwE;IACxE,MAAM,kBAAkB,GAAyB,EAAE,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE,SAAS;QAC9B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,kBAAkB,CAAC,IAAI,CACrB,GAAG,4BAA4B,CAAC;YAC9B,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS;YACnC,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,aAAa,EAAE,QAAQ;SACxB,CAAC,CACH,CAAC;QACF,MAAM,CAAC,8BAA8B;IACvC,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,YAAY;QAClB,WAAW;QACX,UAAU;QACV,GAAG,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC"}
|
|
@@ -34,10 +34,13 @@ export interface Playbook {
|
|
|
34
34
|
/** Pointers to alternative playbooks the agent might want next. */
|
|
35
35
|
seeAlso?: PlaybookKind[];
|
|
36
36
|
}
|
|
37
|
+
declare const PLAYBOOKS: Record<PlaybookKind, Playbook>;
|
|
37
38
|
export interface GetInvestigationPlaybookResult {
|
|
38
39
|
ok: boolean;
|
|
39
40
|
playbook: Playbook;
|
|
40
41
|
}
|
|
41
42
|
export declare function getInvestigationPlaybook(input: GetInvestigationPlaybookInput): Promise<GetInvestigationPlaybookResult>;
|
|
42
|
-
/** Exposed for tests. */
|
|
43
|
+
/** Exposed for tests + the prompts surface. */
|
|
43
44
|
export declare const PLAYBOOK_KINDS: PlaybookKind[];
|
|
45
|
+
/** Exposed for the prompts surface (see src/runtime/prompts.ts). */
|
|
46
|
+
export { PLAYBOOKS };
|