crewly 1.20.20 → 1.20.22

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 (181) hide show
  1. package/config/roles/generalist/prompt.md +8 -2
  2. package/config/roles/team-leader/prompt.md +2 -1
  3. package/config/skills/agent/core/wiki-query/SKILL.md +11 -0
  4. package/config/skills/agent/core/wiki-query/execute.sh +22 -3
  5. package/config/skills/orchestrator/wiki-ingest/SKILL.md +19 -0
  6. package/config/skills/orchestrator/wiki-ingest/execute.sh +36 -1
  7. package/config/skills/team-leader/wiki-review-proposals/SKILL.md +35 -0
  8. package/config/skills/team-leader/wiki-review-proposals/execute.sh +40 -0
  9. package/config/skills/team-leader/wiki-supersede/SKILL.md +38 -0
  10. package/config/skills/team-leader/wiki-supersede/execute.sh +44 -0
  11. package/dist/backend/backend/src/constants.d.ts +39 -0
  12. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  13. package/dist/backend/backend/src/constants.js +37 -0
  14. package/dist/backend/backend/src/constants.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +29 -0
  16. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +196 -4
  18. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
  21. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
  22. package/dist/backend/backend/src/index.d.ts.map +1 -1
  23. package/dist/backend/backend/src/index.js +3 -0
  24. package/dist/backend/backend/src/index.js.map +1 -1
  25. package/dist/backend/backend/src/services/memory/memory.service.d.ts +2 -0
  26. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/memory/memory.service.js +16 -4
  28. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  29. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts +3 -1
  30. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +14 -3
  32. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  33. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts +0 -10
  34. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/slack/slack-initializer.js +21 -0
  36. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  37. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +3 -1
  38. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +26 -9
  40. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +22 -1
  42. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +69 -7
  44. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts +9 -0
  46. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/wiki/schema-loader.service.js +40 -1
  48. package/dist/backend/backend/src/services/wiki/schema-loader.service.js.map +1 -1
  49. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts +32 -0
  50. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +63 -1
  52. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
  53. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts +2 -0
  54. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +9 -2
  56. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/wiki/wiki-curation.service.d.ts +106 -0
  58. package/dist/backend/backend/src/services/wiki/wiki-curation.service.d.ts.map +1 -0
  59. package/dist/backend/backend/src/services/wiki/wiki-curation.service.js +211 -0
  60. package/dist/backend/backend/src/services/wiki/wiki-curation.service.js.map +1 -0
  61. package/dist/backend/backend/src/services/wiki/wiki-history.service.d.ts +63 -0
  62. package/dist/backend/backend/src/services/wiki/wiki-history.service.d.ts.map +1 -0
  63. package/dist/backend/backend/src/services/wiki/wiki-history.service.js +124 -0
  64. package/dist/backend/backend/src/services/wiki/wiki-history.service.js.map +1 -0
  65. package/dist/backend/backend/src/services/wiki/wiki-index.service.d.ts +119 -0
  66. package/dist/backend/backend/src/services/wiki/wiki-index.service.d.ts.map +1 -0
  67. package/dist/backend/backend/src/services/wiki/wiki-index.service.js +263 -0
  68. package/dist/backend/backend/src/services/wiki/wiki-index.service.js.map +1 -0
  69. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +66 -11
  70. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +162 -44
  72. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts +31 -0
  74. package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +69 -0
  76. package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -1
  77. package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.d.ts +29 -0
  78. package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.d.ts.map +1 -0
  79. package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.js +55 -0
  80. package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.js.map +1 -0
  81. package/dist/backend/backend/src/services/wiki/wiki-page.d.ts +101 -0
  82. package/dist/backend/backend/src/services/wiki/wiki-page.d.ts.map +1 -0
  83. package/dist/backend/backend/src/services/wiki/wiki-page.js +130 -0
  84. package/dist/backend/backend/src/services/wiki/wiki-page.js.map +1 -0
  85. package/dist/backend/backend/src/services/wiki/wiki-policy.d.ts +35 -0
  86. package/dist/backend/backend/src/services/wiki/wiki-policy.d.ts.map +1 -0
  87. package/dist/backend/backend/src/services/wiki/wiki-policy.js +44 -0
  88. package/dist/backend/backend/src/services/wiki/wiki-policy.js.map +1 -0
  89. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/wiki/wiki-process.service.js +5 -2
  91. package/dist/backend/backend/src/services/wiki/wiki-process.service.js.map +1 -1
  92. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +57 -13
  93. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
  94. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +91 -54
  95. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
  96. package/dist/backend/backend/src/services/wiki/wiki-redaction.d.ts +74 -0
  97. package/dist/backend/backend/src/services/wiki/wiki-redaction.d.ts.map +1 -0
  98. package/dist/backend/backend/src/services/wiki/wiki-redaction.js +94 -0
  99. package/dist/backend/backend/src/services/wiki/wiki-redaction.js.map +1 -0
  100. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +12 -3
  101. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  102. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +19 -9
  103. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  104. package/dist/backend/backend/src/services/wiki/wiki-usage.service.d.ts +96 -0
  105. package/dist/backend/backend/src/services/wiki/wiki-usage.service.d.ts.map +1 -0
  106. package/dist/backend/backend/src/services/wiki/wiki-usage.service.js +147 -0
  107. package/dist/backend/backend/src/services/wiki/wiki-usage.service.js.map +1 -0
  108. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts +25 -0
  109. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -0
  110. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js +52 -0
  111. package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js.map +1 -0
  112. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +19 -1
  113. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  114. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +47 -6
  115. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  116. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts +24 -0
  117. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts.map +1 -1
  118. package/dist/backend/build-info.json +2 -2
  119. package/dist/cli/backend/src/constants.d.ts +39 -0
  120. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  121. package/dist/cli/backend/src/constants.js +37 -0
  122. package/dist/cli/backend/src/constants.js.map +1 -1
  123. package/dist/cli/backend/src/services/memory/memory.service.d.ts +2 -0
  124. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  125. package/dist/cli/backend/src/services/memory/memory.service.js +16 -4
  126. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  127. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts +3 -1
  128. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  129. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +14 -3
  130. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  131. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +3 -1
  132. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  133. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +26 -9
  134. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  135. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +22 -1
  136. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  137. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +69 -7
  138. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  139. package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts +9 -0
  140. package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -1
  141. package/dist/cli/backend/src/services/wiki/schema-loader.service.js +40 -1
  142. package/dist/cli/backend/src/services/wiki/schema-loader.service.js.map +1 -1
  143. package/dist/cli/backend/src/services/wiki/wiki-history.service.d.ts +63 -0
  144. package/dist/cli/backend/src/services/wiki/wiki-history.service.d.ts.map +1 -0
  145. package/dist/cli/backend/src/services/wiki/wiki-history.service.js +124 -0
  146. package/dist/cli/backend/src/services/wiki/wiki-history.service.js.map +1 -0
  147. package/dist/cli/backend/src/services/wiki/wiki-index.service.d.ts +119 -0
  148. package/dist/cli/backend/src/services/wiki/wiki-index.service.d.ts.map +1 -0
  149. package/dist/cli/backend/src/services/wiki/wiki-index.service.js +263 -0
  150. package/dist/cli/backend/src/services/wiki/wiki-index.service.js.map +1 -0
  151. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +66 -11
  152. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
  153. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +162 -44
  154. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
  155. package/dist/cli/backend/src/services/wiki/wiki-page.d.ts +101 -0
  156. package/dist/cli/backend/src/services/wiki/wiki-page.d.ts.map +1 -0
  157. package/dist/cli/backend/src/services/wiki/wiki-page.js +130 -0
  158. package/dist/cli/backend/src/services/wiki/wiki-page.js.map +1 -0
  159. package/dist/cli/backend/src/services/wiki/wiki-policy.d.ts +35 -0
  160. package/dist/cli/backend/src/services/wiki/wiki-policy.d.ts.map +1 -0
  161. package/dist/cli/backend/src/services/wiki/wiki-policy.js +44 -0
  162. package/dist/cli/backend/src/services/wiki/wiki-policy.js.map +1 -0
  163. package/dist/cli/backend/src/services/wiki/wiki-redaction.d.ts +74 -0
  164. package/dist/cli/backend/src/services/wiki/wiki-redaction.d.ts.map +1 -0
  165. package/dist/cli/backend/src/services/wiki/wiki-redaction.js +94 -0
  166. package/dist/cli/backend/src/services/wiki/wiki-redaction.js.map +1 -0
  167. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +12 -3
  168. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  169. package/dist/cli/backend/src/services/wiki/wiki-search.service.js +19 -9
  170. package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  171. package/dist/cli/backend/src/services/wiki/wiki-usage.service.d.ts +96 -0
  172. package/dist/cli/backend/src/services/wiki/wiki-usage.service.d.ts.map +1 -0
  173. package/dist/cli/backend/src/services/wiki/wiki-usage.service.js +147 -0
  174. package/dist/cli/backend/src/services/wiki/wiki-usage.service.js.map +1 -0
  175. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts +25 -0
  176. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -0
  177. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js +52 -0
  178. package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js.map +1 -0
  179. package/dist/cli/backend/src/services/wiki/wiki.types.d.ts +24 -0
  180. package/dist/cli/backend/src/services/wiki/wiki.types.d.ts.map +1 -1
  181. package/package.json +1 -1
@@ -40,7 +40,7 @@ export class SlackTypingPlaceholderService {
40
40
  * @param identity - The agent's bot token and display name
41
41
  * @returns The placeholder, or null when Slack is disconnected or the post failed
42
42
  */
43
- async begin(key, identity) {
43
+ async begin(key, identity, phase = 'typing') {
44
44
  if (!this.deps.slack.isConnected())
45
45
  return null;
46
46
  const k = keyOf(key);
@@ -50,15 +50,61 @@ export class SlackTypingPlaceholderService {
50
50
  const running = this.inFlight.get(k);
51
51
  if (running)
52
52
  return running;
53
- const task = this.post(k, key, identity).finally(() => this.inFlight.delete(k));
53
+ const task = this.post(k, key, identity, phase).finally(() => this.inFlight.delete(k));
54
54
  this.inFlight.set(k, task);
55
55
  return task;
56
56
  }
57
- async post(k, key, identity) {
57
+ /**
58
+ * Move a pending placeholder to another phase (e.g. the agent finished
59
+ * waking and now holds the message → "is typing…"). No-op when nothing
60
+ * is pending or the phase is unchanged.
61
+ *
62
+ * @param key - Agent + conversation (+ thread)
63
+ * @param phase - New phase
64
+ */
65
+ async setPhase(key, phase) {
66
+ const k = keyOf(key);
67
+ await this.inFlight.get(k);
68
+ const entry = this.pending.get(k);
69
+ if (!entry || entry.placeholder.phase === phase)
70
+ return;
71
+ entry.placeholder.phase = phase;
72
+ if (entry.slowTimer) {
73
+ (this.deps.clearTimer ?? clearTimeout)(entry.slowTimer);
74
+ entry.slowTimer = undefined;
75
+ }
76
+ await this.edit(entry.placeholder, this.textFor(phase, entry.placeholder.displayName));
77
+ }
78
+ /**
79
+ * The reply will not come (agent could not be started / delivery
80
+ * failed): say so in place of the placeholder and stop tracking it.
81
+ *
82
+ * @param key - Agent + conversation (+ thread)
83
+ */
84
+ async fail(key) {
85
+ const k = keyOf(key);
86
+ await this.inFlight.get(k);
87
+ const placeholder = this.take(key);
88
+ if (!placeholder)
89
+ return;
90
+ await this.edit(placeholder, SLACK_TYPING_CONSTANTS.FAILED_TEXT.replace('{name}', placeholder.displayName));
91
+ }
92
+ textFor(phase, name) {
93
+ return (phase === 'waking' ? SLACK_TYPING_CONSTANTS.WAKING_TEXT : SLACK_TYPING_CONSTANTS.TYPING_TEXT).replace('{name}', name);
94
+ }
95
+ async edit(placeholder, text) {
96
+ try {
97
+ await this.deps.slack.updateMessage(placeholder.slackChannelId, placeholder.ts, text, undefined, placeholder.botToken);
98
+ }
99
+ catch (err) {
100
+ this.logger.debug('Typing placeholder edit failed', { error: err instanceof Error ? err.message : String(err) });
101
+ }
102
+ }
103
+ async post(k, key, identity, phase) {
58
104
  try {
59
105
  const ts = await this.deps.slack.sendMessage({
60
106
  channelId: key.slackChannelId,
61
- text: SLACK_TYPING_CONSTANTS.TYPING_TEXT.replace('{name}', identity.displayName),
107
+ text: this.textFor(phase, identity.displayName),
62
108
  ...(key.threadTs ? { threadTs: key.threadTs } : {}),
63
109
  botToken: identity.botToken,
64
110
  skipChatV2Mirror: true,
@@ -69,12 +115,26 @@ export class SlackTypingPlaceholderService {
69
115
  ...(key.threadTs ? { threadTs: key.threadTs } : {}),
70
116
  botToken: identity.botToken,
71
117
  displayName: identity.displayName,
118
+ phase,
72
119
  };
73
120
  const setTimer = this.deps.setTimer ?? ((fn, ms) => setTimeout(fn, ms));
121
+ const unref = (t) => {
122
+ if (typeof t.unref === 'function')
123
+ t.unref();
124
+ };
74
125
  const timer = setTimer(() => void this.expire(k), this.deps.timeoutMs ?? SLACK_TYPING_CONSTANTS.TIMEOUT_MS);
75
- if (typeof timer.unref === 'function')
76
- timer.unref();
77
- this.pending.set(k, { placeholder, timer });
126
+ unref(timer);
127
+ const entry = { placeholder, timer };
128
+ if (phase === 'waking') {
129
+ // A cold start that drags on gets an honest note instead of a stale "waking up…".
130
+ entry.slowTimer = setTimer(() => {
131
+ if (this.pending.get(k)?.placeholder.phase === 'waking') {
132
+ void this.edit(placeholder, SLACK_TYPING_CONSTANTS.WAKING_SLOW_TEXT.replace('{name}', identity.displayName));
133
+ }
134
+ }, SLACK_TYPING_CONSTANTS.WAKING_SLOW_MS);
135
+ unref(entry.slowTimer);
136
+ }
137
+ this.pending.set(k, entry);
78
138
  return placeholder;
79
139
  }
80
140
  catch (err) {
@@ -94,6 +154,8 @@ export class SlackTypingPlaceholderService {
94
154
  if (!entry)
95
155
  return null;
96
156
  (this.deps.clearTimer ?? clearTimeout)(entry.timer);
157
+ if (entry.slowTimer)
158
+ (this.deps.clearTimer ?? clearTimeout)(entry.slowTimer);
97
159
  this.pending.delete(k);
98
160
  return entry.placeholder;
99
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"slack-typing-placeholder.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-typing-placeholder.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack-typing-placeholder.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-typing-placeholder.service.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,15 @@ export declare class SchemaLoaderService {
47
47
  */
48
48
  getFrozenPaths(schema: VaultSchema): string[];
49
49
  private validate;
50
+ /**
51
+ * `retention:` is optional; defaults = every built-in keep_because reason
52
+ * and a required summary.
53
+ */
54
+ private optionalRetention;
55
+ /**
56
+ * `privacy:` is optional; defaults = PII allowed, pages visible to all.
57
+ */
58
+ private optionalPrivacy;
50
59
  private requireScope;
51
60
  private requireString;
52
61
  private requireHardcoded;
@@ -1 +1 @@
1
- {"version":3,"file":"schema-loader.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/schema-loader.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,WAAW,EAAc,MAAM,iBAAiB,CAAC;AAE1D,sDAAsD;AACtD,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;OAQG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BnD;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAShE;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE;IAQ7C,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,kBAAkB;CAW3B"}
1
+ {"version":3,"file":"schema-loader.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/schema-loader.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,WAAW,EAAc,MAAM,iBAAiB,CAAC;AAG1D,sDAAsD;AACtD,eAAO,MAAM,eAAe,cAAc,CAAC;AAE3C;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;OAQG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA0BnD;;;;;;;;;;OAUG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAShE;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE;IAQ7C,OAAO,CAAC,QAAQ;IAiBhB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IA2CxB,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,kBAAkB;CAW3B"}
@@ -14,6 +14,7 @@
14
14
  import * as path from 'path';
15
15
  import * as fs from 'fs/promises';
16
16
  import { parse as parseYAML } from 'yaml';
17
+ import { WIKI_KB_CONSTANTS } from '../../constants.js';
17
18
  /** Standard schema filename inside any vault root. */
18
19
  export const SCHEMA_FILENAME = 'SCHEMA.md';
19
20
  /**
@@ -90,7 +91,45 @@ export class SchemaLoaderService {
90
91
  const hardcoded = this.requireHardcoded(p.hardcoded, source);
91
92
  const llm_curated = this.requireLlmCurated(p.llm_curated, source);
92
93
  const write_policy = this.requireWritePolicy(p.write_policy, source);
93
- return { vault_scope, vault_id, hardcoded, llm_curated, write_policy };
94
+ const retention = this.optionalRetention(p.retention, source);
95
+ const privacy = this.optionalPrivacy(p.privacy, source);
96
+ return { vault_scope, vault_id, hardcoded, llm_curated, write_policy, retention, privacy };
97
+ }
98
+ /**
99
+ * `retention:` is optional; defaults = every built-in keep_because reason
100
+ * and a required summary.
101
+ */
102
+ optionalRetention(raw, source) {
103
+ const defaults = { keep_because: [...WIKI_KB_CONSTANTS.KEEP_BECAUSE], require_summary: true };
104
+ if (raw === undefined || raw === null)
105
+ return defaults;
106
+ if (typeof raw !== 'object')
107
+ throw new Error(`SchemaLoader: ${source} "retention" must be an object`);
108
+ const r = raw;
109
+ const keep = Array.isArray(r.keep_because) ? r.keep_because.filter((k) => typeof k === 'string') : defaults.keep_because;
110
+ const unknown = keep.filter((k) => !WIKI_KB_CONSTANTS.KEEP_BECAUSE.includes(k));
111
+ if (unknown.length > 0)
112
+ throw new Error(`SchemaLoader: ${source} retention.keep_because has unknown reasons: ${unknown.join(', ')}`);
113
+ if (keep.length === 0)
114
+ throw new Error(`SchemaLoader: ${source} retention.keep_because must keep at least one reason`);
115
+ return { keep_because: keep, require_summary: r.require_summary !== false };
116
+ }
117
+ /**
118
+ * `privacy:` is optional; defaults = PII allowed, pages visible to all.
119
+ */
120
+ optionalPrivacy(raw, source) {
121
+ const defaults = { pii: 'allow', default_visibility: [] };
122
+ if (raw === undefined || raw === null)
123
+ return defaults;
124
+ if (typeof raw !== 'object')
125
+ throw new Error(`SchemaLoader: ${source} "privacy" must be an object`);
126
+ const r = raw;
127
+ const pii = r.pii === undefined ? 'allow' : r.pii;
128
+ if (pii !== 'allow' && pii !== 'mask' && pii !== 'refuse') {
129
+ throw new Error(`SchemaLoader: ${source} privacy.pii must be allow | mask | refuse`);
130
+ }
131
+ const vis = Array.isArray(r.default_visibility) ? r.default_visibility.filter((v) => typeof v === 'string') : [];
132
+ return { pii, default_visibility: vis };
94
133
  }
95
134
  requireScope(raw, source) {
96
135
  if (raw !== 'team' && raw !== 'project' && raw !== 'global') {
@@ -1 +1 @@
1
- {"version":3,"file":"schema-loader.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/schema-loader.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-loader.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/schema-loader.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * WikiHistoryService — per-page revision history (who changed what).
3
+ *
4
+ * Before a page is overwritten, superseded, accepted from a proposal, or
5
+ * deleted, its previous content is snapshotted to
6
+ * `<vault>/.wiki-history/<page path>/<ISO>.md` together with the author.
7
+ * That gives multi-writer vaults (several teachers, several agents) an
8
+ * audit trail without depending on the vault living in a git repository.
9
+ * Capped per page; oldest snapshots roll off.
10
+ *
11
+ * @module services/wiki/wiki-history.service
12
+ */
13
+ /** One snapshot. */
14
+ export interface WikiRevision {
15
+ at: string;
16
+ /** Who made the change that replaced this content. */
17
+ author: string;
18
+ /** `write` | `supersede` | `accept_proposal` | `delete` */
19
+ action: string;
20
+ bytes: number;
21
+ file: string;
22
+ }
23
+ /**
24
+ * Snapshots prior page content under `.wiki-history/`.
25
+ */
26
+ export declare class WikiHistoryService {
27
+ private readonly now;
28
+ private static instance;
29
+ private readonly logger;
30
+ constructor(now?: () => Date);
31
+ static getInstance(): WikiHistoryService;
32
+ /** Test-only reset. */
33
+ static _resetForTesting(): void;
34
+ /**
35
+ * Snapshot the current content of a page before it changes. No-op when
36
+ * the page does not exist yet. Never throws.
37
+ *
38
+ * @param vaultPath - Vault root
39
+ * @param relativePath - Vault-relative page path
40
+ * @param author - Session/user making the change
41
+ * @param action - What is about to happen
42
+ * @returns The revision written, or null
43
+ */
44
+ snapshot(vaultPath: string, relativePath: string, author: string, action: string): Promise<WikiRevision | null>;
45
+ /**
46
+ * List revisions of a page, newest first.
47
+ *
48
+ * @param vaultPath - Vault root
49
+ * @param relativePath - Vault-relative page path
50
+ * @returns Revisions
51
+ */
52
+ list(vaultPath: string, relativePath: string): Promise<WikiRevision[]>;
53
+ /**
54
+ * Read one revision's content (meta line stripped).
55
+ *
56
+ * @param file - Absolute snapshot file (from {@link list})
57
+ * @returns Content
58
+ */
59
+ read(file: string): Promise<string>;
60
+ private historyDir;
61
+ private prune;
62
+ }
63
+ //# sourceMappingURL=wiki-history.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-history.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-history.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,oBAAoB;AACpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAEZ,GAAG,GAAE,MAAM,IAAuB;IAI/D,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,IAAI,IAAI;IAI/B;;;;;;;;;OASG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAmBrH;;;;;;OAMG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA4B5E;;;;;OAKG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC,OAAO,CAAC,UAAU;YAIJ,KAAK;CAKpB"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * WikiHistoryService — per-page revision history (who changed what).
3
+ *
4
+ * Before a page is overwritten, superseded, accepted from a proposal, or
5
+ * deleted, its previous content is snapshotted to
6
+ * `<vault>/.wiki-history/<page path>/<ISO>.md` together with the author.
7
+ * That gives multi-writer vaults (several teachers, several agents) an
8
+ * audit trail without depending on the vault living in a git repository.
9
+ * Capped per page; oldest snapshots roll off.
10
+ *
11
+ * @module services/wiki/wiki-history.service
12
+ */
13
+ import * as path from 'path';
14
+ import * as fs from 'fs/promises';
15
+ import { existsSync } from 'fs';
16
+ import { LoggerService } from '../core/logger.service.js';
17
+ import { WIKI_KB_CONSTANTS } from '../../constants.js';
18
+ /**
19
+ * Snapshots prior page content under `.wiki-history/`.
20
+ */
21
+ export class WikiHistoryService {
22
+ now;
23
+ static instance = null;
24
+ logger;
25
+ constructor(now = () => new Date()) {
26
+ this.now = now;
27
+ this.logger = LoggerService.getInstance().createComponentLogger('WikiHistory');
28
+ }
29
+ static getInstance() {
30
+ if (!this.instance)
31
+ this.instance = new WikiHistoryService();
32
+ return this.instance;
33
+ }
34
+ /** Test-only reset. */
35
+ static _resetForTesting() {
36
+ this.instance = null;
37
+ }
38
+ /**
39
+ * Snapshot the current content of a page before it changes. No-op when
40
+ * the page does not exist yet. Never throws.
41
+ *
42
+ * @param vaultPath - Vault root
43
+ * @param relativePath - Vault-relative page path
44
+ * @param author - Session/user making the change
45
+ * @param action - What is about to happen
46
+ * @returns The revision written, or null
47
+ */
48
+ async snapshot(vaultPath, relativePath, author, action) {
49
+ const abs = path.join(vaultPath, relativePath);
50
+ if (!existsSync(abs))
51
+ return null;
52
+ try {
53
+ const content = await fs.readFile(abs, 'utf8');
54
+ const dir = this.historyDir(vaultPath, relativePath);
55
+ await fs.mkdir(dir, { recursive: true });
56
+ const at = this.now().toISOString();
57
+ const file = path.join(dir, `${at.replace(/[:.]/g, '-')}.md`);
58
+ const meta = `<!-- crewly-wiki-history author=${JSON.stringify(author)} action=${action} at=${at} -->\n`;
59
+ await fs.writeFile(file, meta + content, 'utf8');
60
+ await this.prune(dir);
61
+ return { at, author, action, bytes: Buffer.byteLength(content, 'utf8'), file };
62
+ }
63
+ catch (err) {
64
+ this.logger.debug('history snapshot failed (non-fatal)', { relativePath, error: err instanceof Error ? err.message : String(err) });
65
+ return null;
66
+ }
67
+ }
68
+ /**
69
+ * List revisions of a page, newest first.
70
+ *
71
+ * @param vaultPath - Vault root
72
+ * @param relativePath - Vault-relative page path
73
+ * @returns Revisions
74
+ */
75
+ async list(vaultPath, relativePath) {
76
+ const dir = this.historyDir(vaultPath, relativePath);
77
+ let names;
78
+ try {
79
+ names = (await fs.readdir(dir)).filter((n) => n.endsWith('.md')).sort().reverse();
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ const out = [];
85
+ for (const name of names) {
86
+ const file = path.join(dir, name);
87
+ try {
88
+ const raw = await fs.readFile(file, 'utf8');
89
+ const m = raw.match(/^<!-- crewly-wiki-history author=(".*?") action=(\S+) at=(\S+) -->\n/);
90
+ out.push({
91
+ at: m ? m[3] : '',
92
+ author: m ? JSON.parse(m[1]) : 'unknown',
93
+ action: m ? m[2] : 'unknown',
94
+ bytes: Buffer.byteLength(raw, 'utf8') - (m ? m[0].length : 0),
95
+ file,
96
+ });
97
+ }
98
+ catch {
99
+ /* skip */
100
+ }
101
+ }
102
+ return out;
103
+ }
104
+ /**
105
+ * Read one revision's content (meta line stripped).
106
+ *
107
+ * @param file - Absolute snapshot file (from {@link list})
108
+ * @returns Content
109
+ */
110
+ async read(file) {
111
+ const raw = await fs.readFile(file, 'utf8');
112
+ return raw.replace(/^<!-- crewly-wiki-history [^\n]* -->\n/, '');
113
+ }
114
+ historyDir(vaultPath, relativePath) {
115
+ return path.join(vaultPath, WIKI_KB_CONSTANTS.HISTORY_DIR, relativePath.replace(/\\/g, '/'));
116
+ }
117
+ async prune(dir) {
118
+ const names = (await fs.readdir(dir)).filter((n) => n.endsWith('.md')).sort();
119
+ const excess = names.length - WIKI_KB_CONSTANTS.HISTORY_MAX_REVISIONS;
120
+ for (let i = 0; i < excess; i++)
121
+ await fs.unlink(path.join(dir, names[i])).catch(() => undefined);
122
+ }
123
+ }
124
+ //# sourceMappingURL=wiki-history.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-history.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-history.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * WikiIndexService — the one-line-per-page index that makes retrieval a
3
+ * two-step read: read the whole index → pick 3–5 pages → read them in
4
+ * full. No embeddings, no vector store; the index IS the retrieval.
5
+ *
6
+ * `llm-curated/index.md` is owned by the system: every page write updates
7
+ * its line, every delete removes it, and `rebuild()` regenerates it from
8
+ * the pages' frontmatter (also the migration path for vaults whose index
9
+ * nobody maintained). Pages are grouped by their top-level curated folder.
10
+ *
11
+ * @module services/wiki/wiki-index.service
12
+ */
13
+ import { type WikiPageFrontmatter } from './wiki-page.js';
14
+ /** One entry of the parsed index. */
15
+ export interface WikiIndexEntry {
16
+ relativePath: string;
17
+ title: string;
18
+ summary: string;
19
+ supersededBy?: string;
20
+ /** Top-level folder under llm-curated (e.g. `decisions`), or `_root`. */
21
+ group: string;
22
+ }
23
+ /** Parsed index + raw text. */
24
+ export interface WikiIndex {
25
+ entries: WikiIndexEntry[];
26
+ raw: string;
27
+ bytes: number;
28
+ }
29
+ /** Coverage report: pages the index does not know and vice versa. */
30
+ export interface WikiIndexCoverage {
31
+ pages: number;
32
+ indexed: number;
33
+ missingFromIndex: string[];
34
+ indexedButMissing: string[];
35
+ }
36
+ /**
37
+ * Maintains `llm-curated/index.md` per vault.
38
+ */
39
+ export declare class WikiIndexService {
40
+ private static instance;
41
+ private readonly logger;
42
+ /** Per-vault write serialisation (index edits are read-modify-write). */
43
+ private readonly locks;
44
+ constructor();
45
+ static getInstance(): WikiIndexService;
46
+ /** Test-only reset. */
47
+ static _resetForTesting(): void;
48
+ /**
49
+ * Absolute path of a vault's index file.
50
+ *
51
+ * @param vaultPath - Vault root
52
+ * @returns `<vault>/llm-curated/index.md`
53
+ */
54
+ indexPath(vaultPath: string): string;
55
+ /**
56
+ * Read and parse the index (empty when absent).
57
+ *
58
+ * @param vaultPath - Vault root
59
+ * @returns Parsed entries + raw text
60
+ */
61
+ read(vaultPath: string): Promise<WikiIndex>;
62
+ /**
63
+ * Insert or replace the line for one page.
64
+ *
65
+ * @param vaultPath - Vault root
66
+ * @param relativePath - Vault-relative page path
67
+ * @param fm - The page's frontmatter (title/summary/superseded_by are used)
68
+ */
69
+ upsert(vaultPath: string, relativePath: string, fm: Partial<WikiPageFrontmatter>): Promise<void>;
70
+ /**
71
+ * Remove a page's line (no-op when absent).
72
+ *
73
+ * @param vaultPath - Vault root
74
+ * @param relativePath - Vault-relative page path
75
+ */
76
+ remove(vaultPath: string, relativePath: string): Promise<void>;
77
+ /**
78
+ * Regenerate the whole index from the pages on disk. Pages without a
79
+ * `summary` still get a line (title only) so nothing is invisible, and
80
+ * they show up in {@link coverage} as work for the bookkeeping agent.
81
+ *
82
+ * @param vaultPath - Vault root
83
+ * @returns Number of entries written
84
+ */
85
+ rebuild(vaultPath: string): Promise<number>;
86
+ /**
87
+ * Compare the index against the pages on disk.
88
+ *
89
+ * @param vaultPath - Vault root
90
+ * @returns Coverage report
91
+ */
92
+ coverage(vaultPath: string): Promise<WikiIndexCoverage>;
93
+ /**
94
+ * The index text an agent should read first, cut to the folders most
95
+ * relevant to a query when the full index would not fit the budget.
96
+ *
97
+ * @param vaultPath - Vault root
98
+ * @param queryTokens - Lower-cased query terms (for folder selection when trimming)
99
+ * @param maxBytes - Budget (default {@link WIKI_KB_CONSTANTS.INDEX_MAX_BYTES})
100
+ * @returns Text plus whether it was trimmed
101
+ */
102
+ readForQuery(vaultPath: string, queryTokens: string[], maxBytes?: number): Promise<{
103
+ text: string;
104
+ truncated: boolean;
105
+ entries: number;
106
+ }>;
107
+ private write;
108
+ private withLock;
109
+ }
110
+ /**
111
+ * Parse index lines back into entries.
112
+ *
113
+ * @param raw - index.md text
114
+ * @returns Entries in file order
115
+ */
116
+ export declare function parseIndex(raw: string): WikiIndexEntry[];
117
+ /** Whether a vault has an index file at all. */
118
+ export declare function hasIndex(vaultPath: string): boolean;
119
+ //# sourceMappingURL=wiki-index.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-index.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-index.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGnF,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,+BAA+B;AAC/B,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAKD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;;IAM1D,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAKtC,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,IAAI,IAAI;IAI/B;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIpC;;;;;OAKG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAUjD;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtG;;;;;OAKG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASpE;;;;;;;OAOG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBjD;;;;;OAKG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAc7D;;;;;;;;OAQG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,QAAQ,SAAoC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;YAwB5J,KAAK;YAQL,QAAQ;CAavB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAexD;AAoCD,gDAAgD;AAChD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnD"}