crewly 1.8.4 → 1.8.6

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 (85) hide show
  1. package/config/roles/_common/wiki-instructions.md +33 -0
  2. package/config/roles/orchestrator/prompt.md +66 -4
  3. package/config/roles/team-leader/prompt.md +38 -0
  4. package/config/skills/agent/core/wiki-query/SKILL.md +66 -0
  5. package/config/skills/agent/core/wiki-query/execute.sh +107 -0
  6. package/config/skills/orchestrator/wiki-bookkeep/SKILL.md +71 -0
  7. package/config/skills/orchestrator/wiki-bookkeep/execute.sh +72 -0
  8. package/config/skills/orchestrator/wiki-ingest/SKILL.md +63 -0
  9. package/config/skills/orchestrator/wiki-ingest/execute.sh +113 -0
  10. package/config/skills/orchestrator/wiki-process-queue/SKILL.md +71 -0
  11. package/config/skills/orchestrator/wiki-process-queue/execute.sh +93 -0
  12. package/config/skills/orchestrator/wiki-queue-add/SKILL.md +89 -0
  13. package/config/skills/orchestrator/wiki-queue-add/execute.sh +115 -0
  14. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  15. package/dist/backend/backend/src/controllers/chat/chat.controller.js +20 -0
  16. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  18. package/dist/backend/backend/src/controllers/slack/slack.controller.js +15 -0
  19. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  20. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +134 -0
  21. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -0
  22. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +718 -0
  23. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -0
  24. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts +23 -0
  25. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -0
  26. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +43 -0
  27. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -0
  28. package/dist/backend/backend/src/index.d.ts.map +1 -1
  29. package/dist/backend/backend/src/index.js +65 -0
  30. package/dist/backend/backend/src/index.js.map +1 -1
  31. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  32. package/dist/backend/backend/src/routes/api.routes.js +4 -0
  33. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  34. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts +142 -0
  35. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js +265 -0
  37. package/dist/backend/backend/src/services/orc/orc-delivery-enforcer.service.js.map +1 -0
  38. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +28 -0
  39. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  40. package/dist/backend/backend/src/services/session/pty/pty-session.js +162 -4
  41. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  42. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.d.ts +69 -0
  43. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.d.ts.map +1 -0
  44. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.js +174 -0
  45. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.js.map +1 -0
  46. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts +57 -0
  47. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/wiki/schema-loader.service.js +183 -0
  49. package/dist/backend/backend/src/services/wiki/schema-loader.service.js.map +1 -0
  50. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +86 -0
  51. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +187 -0
  53. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -0
  54. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts +116 -0
  55. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -0
  56. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +299 -0
  57. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -0
  58. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +74 -0
  59. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +1 -0
  60. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +154 -0
  61. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +1 -0
  62. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +100 -0
  63. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -0
  64. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +212 -0
  65. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -0
  66. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts +84 -0
  67. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts.map +1 -0
  68. package/dist/backend/backend/src/services/wiki/wiki-process.service.js +138 -0
  69. package/dist/backend/backend/src/services/wiki/wiki-process.service.js.map +1 -0
  70. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +115 -0
  71. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -0
  72. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +291 -0
  73. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -0
  74. package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts +115 -0
  75. package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts.map +1 -0
  76. package/dist/backend/backend/src/services/wiki/wiki-queue.service.js +261 -0
  77. package/dist/backend/backend/src/services/wiki/wiki-queue.service.js.map +1 -0
  78. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts +84 -0
  79. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts.map +1 -0
  80. package/dist/backend/backend/src/services/wiki/wiki.types.js +10 -0
  81. package/dist/backend/backend/src/services/wiki/wiki.types.js.map +1 -0
  82. package/frontend/dist/assets/{index-b279da34.js → index-cc115bb4.js} +246 -246
  83. package/frontend/dist/assets/{index-c07e04c0.css → index-db3f5041.css} +1 -1
  84. package/frontend/dist/index.html +2 -2
  85. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pty-session.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/session/pty/pty-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pty-session.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/session/pty/pty-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Symbolic `referenced_by:` resolver.
3
+ *
4
+ * SCHEMA.md `referenced_by:` entries use `<kind>:<name>` symbols
5
+ * (`skill:get-sops`, `service:sop.service`) rather than absolute filesystem
6
+ * paths, so SCHEMA.md stays portable across users, machines, and runtimes
7
+ * (Sonnet vs DeepSeek install roots differ, $HOME differs, Pro vs OSS install
8
+ * roots differ).
9
+ *
10
+ * This resolver maps a symbol to the absolute path on the current machine.
11
+ *
12
+ * Per v2.1 spec §2 (Symbolic referenced_by registry):
13
+ * `skill:<name>` → config/skills/{agent/core, orchestrator}/<name>/execute.sh
14
+ * `service:<name>` → backend/src/services/<dir>/<name>.service.ts
15
+ *
16
+ * @module services/wiki/referenced-by.resolver
17
+ */
18
+ import { ReferencedBySymbol, ResolvedReference } from './wiki.types.js';
19
+ /**
20
+ * Resolves SCHEMA.md `referenced_by:` symbols to absolute filesystem paths.
21
+ *
22
+ * @example
23
+ * const resolver = new ReferencedByResolver('/path/to/crewly');
24
+ * const resolved = await resolver.resolve('skill:get-sops');
25
+ * // resolved.absolutePath === '/path/to/crewly/config/skills/agent/core/get-sops/execute.sh'
26
+ */
27
+ export declare class ReferencedByResolver {
28
+ private readonly crewlyRoot;
29
+ private readonly cache;
30
+ /**
31
+ * @param crewlyRoot - Absolute path to the Crewly project root (contains
32
+ * `config/` and `backend/`). Must be absolute — relative paths are
33
+ * rejected so the resolver behaves deterministically regardless of cwd.
34
+ */
35
+ constructor(crewlyRoot: string);
36
+ /**
37
+ * Resolve a symbol to an absolute path.
38
+ *
39
+ * @param symbol - A `skill:<name>` or `service:<name>` reference.
40
+ * @returns The resolved reference. `exists: false` if no candidate file
41
+ * was found on disk — callers should treat this as a lint warning.
42
+ * @throws If the symbol has an unknown kind prefix.
43
+ */
44
+ resolve(symbol: ReferencedBySymbol): Promise<ResolvedReference>;
45
+ /**
46
+ * Resolve many symbols in one pass.
47
+ */
48
+ resolveAll(symbols: ReferencedBySymbol[]): Promise<ResolvedReference[]>;
49
+ /**
50
+ * Clear the in-memory cache. Useful in tests, or after a vault change
51
+ * has moved a referenced file.
52
+ */
53
+ clearCache(): void;
54
+ private parseSymbol;
55
+ /**
56
+ * Locate a file matching `<name>/<fileSuffix>` (skill) or `<name><fileSuffix>`
57
+ * (service) inside a search directory. Returns absolute path or null.
58
+ *
59
+ * For skills: the name IS a directory name → look for `<dir>/<name>/execute.sh`.
60
+ * For services: the name is a basename → recurse for `<name>.service.ts`.
61
+ */
62
+ private findInDir;
63
+ /**
64
+ * The path we'd expect a missing symbol to live at — used so lint can
65
+ * tell the user where to create the file.
66
+ */
67
+ private fallbackCanonicalPath;
68
+ }
69
+ //# sourceMappingURL=referenced-by.resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referenced-by.resolver.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/referenced-by.resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA4BxE;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAE9D;;;;OAIG;gBACS,UAAU,EAAE,MAAM;IAS9B;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsCrE;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAI7E;;;OAGG;IACH,UAAU,IAAI,IAAI;IAQlB,OAAO,CAAC,WAAW;IA0BnB;;;;;;OAMG;YACW,SAAS;IAmCvB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAS9B"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Symbolic `referenced_by:` resolver.
3
+ *
4
+ * SCHEMA.md `referenced_by:` entries use `<kind>:<name>` symbols
5
+ * (`skill:get-sops`, `service:sop.service`) rather than absolute filesystem
6
+ * paths, so SCHEMA.md stays portable across users, machines, and runtimes
7
+ * (Sonnet vs DeepSeek install roots differ, $HOME differs, Pro vs OSS install
8
+ * roots differ).
9
+ *
10
+ * This resolver maps a symbol to the absolute path on the current machine.
11
+ *
12
+ * Per v2.1 spec §2 (Symbolic referenced_by registry):
13
+ * `skill:<name>` → config/skills/{agent/core, orchestrator}/<name>/execute.sh
14
+ * `service:<name>` → backend/src/services/<dir>/<name>.service.ts
15
+ *
16
+ * @module services/wiki/referenced-by.resolver
17
+ */
18
+ import * as path from 'path';
19
+ import { existsSync } from 'fs';
20
+ import * as fs from 'fs/promises';
21
+ const SEARCH_PLANS = {
22
+ skill: {
23
+ // Skills live under config/skills/{agent/core, orchestrator}/<name>/execute.sh
24
+ searchDirs: ['config/skills/agent/core', 'config/skills/orchestrator'],
25
+ fileSuffix: 'execute.sh',
26
+ },
27
+ service: {
28
+ // Symbol `service:sop.service` → file basename `sop.service.ts`. The `.service`
29
+ // segment is part of the symbol's name, so we only append `.ts` when forming
30
+ // the wanted filename. (Resolves backend/src/services/<area>/<name>.ts.)
31
+ searchDirs: ['backend/src/services'],
32
+ fileSuffix: '.ts',
33
+ },
34
+ };
35
+ /**
36
+ * Resolves SCHEMA.md `referenced_by:` symbols to absolute filesystem paths.
37
+ *
38
+ * @example
39
+ * const resolver = new ReferencedByResolver('/path/to/crewly');
40
+ * const resolved = await resolver.resolve('skill:get-sops');
41
+ * // resolved.absolutePath === '/path/to/crewly/config/skills/agent/core/get-sops/execute.sh'
42
+ */
43
+ export class ReferencedByResolver {
44
+ crewlyRoot;
45
+ cache = new Map();
46
+ /**
47
+ * @param crewlyRoot - Absolute path to the Crewly project root (contains
48
+ * `config/` and `backend/`). Must be absolute — relative paths are
49
+ * rejected so the resolver behaves deterministically regardless of cwd.
50
+ */
51
+ constructor(crewlyRoot) {
52
+ if (!path.isAbsolute(crewlyRoot)) {
53
+ throw new Error(`ReferencedByResolver: crewlyRoot must be absolute, got "${crewlyRoot}"`);
54
+ }
55
+ this.crewlyRoot = crewlyRoot;
56
+ }
57
+ /**
58
+ * Resolve a symbol to an absolute path.
59
+ *
60
+ * @param symbol - A `skill:<name>` or `service:<name>` reference.
61
+ * @returns The resolved reference. `exists: false` if no candidate file
62
+ * was found on disk — callers should treat this as a lint warning.
63
+ * @throws If the symbol has an unknown kind prefix.
64
+ */
65
+ async resolve(symbol) {
66
+ const cached = this.cache.get(symbol);
67
+ if (cached) {
68
+ return cached;
69
+ }
70
+ const parsed = this.parseSymbol(symbol);
71
+ const plan = SEARCH_PLANS[parsed.kind];
72
+ let absolutePath = null;
73
+ let exists = false;
74
+ for (const dir of plan.searchDirs) {
75
+ const candidate = await this.findInDir(path.join(this.crewlyRoot, dir), parsed.name, plan.fileSuffix, parsed.kind);
76
+ if (candidate) {
77
+ absolutePath = candidate;
78
+ exists = true;
79
+ break;
80
+ }
81
+ }
82
+ // If nothing found, emit a path that *would* be the canonical location
83
+ // so lint can surface a clear "expected here, missing" message.
84
+ if (!absolutePath) {
85
+ absolutePath = this.fallbackCanonicalPath(parsed.kind, parsed.name);
86
+ exists = existsSync(absolutePath);
87
+ }
88
+ const result = { symbol, absolutePath, exists };
89
+ this.cache.set(symbol, result);
90
+ return result;
91
+ }
92
+ /**
93
+ * Resolve many symbols in one pass.
94
+ */
95
+ async resolveAll(symbols) {
96
+ return Promise.all(symbols.map((s) => this.resolve(s)));
97
+ }
98
+ /**
99
+ * Clear the in-memory cache. Useful in tests, or after a vault change
100
+ * has moved a referenced file.
101
+ */
102
+ clearCache() {
103
+ this.cache.clear();
104
+ }
105
+ // ---------------------------------------------------------------------------
106
+ // Internals
107
+ // ---------------------------------------------------------------------------
108
+ parseSymbol(symbol) {
109
+ const colonIdx = symbol.indexOf(':');
110
+ if (colonIdx <= 0) {
111
+ throw new Error(`ReferencedByResolver: malformed symbol "${symbol}" — expected "<kind>:<name>"`);
112
+ }
113
+ const kind = symbol.slice(0, colonIdx);
114
+ const name = symbol.slice(colonIdx + 1);
115
+ if (!name) {
116
+ throw new Error(`ReferencedByResolver: empty name in symbol "${symbol}"`);
117
+ }
118
+ if (kind !== 'skill' && kind !== 'service') {
119
+ throw new Error(`ReferencedByResolver: unknown kind "${kind}" in symbol "${symbol}" — expected "skill" or "service"`);
120
+ }
121
+ return { kind, name };
122
+ }
123
+ /**
124
+ * Locate a file matching `<name>/<fileSuffix>` (skill) or `<name><fileSuffix>`
125
+ * (service) inside a search directory. Returns absolute path or null.
126
+ *
127
+ * For skills: the name IS a directory name → look for `<dir>/<name>/execute.sh`.
128
+ * For services: the name is a basename → recurse for `<name>.service.ts`.
129
+ */
130
+ async findInDir(dir, name, suffix, kind) {
131
+ if (kind === 'skill') {
132
+ const candidate = path.join(dir, name, suffix);
133
+ return existsSync(candidate) ? candidate : null;
134
+ }
135
+ // Service: recurse one level looking for `<name>.service.ts`.
136
+ if (!existsSync(dir)) {
137
+ return null;
138
+ }
139
+ const wantedFile = `${name}${suffix}`;
140
+ const stack = [dir];
141
+ while (stack.length > 0) {
142
+ const current = stack.pop();
143
+ const entries = await fs.readdir(current, { withFileTypes: true });
144
+ for (const entry of entries) {
145
+ const full = path.join(current, entry.name);
146
+ if (entry.isDirectory()) {
147
+ // Skip test/build artifacts to keep the scan bounded.
148
+ if (entry.name === 'node_modules' || entry.name === 'dist' || entry.name.startsWith('.')) {
149
+ continue;
150
+ }
151
+ stack.push(full);
152
+ }
153
+ else if (entry.isFile() && entry.name === wantedFile) {
154
+ return full;
155
+ }
156
+ }
157
+ }
158
+ return null;
159
+ }
160
+ /**
161
+ * The path we'd expect a missing symbol to live at — used so lint can
162
+ * tell the user where to create the file.
163
+ */
164
+ fallbackCanonicalPath(kind, name) {
165
+ if (kind === 'skill') {
166
+ return path.join(this.crewlyRoot, 'config/skills/agent/core', name, 'execute.sh');
167
+ }
168
+ // Convention: `service:foo.service` → dir `foo`, file `foo.service.ts`.
169
+ // Fall back to using the full name as the dir if no `.service` suffix.
170
+ const areaDir = name.endsWith('.service') ? name.slice(0, -'.service'.length) : name;
171
+ return path.join(this.crewlyRoot, 'backend/src/services', areaDir, `${name}.ts`);
172
+ }
173
+ }
174
+ //# sourceMappingURL=referenced-by.resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referenced-by.resolver.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/referenced-by.resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAclC,MAAM,YAAY,GAA4C;IAC5D,KAAK,EAAE;QACL,+EAA+E;QAC/E,UAAU,EAAE,CAAC,0BAA0B,EAAE,4BAA4B,CAAC;QACtE,UAAU,EAAE,YAAY;KACzB;IACD,OAAO,EAAE;QACP,gFAAgF;QAChF,6EAA6E;QAC7E,yEAAyE;QACzE,UAAU,EAAE,CAAC,sBAAsB,CAAC;QACpC,UAAU,EAAE,KAAK;KAClB;CACF,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,oBAAoB;IACd,UAAU,CAAS;IACnB,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE9D;;;;OAIG;IACH,YAAY,UAAkB;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,2DAA2D,UAAU,GAAG,CACzE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CAAC,MAA0B;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAC/B,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,UAAU,EACf,MAAM,CAAC,IAAI,CACZ,CAAC;YACF,IAAI,SAAS,EAAE,CAAC;gBACd,YAAY,GAAG,SAAS,CAAC;gBACzB,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,gEAAgE;QAChE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACpE,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,GAAsB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QACnE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,OAA6B;QAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,8EAA8E;IAC9E,YAAY;IACZ,8EAA8E;IAEtE,WAAW,CAAC,MAA0B;QAI5C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,2CAA2C,MAAM,8BAA8B,CAChF,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAExC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,GAAG,CACzD,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,uCAAuC,IAAI,gBAAgB,MAAM,mCAAmC,CACrG,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,SAAS,CACrB,GAAW,EACX,IAAY,EACZ,MAAc,EACd,IAAyB;QAEzB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;QACD,8DAA8D;QAC9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;QACtC,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,sDAAsD;oBACtD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzF,SAAS;oBACX,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACvD,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACK,qBAAqB,CAAC,IAAyB,EAAE,IAAY;QACnE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,0BAA0B,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACpF,CAAC;QACD,wEAAwE;QACxE,uEAAuE;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IACnF,CAAC;CACF"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * SCHEMA.md loader + validator + frozen-path gate.
3
+ *
4
+ * Reads `<vault>/SCHEMA.md` (pure YAML inside a .md container), validates
5
+ * shape against `VaultSchema`, and exposes the frozen-path predicate used
6
+ * by `wiki-lint` to refuse restructure operations on OSS-pinned folders.
7
+ *
8
+ * Per v2.1 spec §2 (Hybrid folder architecture) — the `frozen: true` block
9
+ * is a HARD contract: any lint or ingest operation that targets a frozen
10
+ * path MUST fail closed.
11
+ *
12
+ * @module services/wiki/schema-loader.service
13
+ */
14
+ import { VaultSchema } from './wiki.types.js';
15
+ /** Standard schema filename inside any vault root. */
16
+ export declare const SCHEMA_FILENAME = "SCHEMA.md";
17
+ /**
18
+ * Loads + validates a vault's SCHEMA.md. Stateless — instantiate once
19
+ * per service or use the static helper.
20
+ */
21
+ export declare class SchemaLoaderService {
22
+ /**
23
+ * Load and validate the SCHEMA.md inside a vault directory.
24
+ *
25
+ * @param vaultPath - Absolute path to the vault root (the directory
26
+ * containing SCHEMA.md). Must be absolute.
27
+ * @returns Validated VaultSchema.
28
+ * @throws If vaultPath is not absolute, SCHEMA.md is missing, YAML
29
+ * parsing fails, or the parsed object is shape-invalid.
30
+ */
31
+ load(vaultPath: string): Promise<VaultSchema>;
32
+ /**
33
+ * Determine whether a path inside a vault is frozen (OSS-pinned).
34
+ *
35
+ * Used by `wiki-lint` and `wiki-ingest` to refuse restructure / write
36
+ * operations. Comparison is by leading path segment — e.g. `sop/foo.md`
37
+ * is frozen if `sop/` is declared frozen.
38
+ *
39
+ * @param schema - The vault's parsed schema.
40
+ * @param relativePath - Path relative to vault root, e.g. `sop/team-1.md`.
41
+ * @returns true if the path lives under a frozen folder.
42
+ */
43
+ isFrozenPath(schema: VaultSchema, relativePath: string): boolean;
44
+ /**
45
+ * Return every frozen folder path declared in a schema. Convenience for
46
+ * lint reports.
47
+ */
48
+ getFrozenPaths(schema: VaultSchema): string[];
49
+ private validate;
50
+ private requireScope;
51
+ private requireString;
52
+ private requireHardcoded;
53
+ private requireLlmCurated;
54
+ private requireWritePolicy;
55
+ private requireStringArray;
56
+ }
57
+ //# sourceMappingURL=schema-loader.service.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * SCHEMA.md loader + validator + frozen-path gate.
3
+ *
4
+ * Reads `<vault>/SCHEMA.md` (pure YAML inside a .md container), validates
5
+ * shape against `VaultSchema`, and exposes the frozen-path predicate used
6
+ * by `wiki-lint` to refuse restructure operations on OSS-pinned folders.
7
+ *
8
+ * Per v2.1 spec §2 (Hybrid folder architecture) — the `frozen: true` block
9
+ * is a HARD contract: any lint or ingest operation that targets a frozen
10
+ * path MUST fail closed.
11
+ *
12
+ * @module services/wiki/schema-loader.service
13
+ */
14
+ import * as path from 'path';
15
+ import * as fs from 'fs/promises';
16
+ import { parse as parseYAML } from 'yaml';
17
+ /** Standard schema filename inside any vault root. */
18
+ export const SCHEMA_FILENAME = 'SCHEMA.md';
19
+ /**
20
+ * Loads + validates a vault's SCHEMA.md. Stateless — instantiate once
21
+ * per service or use the static helper.
22
+ */
23
+ export class SchemaLoaderService {
24
+ /**
25
+ * Load and validate the SCHEMA.md inside a vault directory.
26
+ *
27
+ * @param vaultPath - Absolute path to the vault root (the directory
28
+ * containing SCHEMA.md). Must be absolute.
29
+ * @returns Validated VaultSchema.
30
+ * @throws If vaultPath is not absolute, SCHEMA.md is missing, YAML
31
+ * parsing fails, or the parsed object is shape-invalid.
32
+ */
33
+ async load(vaultPath) {
34
+ if (!path.isAbsolute(vaultPath)) {
35
+ throw new Error(`SchemaLoader: vaultPath must be absolute, got "${vaultPath}"`);
36
+ }
37
+ const schemaPath = path.join(vaultPath, SCHEMA_FILENAME);
38
+ let raw;
39
+ try {
40
+ raw = await fs.readFile(schemaPath, 'utf8');
41
+ }
42
+ catch (err) {
43
+ throw new Error(`SchemaLoader: SCHEMA.md not found at ${schemaPath} (${err.message})`);
44
+ }
45
+ let parsed;
46
+ try {
47
+ parsed = parseYAML(raw);
48
+ }
49
+ catch (err) {
50
+ throw new Error(`SchemaLoader: invalid YAML in ${schemaPath}: ${err.message}`);
51
+ }
52
+ return this.validate(parsed, schemaPath);
53
+ }
54
+ /**
55
+ * Determine whether a path inside a vault is frozen (OSS-pinned).
56
+ *
57
+ * Used by `wiki-lint` and `wiki-ingest` to refuse restructure / write
58
+ * operations. Comparison is by leading path segment — e.g. `sop/foo.md`
59
+ * is frozen if `sop/` is declared frozen.
60
+ *
61
+ * @param schema - The vault's parsed schema.
62
+ * @param relativePath - Path relative to vault root, e.g. `sop/team-1.md`.
63
+ * @returns true if the path lives under a frozen folder.
64
+ */
65
+ isFrozenPath(schema, relativePath) {
66
+ const normalized = relativePath.replace(/^[/\\]+/, '');
67
+ return schema.hardcoded.some((folder) => {
68
+ // Match either exact folder or anything beneath it.
69
+ const folderName = folder.path.replace(/[/\\]+$/, '');
70
+ return normalized === folderName || normalized.startsWith(`${folderName}/`);
71
+ });
72
+ }
73
+ /**
74
+ * Return every frozen folder path declared in a schema. Convenience for
75
+ * lint reports.
76
+ */
77
+ getFrozenPaths(schema) {
78
+ return schema.hardcoded.map((f) => f.path);
79
+ }
80
+ // ---------------------------------------------------------------------------
81
+ // Validation
82
+ // ---------------------------------------------------------------------------
83
+ validate(parsed, source) {
84
+ if (typeof parsed !== 'object' || parsed === null) {
85
+ throw new Error(`SchemaLoader: ${source} did not parse to an object`);
86
+ }
87
+ const p = parsed;
88
+ const vault_scope = this.requireScope(p.vault_scope, source);
89
+ const vault_id = this.requireString(p.vault_id, 'vault_id', source);
90
+ const hardcoded = this.requireHardcoded(p.hardcoded, source);
91
+ const llm_curated = this.requireLlmCurated(p.llm_curated, source);
92
+ const write_policy = this.requireWritePolicy(p.write_policy, source);
93
+ return { vault_scope, vault_id, hardcoded, llm_curated, write_policy };
94
+ }
95
+ requireScope(raw, source) {
96
+ if (raw !== 'team' && raw !== 'project' && raw !== 'global') {
97
+ throw new Error(`SchemaLoader: ${source} has invalid vault_scope "${raw}" — expected "team" | "project" | "global"`);
98
+ }
99
+ return raw;
100
+ }
101
+ requireString(raw, field, source) {
102
+ if (typeof raw !== 'string' || raw.length === 0) {
103
+ throw new Error(`SchemaLoader: ${source} missing or empty "${field}"`);
104
+ }
105
+ return raw;
106
+ }
107
+ requireHardcoded(raw, source) {
108
+ if (!Array.isArray(raw)) {
109
+ throw new Error(`SchemaLoader: ${source} "hardcoded" must be an array`);
110
+ }
111
+ return raw.map((entry, idx) => {
112
+ if (typeof entry !== 'object' || entry === null) {
113
+ throw new Error(`SchemaLoader: ${source} hardcoded[${idx}] is not an object`);
114
+ }
115
+ const e = entry;
116
+ const path = this.requireString(e.path, `hardcoded[${idx}].path`, source);
117
+ if (e.frozen !== true) {
118
+ throw new Error(`SchemaLoader: ${source} hardcoded[${idx}] must have frozen: true (got ${JSON.stringify(e.frozen)})`);
119
+ }
120
+ const description = this.requireString(e.description, `hardcoded[${idx}].description`, source);
121
+ const refs = this.requireStringArray(e.referenced_by, `hardcoded[${idx}].referenced_by`, source);
122
+ // Each ref must look like `<kind>:<name>` — validated lightly here so
123
+ // a malformed registry doesn't reach the resolver.
124
+ refs.forEach((ref, refIdx) => {
125
+ if (!/^(skill|service):.+$/.test(ref)) {
126
+ throw new Error(`SchemaLoader: ${source} hardcoded[${idx}].referenced_by[${refIdx}] must match "skill:<name>" or "service:<name>" (got "${ref}")`);
127
+ }
128
+ });
129
+ return {
130
+ path,
131
+ frozen: true,
132
+ description,
133
+ referenced_by: refs,
134
+ };
135
+ });
136
+ }
137
+ requireLlmCurated(raw, source) {
138
+ if (!Array.isArray(raw)) {
139
+ throw new Error(`SchemaLoader: ${source} "llm_curated" must be an array`);
140
+ }
141
+ return raw.map((entry, idx) => {
142
+ if (typeof entry !== 'object' || entry === null) {
143
+ throw new Error(`SchemaLoader: ${source} llm_curated[${idx}] is not an object`);
144
+ }
145
+ const e = entry;
146
+ const path = this.requireString(e.path, `llm_curated[${idx}].path`, source);
147
+ if (e.frozen !== false) {
148
+ throw new Error(`SchemaLoader: ${source} llm_curated[${idx}] must have frozen: false (got ${JSON.stringify(e.frozen)})`);
149
+ }
150
+ const seed_subdirs = this.requireStringArray(e.seed_subdirs, `llm_curated[${idx}].seed_subdirs`, source);
151
+ return {
152
+ path,
153
+ frozen: false,
154
+ seed_subdirs,
155
+ llm_can_create_subdirs: Boolean(e.llm_can_create_subdirs),
156
+ lint_may_restructure: Boolean(e.lint_may_restructure),
157
+ };
158
+ });
159
+ }
160
+ requireWritePolicy(raw, source) {
161
+ if (typeof raw !== 'object' || raw === null) {
162
+ throw new Error(`SchemaLoader: ${source} "write_policy" must be an object`);
163
+ }
164
+ const w = raw;
165
+ return {
166
+ canonical: this.requireStringArray(w.canonical, 'write_policy.canonical', source),
167
+ proposed_only: this.requireStringArray(w.proposed_only, 'write_policy.proposed_only', source),
168
+ schema_writer: this.requireStringArray(w.schema_writer, 'write_policy.schema_writer', source),
169
+ };
170
+ }
171
+ requireStringArray(raw, field, source) {
172
+ if (!Array.isArray(raw)) {
173
+ throw new Error(`SchemaLoader: ${source} "${field}" must be an array`);
174
+ }
175
+ raw.forEach((item, idx) => {
176
+ if (typeof item !== 'string' || item.length === 0) {
177
+ throw new Error(`SchemaLoader: ${source} "${field}[${idx}]" must be a non-empty string`);
178
+ }
179
+ });
180
+ return raw;
181
+ }
182
+ }
183
+ //# sourceMappingURL=schema-loader.service.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * WikiBookkeepTriggerService — periodic vault scan that fires a
3
+ * notification to ORC when bookkeeping is due.
4
+ *
5
+ * Per Steve's 2026-05-22 design point #5: "还要时不时让 agent 针对自己的
6
+ * vault 进行 bookkeeping (可以根据存入的 md 数量来 trigger), 譬如过去
7
+ * N 天超过 X 个 md, 然后总结一下."
8
+ *
9
+ * Mechanism:
10
+ * - every `intervalMs` (default 30 min) tick
11
+ * - discover known vaults (project + team + global) by walking known
12
+ * filesystem roots for SCHEMA.md
13
+ * - call `WikiBookkeepService.generate` for each
14
+ * - if `report.shouldFire`, invoke the caller-injected `fireFn` (in
15
+ * production: enqueue a `[BOOKKEEP] vault=…` message to ORC)
16
+ * - debounce per-vault so we don't spam — only refire after
17
+ * `debounceMs` (default 6 h)
18
+ *
19
+ * The service intentionally does NOT do the consolidation itself — it
20
+ * notifies the agent, which then runs `wiki-bookkeep` + `wiki-ingest`
21
+ * (per the orchestrator system prompt rule).
22
+ *
23
+ * @module services/wiki/wiki-bookkeep-trigger.service
24
+ */
25
+ import { WikiBookkeepService, WikiBookkeepReport } from './wiki-bookkeep.service.js';
26
+ export type WikiBookkeepFireFn = (vaultPath: string, report: WikiBookkeepReport) => Promise<void> | void;
27
+ export interface WikiBookkeepTriggerOptions {
28
+ /** Interval between scans, ms. Default 30 minutes. */
29
+ intervalMs?: number;
30
+ /** Minimum gap between fires for the same vault, ms. Default 6 hours. */
31
+ debounceMs?: number;
32
+ /** Caller-injected notifier. Production wires this to enqueue a message to ORC. */
33
+ fireFn: WikiBookkeepFireFn;
34
+ /** Optional override of the discovery roots (tests). */
35
+ discoverRoots?: () => Promise<string[]>;
36
+ /** Optional override of the bookkeep service (tests). */
37
+ bookkeepService?: WikiBookkeepService;
38
+ }
39
+ /**
40
+ * Discover absolute vault paths by walking the well-known Crewly roots:
41
+ * - `<env CREWLY_PROJECT_VAULT_PATH>` (single explicit override)
42
+ * - `<process.cwd>/.crewly/wiki` (current project vault)
43
+ * - `~/.crewly/teams/<uuid>/wiki` (every team vault)
44
+ * - `~/.crewly/global-wiki` (ORC cross-project vault, if present)
45
+ *
46
+ * A path is only included if `SCHEMA.md` exists inside it.
47
+ */
48
+ export declare function discoverWikiVaults(): Promise<string[]>;
49
+ /**
50
+ * Periodic vault-bookkeep trigger. Start at boot, stop at shutdown.
51
+ */
52
+ export declare class WikiBookkeepTriggerService {
53
+ private static instance;
54
+ private readonly logger;
55
+ private readonly intervalMs;
56
+ private readonly debounceMs;
57
+ private readonly fireFn;
58
+ private readonly discoverRoots;
59
+ private readonly bookkeepService;
60
+ private timer;
61
+ /** vaultPath → last fired timestamp (ms). */
62
+ private readonly lastFiredAt;
63
+ /** Per-vault locks so two overlapping ticks don't double-fire. */
64
+ private inflight;
65
+ constructor(opts: WikiBookkeepTriggerOptions);
66
+ static getInstance(): WikiBookkeepTriggerService | null;
67
+ /** Wire the production singleton. Pass null to detach (tests / shutdown). */
68
+ static setInstance(next: WikiBookkeepTriggerService | null): void;
69
+ /** Begin scanning. Idempotent. */
70
+ start(): void;
71
+ /** Stop scanning. Safe to call multiple times. */
72
+ stop(): void;
73
+ /**
74
+ * Run one scan pass. Public for test + the manual
75
+ * `/api/wiki/bookkeep/trigger-now` endpoint.
76
+ */
77
+ tick(): Promise<{
78
+ scanned: string[];
79
+ fired: string[];
80
+ skippedByDebounce: string[];
81
+ quietVaults: string[];
82
+ }>;
83
+ /** Test affordance: clear the debounce ledger. */
84
+ _resetDebounceForTesting(): void;
85
+ }
86
+ //# sourceMappingURL=wiki-bookkeep-trigger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-bookkeep-trigger.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-bookkeep-trigger.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErF,MAAM,MAAM,kBAAkB,GAAG,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,kBAAkB,KACvB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,yDAAyD;IACzD,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAKD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CA4B5D;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,KAAK,CAA+B;IAC5C,6CAA6C;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,IAAI,EAAE,0BAA0B;IAS5C,MAAM,CAAC,WAAW,IAAI,0BAA0B,GAAG,IAAI;IAIvD,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI,GAAG,IAAI;IAKjE,kCAAkC;IAClC,KAAK,IAAI,IAAI;IAWb,kDAAkD;IAClD,IAAI,IAAI,IAAI;IAQZ;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IAoDF,kDAAkD;IAClD,wBAAwB,IAAI,IAAI;CAGjC"}