crewly 1.8.4 → 1.8.5

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 (75) hide show
  1. package/config/roles/_common/wiki-instructions.md +33 -0
  2. package/config/roles/orchestrator/prompt.md +35 -0
  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/wiki/wiki.controller.d.ts +134 -0
  15. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -0
  16. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +718 -0
  17. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -0
  18. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts +23 -0
  19. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -0
  20. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +43 -0
  21. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -0
  22. package/dist/backend/backend/src/index.d.ts.map +1 -1
  23. package/dist/backend/backend/src/index.js +39 -0
  24. package/dist/backend/backend/src/index.js.map +1 -1
  25. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  26. package/dist/backend/backend/src/routes/api.routes.js +4 -0
  27. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  28. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts +28 -0
  29. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  30. package/dist/backend/backend/src/services/session/pty/pty-session.js +162 -4
  31. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  32. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.d.ts +69 -0
  33. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.d.ts.map +1 -0
  34. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.js +174 -0
  35. package/dist/backend/backend/src/services/wiki/referenced-by.resolver.js.map +1 -0
  36. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts +57 -0
  37. package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -0
  38. package/dist/backend/backend/src/services/wiki/schema-loader.service.js +183 -0
  39. package/dist/backend/backend/src/services/wiki/schema-loader.service.js.map +1 -0
  40. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +86 -0
  41. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -0
  42. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +187 -0
  43. package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -0
  44. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts +116 -0
  45. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -0
  46. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +299 -0
  47. package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -0
  48. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +74 -0
  49. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +1 -0
  50. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +154 -0
  51. package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +1 -0
  52. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +100 -0
  53. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -0
  54. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +212 -0
  55. package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -0
  56. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts +84 -0
  57. package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts.map +1 -0
  58. package/dist/backend/backend/src/services/wiki/wiki-process.service.js +138 -0
  59. package/dist/backend/backend/src/services/wiki/wiki-process.service.js.map +1 -0
  60. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +115 -0
  61. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -0
  62. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +291 -0
  63. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -0
  64. package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts +115 -0
  65. package/dist/backend/backend/src/services/wiki/wiki-queue.service.d.ts.map +1 -0
  66. package/dist/backend/backend/src/services/wiki/wiki-queue.service.js +261 -0
  67. package/dist/backend/backend/src/services/wiki/wiki-queue.service.js.map +1 -0
  68. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts +84 -0
  69. package/dist/backend/backend/src/services/wiki/wiki.types.d.ts.map +1 -0
  70. package/dist/backend/backend/src/services/wiki/wiki.types.js +10 -0
  71. package/dist/backend/backend/src/services/wiki/wiki.types.js.map +1 -0
  72. package/frontend/dist/assets/{index-b279da34.js → index-cc115bb4.js} +246 -246
  73. package/frontend/dist/assets/{index-c07e04c0.css → index-db3f5041.css} +1 -1
  74. package/frontend/dist/index.html +2 -2
  75. package/package.json +1 -1
@@ -11,6 +11,152 @@ import { execSync } from 'child_process';
11
11
  import { DEFAULT_TERMINAL_COLS, DEFAULT_TERMINAL_ROWS, } from '../session-backend.interface.js';
12
12
  import { PTY_CONSTANTS } from '../../../constants.js';
13
13
  import { LoggerService } from '../../core/logger.service.js';
14
+ /**
15
+ * Test affordance: lets `pty-session.test.ts` swap in a stub instead of
16
+ * calling the real `pty.spawn`. Production code path is identical.
17
+ */
18
+ let ptySpawnImpl = pty.spawn;
19
+ export function _setPtySpawnImplForTesting(impl) {
20
+ const previous = ptySpawnImpl;
21
+ ptySpawnImpl = impl;
22
+ return () => {
23
+ ptySpawnImpl = previous;
24
+ };
25
+ }
26
+ /**
27
+ * Retry policy for transient `pty.spawn` failures. The native node-pty
28
+ * binding throws a generic `Error("posix_spawnp failed.")` with no errno
29
+ * detail — on macOS this is usually EAGAIN (process table briefly
30
+ * saturated by Chrome helpers / VS Code extensions / build spawns) and
31
+ * retrying after a short pause succeeds. We give up after the 4th
32
+ * attempt and throw a richer diagnostic.
33
+ *
34
+ * Sync sleep uses `Atomics.wait` on an ephemeral SharedArrayBuffer —
35
+ * blocks the thread without spawning a `sleep(1)` subprocess (which
36
+ * would compound the very problem we're working around).
37
+ */
38
+ const PTY_SPAWN_RETRY_BACKOFFS_MS = [0, 150, 400, 1000];
39
+ const PTY_TRANSIENT_ERROR_MARKERS = [
40
+ 'posix_spawnp',
41
+ 'EAGAIN',
42
+ 'ENOMEM',
43
+ 'EMFILE',
44
+ 'ENFILE',
45
+ ];
46
+ function isTransientSpawnError(err) {
47
+ const msg = err instanceof Error ? err.message : String(err);
48
+ return PTY_TRANSIENT_ERROR_MARKERS.some((m) => msg.includes(m));
49
+ }
50
+ function syncSleepMs(ms) {
51
+ if (ms <= 0)
52
+ return;
53
+ const buf = new SharedArrayBuffer(4);
54
+ const view = new Int32Array(buf);
55
+ // Wait returns 'timed-out' after `ms` regardless of view[0] (which
56
+ // nobody writes to). This is the modern synchronous sleep pattern
57
+ // recommended for situations where a busy-wait would burn CPU.
58
+ Atomics.wait(view, 0, 0, ms);
59
+ }
60
+ /**
61
+ * Read current user process count cheaply. Used in the spawn-failure
62
+ * diagnostic to tell the user if they're near macOS `kern.maxprocperuid`.
63
+ */
64
+ function readUserProcessCount() {
65
+ try {
66
+ const out = execSync('ps -u "$(id -un)" 2>/dev/null | wc -l', {
67
+ encoding: 'utf8',
68
+ timeout: 800,
69
+ });
70
+ const n = parseInt(out.trim(), 10);
71
+ return Number.isFinite(n) ? n : null;
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ /** Read kern.maxprocperuid. macOS-specific; returns null on non-Darwin. */
78
+ function readMaxProcPerUid() {
79
+ if (process.platform !== 'darwin')
80
+ return null;
81
+ try {
82
+ const out = execSync('sysctl -n kern.maxprocperuid', {
83
+ encoding: 'utf8',
84
+ timeout: 500,
85
+ });
86
+ const n = parseInt(out.trim(), 10);
87
+ return Number.isFinite(n) ? n : null;
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ }
93
+ /**
94
+ * Wraps `pty.spawn` with retry-on-transient + actionable error.
95
+ *
96
+ * On the 4th and final failure, throws `PtySpawnExhaustedError` with a
97
+ * human-readable message + machine-readable diagnostics. Callers should
98
+ * surface the .message to the user (e.g. ORC → Slack).
99
+ */
100
+ class PtySpawnExhaustedError extends Error {
101
+ diagnostics;
102
+ constructor(message, diagnostics) {
103
+ super(message);
104
+ this.diagnostics = diagnostics;
105
+ this.name = 'PtySpawnExhaustedError';
106
+ }
107
+ }
108
+ function spawnPtyWithRetry(command, args, options, logger) {
109
+ let lastError = null;
110
+ for (let attempt = 0; attempt < PTY_SPAWN_RETRY_BACKOFFS_MS.length; attempt++) {
111
+ const backoffMs = PTY_SPAWN_RETRY_BACKOFFS_MS[attempt];
112
+ if (backoffMs > 0) {
113
+ logger.warn('PTY spawn retry — sleeping then retrying', {
114
+ attempt,
115
+ backoffMs,
116
+ command,
117
+ });
118
+ syncSleepMs(backoffMs);
119
+ }
120
+ try {
121
+ return ptySpawnImpl(command, args, options);
122
+ }
123
+ catch (err) {
124
+ lastError = err;
125
+ if (!isTransientSpawnError(err)) {
126
+ // Non-transient (e.g. ENOENT — command not found): fail fast.
127
+ throw err;
128
+ }
129
+ // Else loop — backoff already happened next iter.
130
+ }
131
+ }
132
+ // Exhausted retries — build an actionable message.
133
+ const userProcessCount = readUserProcessCount();
134
+ const maxProcPerUid = readMaxProcPerUid();
135
+ const errMsg = lastError instanceof Error ? lastError.message : String(lastError);
136
+ let humanHint = '';
137
+ if (userProcessCount !== null &&
138
+ maxProcPerUid !== null &&
139
+ userProcessCount > maxProcPerUid * 0.75) {
140
+ humanHint = ` Your user process count is ${userProcessCount} / ${maxProcPerUid} (>75% of limit). Close some Chrome tabs / VS Code windows / other agent sessions and retry.`;
141
+ }
142
+ else if (process.platform === 'darwin') {
143
+ humanHint =
144
+ ' Likely a transient kernel-level process-table spike (Chrome / VS Code / build tools spawning many helpers). Wait ~30 s and the next attempt should succeed; the OSS will auto-retry on the next user trigger.';
145
+ }
146
+ else {
147
+ humanHint = ' Transient spawn failure — retry shortly.';
148
+ }
149
+ const message = `PTY spawn failed after ${PTY_SPAWN_RETRY_BACKOFFS_MS.length} attempts (${errMsg}).${humanHint}`;
150
+ throw new PtySpawnExhaustedError(message, {
151
+ attempts: PTY_SPAWN_RETRY_BACKOFFS_MS.length,
152
+ lastError: errMsg,
153
+ userProcessCount,
154
+ maxProcPerUid,
155
+ command,
156
+ platform: process.platform,
157
+ });
158
+ }
159
+ export { PtySpawnExhaustedError };
14
160
  /**
15
161
  * PTY Session implementation using node-pty.
16
162
  *
@@ -97,14 +243,18 @@ export class PtySession {
97
243
  TERM: 'xterm-256color',
98
244
  };
99
245
  try {
100
- // Spawn the PTY process
101
- this.ptyProcess = pty.spawn(options.command, options.args ?? [], {
246
+ // Spawn the PTY process — wrapped in retry-with-backoff so that
247
+ // transient `posix_spawnp failed` errors (typical on macOS when
248
+ // Chrome / VS Code briefly saturate the process table) don't
249
+ // turn into user-visible spawn failures. See spawnPtyWithRetry
250
+ // for the policy + sync sleep pattern.
251
+ this.ptyProcess = spawnPtyWithRetry(options.command, options.args ?? [], {
102
252
  name: 'xterm-256color',
103
253
  cols: options.cols ?? DEFAULT_TERMINAL_COLS,
104
254
  rows: options.rows ?? DEFAULT_TERMINAL_ROWS,
105
255
  cwd: options.cwd,
106
256
  env: sessionEnv,
107
- });
257
+ }, this.logger);
108
258
  this.logger.info('PTY process spawned successfully', {
109
259
  name,
110
260
  pid: this.ptyProcess.pid,
@@ -112,11 +262,19 @@ export class PtySession {
112
262
  });
113
263
  }
114
264
  catch (spawnError) {
265
+ // `PtySpawnExhaustedError` carries the actionable hint already
266
+ // in its .message; other errors (e.g. ENOENT — command not
267
+ // found) propagate as-is. Either way we log richer context.
268
+ const errMsg = spawnError instanceof Error ? spawnError.message : String(spawnError);
269
+ const diagnostics = spawnError instanceof PtySpawnExhaustedError
270
+ ? spawnError.diagnostics
271
+ : undefined;
115
272
  this.logger.error('Failed to spawn PTY process', {
116
273
  name,
117
274
  command: options.command,
118
275
  cwd: options.cwd,
119
- error: spawnError instanceof Error ? spawnError.message : String(spawnError),
276
+ error: errMsg,
277
+ diagnostics,
120
278
  stack: spawnError instanceof Error ? spawnError.stack : undefined,
121
279
  });
122
280
  throw spawnError;
@@ -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":"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"}
@@ -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"}