crewly 1.8.13 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/config/roles/orchestrator/prompt.md +55 -2
  2. package/config/roles/product-manager/prompt.md +40 -0
  3. package/config/roles/team-leader/prompt.md +33 -0
  4. package/config/skills/agent/core/get-sops/SKILL.md +6 -2
  5. package/config/skills/agent/core/get-sops/execute.sh +26 -1
  6. package/config/skills/agent/core/get-team-norms/SKILL.md +69 -0
  7. package/config/skills/agent/core/update-sop/SKILL.md +73 -0
  8. package/config/skills/agent/core/update-sop/execute.sh +115 -0
  9. package/config/skills/agent/core/update-team-norm/SKILL.md +67 -0
  10. package/config/skills/orchestrator/decompose-okr/SKILL.md +107 -0
  11. package/config/skills/orchestrator/decompose-okr/execute.sh +142 -0
  12. package/config/skills/registry.json +52 -6
  13. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +2 -0
  14. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
  15. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -1
  16. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
  17. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +2 -0
  18. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
  19. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +6 -2
  20. package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
  21. package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts +8 -0
  22. package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts.map +1 -1
  23. package/dist/backend/backend/src/controllers/mission/kr.controller.js +17 -0
  24. package/dist/backend/backend/src/controllers/mission/kr.controller.js.map +1 -1
  25. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
  26. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +198 -26
  27. package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
  28. package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
  29. package/dist/backend/backend/src/controllers/slack/slack.controller.js +10 -0
  30. package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
  31. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  32. package/dist/backend/backend/src/controllers/system/system.controller.js +2 -1
  33. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  34. package/dist/backend/backend/src/controllers/team/team.controller.d.ts +17 -0
  35. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  36. package/dist/backend/backend/src/controllers/team/team.controller.js +32 -0
  37. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  38. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +45 -0
  39. package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
  40. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +364 -46
  41. package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
  42. package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
  43. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
  44. package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
  45. package/dist/backend/backend/src/index.d.ts.map +1 -1
  46. package/dist/backend/backend/src/index.js +44 -70
  47. package/dist/backend/backend/src/index.js.map +1 -1
  48. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  49. package/dist/backend/backend/src/routes/api.routes.js +12 -6
  50. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  51. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +13 -4
  52. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
  53. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +47 -11
  54. package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
  55. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +28 -0
  56. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +49 -0
  58. package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -1
  59. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +60 -2
  60. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +93 -3
  62. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  63. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +25 -0
  64. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +33 -0
  66. package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -1
  67. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +28 -0
  68. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
  69. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +48 -0
  70. package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
  71. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  72. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +30 -0
  74. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  75. package/dist/backend/backend/src/services/chat-v2/types.d.ts +14 -0
  76. package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
  78. package/dist/backend/backend/src/services/index.d.ts +0 -1
  79. package/dist/backend/backend/src/services/index.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/index.js +0 -1
  81. package/dist/backend/backend/src/services/index.js.map +1 -1
  82. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts +26 -108
  83. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js +26 -214
  85. package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js.map +1 -1
  86. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +11 -0
  87. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  88. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +36 -0
  89. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  90. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
  91. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
  92. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +21 -0
  93. package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
  94. package/dist/backend/backend/src/services/slack/slack.service.d.ts +12 -0
  95. package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
  96. package/dist/backend/backend/src/services/slack/slack.service.js +53 -1
  97. package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
  98. package/dist/backend/backend/src/services/sop/sop.service.d.ts +10 -0
  99. package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
  100. package/dist/backend/backend/src/services/sop/sop.service.js +71 -10
  101. package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
  102. package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts +92 -1
  103. package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/v3/kr-tracking.service.js +169 -1
  105. package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
  107. package/dist/backend/backend/src/services/v3/mission-period.service.js +7 -1
  108. package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
  109. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +217 -0
  110. package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -0
  111. package/dist/backend/backend/src/services/v3/okr-cascade.service.js +417 -0
  112. package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -0
  113. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +11 -0
  114. package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
  115. package/dist/backend/backend/src/services/v3/okr-review.service.js +50 -0
  116. package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
  117. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts +83 -0
  118. package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts.map +1 -0
  119. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js +185 -0
  120. package/dist/backend/backend/src/services/wiki/sop-catalog.service.js.map +1 -0
  121. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
  122. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +12 -0
  123. package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
  124. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +91 -0
  125. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  126. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +180 -0
  127. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  128. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
  129. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
  130. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
  131. package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
  132. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +79 -19
  133. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  134. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +275 -106
  135. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  136. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
  137. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +13 -0
  138. package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
  139. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +13 -0
  140. package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
  141. package/dist/backend/backend/src/services/workflow/cron-task.service.js +43 -3
  142. package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
  143. package/dist/backend/backend/src/types/sop.types.d.ts +7 -0
  144. package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
  145. package/dist/backend/backend/src/types/sop.types.js.map +1 -1
  146. package/dist/backend/backend/src/types/v2/index.d.ts +4 -4
  147. package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
  148. package/dist/backend/backend/src/types/v2/index.js +2 -2
  149. package/dist/backend/backend/src/types/v2/index.js.map +1 -1
  150. package/dist/backend/backend/src/types/v2/key-result.types.d.ts +84 -0
  151. package/dist/backend/backend/src/types/v2/key-result.types.d.ts.map +1 -1
  152. package/dist/backend/backend/src/types/v2/key-result.types.js +73 -3
  153. package/dist/backend/backend/src/types/v2/key-result.types.js.map +1 -1
  154. package/dist/backend/backend/src/types/v2/mission.types.d.ts +235 -0
  155. package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
  156. package/dist/backend/backend/src/types/v2/mission.types.js +230 -0
  157. package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
  158. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +7 -0
  159. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  160. package/dist/backend/backend/src/types/v2/work-item.types.js +1 -1
  161. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  162. package/dist/cli/backend/src/types/sop.types.d.ts +7 -0
  163. package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
  164. package/dist/cli/backend/src/types/sop.types.js.map +1 -1
  165. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +7 -0
  166. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  167. package/dist/cli/backend/src/types/v2/work-item.types.js +1 -1
  168. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  169. package/frontend/dist/assets/index-4099a91c.js +4961 -0
  170. package/frontend/dist/assets/index-44266b5d.css +42 -0
  171. package/frontend/dist/index.html +2 -2
  172. package/package.json +1 -1
  173. package/frontend/dist/assets/index-068bb4f6.css +0 -42
  174. package/frontend/dist/assets/index-c24ceb15.js +0 -4960
@@ -0,0 +1,185 @@
1
+ /**
2
+ * SOP catalog service.
3
+ *
4
+ * `config/sops/` is a *catalog* of reusable SOPs (a marketplace), NOT content a
5
+ * team owns automatically. A team owns a SOP only once it is INSTALLED — copied
6
+ * into the team's own `~/.crewly/teams/<id>/sops/` store, which the wiki then
7
+ * surfaces (via the overlay resolver) under the team's `sop/` folder.
8
+ *
9
+ * This service lists the catalog, reports which entries a given team has
10
+ * installed, and performs install / uninstall (copy / remove of the per-team
11
+ * copy — the catalog original is never touched).
12
+ *
13
+ * @module services/wiki/sop-catalog.service
14
+ */
15
+ import * as path from 'path';
16
+ import * as fs from 'fs/promises';
17
+ /**
18
+ * Resolve the catalog directory (`<configDir>/sops`). `<configDir>` mirrors the
19
+ * convention used by other services (`<cwd>/config`), overridable via
20
+ * `CREWLY_CONFIG_DIR`.
21
+ *
22
+ * @returns Absolute path to the SOP catalog directory.
23
+ */
24
+ export function sopCatalogDir() {
25
+ const configDir = process.env.CREWLY_CONFIG_DIR
26
+ ? path.resolve(process.env.CREWLY_CONFIG_DIR)
27
+ : path.resolve(process.cwd(), 'config');
28
+ return path.join(configDir, 'sops');
29
+ }
30
+ /**
31
+ * Resolve a team's installed-SOP store from its vault path. The store is a
32
+ * sibling of the vault (`<vault>/../sops`), matching the overlay resolver.
33
+ *
34
+ * @param vaultPath - Absolute path to the team vault (`.../teams/<id>/wiki`).
35
+ * @returns Absolute path to the team's installed-SOP directory.
36
+ */
37
+ export function teamSopsDir(vaultPath) {
38
+ return path.resolve(vaultPath, '..', 'sops');
39
+ }
40
+ /** Recursively collect `.md` files under `root`, returned as root-relative POSIX paths. */
41
+ async function listMarkdown(root) {
42
+ const out = [];
43
+ const walk = async (dir, prefix) => {
44
+ let entries;
45
+ try {
46
+ entries = await fs.readdir(dir, { withFileTypes: true });
47
+ }
48
+ catch {
49
+ return;
50
+ }
51
+ for (const entry of entries) {
52
+ if (entry.name.startsWith('.'))
53
+ continue;
54
+ const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
55
+ if (entry.isDirectory()) {
56
+ await walk(path.join(dir, entry.name), rel);
57
+ }
58
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
59
+ out.push(rel);
60
+ }
61
+ }
62
+ };
63
+ await walk(root, '');
64
+ return out;
65
+ }
66
+ /** Pull a human title from a SOP's frontmatter `title:`, falling back to the filename. */
67
+ async function titleFor(absFile, relPath) {
68
+ try {
69
+ const head = (await fs.readFile(absFile, 'utf8')).slice(0, 600);
70
+ const m = head.match(/^\s*title:\s*(.+?)\s*$/m);
71
+ if (m)
72
+ return m[1].replace(/^["']|["']$/g, '').trim();
73
+ }
74
+ catch {
75
+ // ignore — fall through to filename
76
+ }
77
+ return path
78
+ .basename(relPath, '.md')
79
+ .replace(/\.v\d+$/, '')
80
+ .replace(/[-_]/g, ' ');
81
+ }
82
+ /**
83
+ * Reject relative paths that are unsafe (absolute, traversal, or non-markdown).
84
+ *
85
+ * @param relPath - Candidate catalog-relative SOP path.
86
+ * @throws Error when the path is empty, not `.md`, or escapes its root.
87
+ */
88
+ function assertSafeRel(relPath) {
89
+ const normalized = (relPath ?? '').replace(/\\/g, '/').replace(/^\/+/, '');
90
+ if (!normalized || !normalized.endsWith('.md')) {
91
+ throw new Error('sopPath must be a .md file');
92
+ }
93
+ if (normalized.split('/').some((seg) => seg === '..' || seg === '')) {
94
+ throw new Error('sopPath escapes catalog root');
95
+ }
96
+ return normalized;
97
+ }
98
+ /**
99
+ * The SOP catalog service. Stateless; methods take the team vault path so the
100
+ * same instance serves any team.
101
+ */
102
+ export class SopCatalogService {
103
+ /**
104
+ * List the catalog, annotated with whether the given team has each installed.
105
+ *
106
+ * @param vaultPath - The team vault path (to resolve its installed store).
107
+ * @returns Catalog entries sorted by category then path.
108
+ */
109
+ async list(vaultPath) {
110
+ const catalogRoot = sopCatalogDir();
111
+ const installedSet = new Set(await listMarkdown(teamSopsDir(vaultPath)));
112
+ const rels = await listMarkdown(catalogRoot);
113
+ const entries = await Promise.all(rels.map(async (rel) => {
114
+ const abs = path.join(catalogRoot, rel);
115
+ let bytes = 0;
116
+ try {
117
+ bytes = (await fs.stat(abs)).size;
118
+ }
119
+ catch {
120
+ // ignore
121
+ }
122
+ const category = rel.includes('/') ? rel.split('/')[0] : 'general';
123
+ return {
124
+ path: rel,
125
+ title: await titleFor(abs, rel),
126
+ category,
127
+ bytes,
128
+ installed: installedSet.has(rel),
129
+ };
130
+ }));
131
+ return entries.sort((a, b) => a.category.localeCompare(b.category) || a.path.localeCompare(b.path));
132
+ }
133
+ /**
134
+ * Install a catalog SOP into the team's store (copy, preserving the relative
135
+ * path). Idempotent — re-installing refreshes the copy to the catalog version.
136
+ *
137
+ * @param vaultPath - The team vault path.
138
+ * @param sopPath - Catalog-relative SOP path (e.g. `pm/progress-tracking.md`).
139
+ * @returns `{ installed: true, path }`.
140
+ * @throws Error when the path is unsafe or the catalog file is missing.
141
+ */
142
+ async install(vaultPath, sopPath) {
143
+ const rel = assertSafeRel(sopPath);
144
+ const src = path.join(sopCatalogDir(), rel);
145
+ await fs.access(src); // throws if the catalog file doesn't exist
146
+ const dest = path.join(teamSopsDir(vaultPath), rel);
147
+ await fs.mkdir(path.dirname(dest), { recursive: true });
148
+ await fs.copyFile(src, dest);
149
+ return { installed: true, path: rel };
150
+ }
151
+ /**
152
+ * Remove a SOP from the team's store. The catalog original is untouched.
153
+ * Idempotent — removing a not-installed SOP is a no-op.
154
+ *
155
+ * @param vaultPath - The team vault path.
156
+ * @param sopPath - Catalog-relative SOP path.
157
+ * @returns `{ installed: false, path }`.
158
+ * @throws Error when the path is unsafe.
159
+ */
160
+ async uninstall(vaultPath, sopPath) {
161
+ const rel = assertSafeRel(sopPath);
162
+ const root = teamSopsDir(vaultPath);
163
+ const dest = path.join(root, rel);
164
+ try {
165
+ await fs.unlink(dest);
166
+ }
167
+ catch {
168
+ // already absent — idempotent
169
+ }
170
+ // Prune now-empty parent dirs (e.g. an emptied `pm/`) up to the store root
171
+ // so the wiki tree doesn't show hollow category folders.
172
+ let dir = path.dirname(dest);
173
+ while (dir.startsWith(root + path.sep) && dir !== root) {
174
+ try {
175
+ await fs.rmdir(dir); // throws if non-empty — stop pruning then
176
+ }
177
+ catch {
178
+ break;
179
+ }
180
+ dir = path.dirname(dir);
181
+ }
182
+ return { installed: false, path: rel };
183
+ }
184
+ }
185
+ //# sourceMappingURL=sop-catalog.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sop-catalog.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/sop-catalog.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wiki-cleanup.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-cleanup.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiki-cleanup.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-cleanup.service.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ import * as path from 'path';
34
34
  import { existsSync } from 'fs';
35
35
  import { LoggerService } from '../core/logger.service.js';
36
36
  import { atomicWriteJson, safeReadJson, ensureDir } from '../../utils/file-io.utils.js';
37
+ import { ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
37
38
  // ---------------------------------------------------------------------------
38
39
  // Constants
39
40
  // ---------------------------------------------------------------------------
@@ -92,6 +93,15 @@ export class WikiCleanupService {
92
93
  const summary = { lowConfidence: 0, agentMemoryDump: 0, perAgentCapped: 0 };
93
94
  for (const page of allPages) {
94
95
  const fm = page.frontmatter;
96
+ // SELF-LOOP GUARD (root cause B): never auto-flag the orchestrator's own
97
+ // notes for cleanup. The orc's working notes were mis-filed into customer
98
+ // vaults, flagged low-quality, and dispatched back to the orc as cleanup
99
+ // → it wrote more notes → re-filed → re-flagged (a self-reinforcing
100
+ // loop). Excluding orc-authored pages breaks that loop. (The durable fix
101
+ // is upstream: stop routing internal orc notes into customer KBs.)
102
+ const author = typeof fm['original_author'] === 'string' ? fm['original_author'] : null;
103
+ if (author === ORCHESTRATOR_SESSION_NAME)
104
+ continue;
95
105
  const reasons = [];
96
106
  const conf = parseConfidence(fm['confidence']);
97
107
  if (conf !== null && conf < rules.minConfidence) {
@@ -125,6 +135,8 @@ export class WikiCleanupService {
125
135
  const author = typeof fm['original_author'] === 'string' ? fm['original_author'] : null;
126
136
  if (!author)
127
137
  continue;
138
+ if (author === ORCHESTRATOR_SESSION_NAME)
139
+ continue; // self-loop guard (see first pass)
128
140
  const conf = parseConfidence(fm['confidence']) ?? 0;
129
141
  const date = typeof fm['original_date'] === 'string' ? fm['original_date'] : '';
130
142
  const arr = byAuthor.get(author) ?? [];
@@ -1 +1 @@
1
- {"version":3,"file":"wiki-cleanup.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-cleanup.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiki-cleanup.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-cleanup.service.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,23 @@ export declare const WIKI_MIGRATE_MANIFEST_FILENAME = ".migration-state.json";
32
32
  export declare const WIKI_MIGRATE_MANIFEST_VERSION = 1;
33
33
  /** Hard cap on loose .md files we walk (defensive). */
34
34
  export declare const WIKI_MIGRATE_MAX_LOOSE_MD = 200;
35
+ /**
36
+ * Name of the frozen `okr/` folder added to TEAM + PROJECT vaults for the
37
+ * OKR cascade (spec okr-cascade.md §5). Holds AUTHORED OKR narrative only —
38
+ * runtime Mission/KeyResult entities remain the cascade source-of-truth; this
39
+ * folder optionally mirrors approved Missions and is read-only to agents.
40
+ */
41
+ export declare const WIKI_OKR_FOLDER = "okr";
42
+ /**
43
+ * Service reference recorded in the `okr/` frozen-folder schema block's
44
+ * `referenced_by` list. Lets the schema-loader / referenced-by resolver link
45
+ * the folder back to the cascade service that owns its mirrored content.
46
+ */
47
+ export declare const WIKI_OKR_REFERENCED_BY = "service:okr-cascade.service";
48
+ /** Human-readable description for the TEAM-scope `okr/` frozen-folder block. */
49
+ export declare const WIKI_OKR_TEAM_DESCRIPTION = "Authored OKR narrative for this team. Mirrors approved Missions; agents read-only, Steve authors.";
50
+ /** Human-readable description for the PROJECT-scope `okr/` frozen-folder block. */
51
+ export declare const WIKI_OKR_PROJECT_DESCRIPTION = "Authored OKR narrative for this project. Mirrors approved Missions; agents read-only, Steve authors.";
35
52
  export interface WikiMigrateInput {
36
53
  /** Absolute path to the project root (the dir containing `.crewly/`). */
37
54
  projectRoot: string;
@@ -81,6 +98,36 @@ export interface WikiMigrateBootstrapNeeded {
81
98
  /** UUIDs of team vaults missing their SCHEMA.md. */
82
99
  teams: string[];
83
100
  }
101
+ /**
102
+ * Per-vault outcome of an `okr/` frozen-folder backfill (OKR cascade spec §5).
103
+ * One entry per existing vault we inspected; `changed` is true only when this
104
+ * run actually created the folder and/or injected the schema block.
105
+ */
106
+ export interface WikiOkrFolderResult {
107
+ /** Vault scope this entry describes. */
108
+ scope: 'team' | 'project';
109
+ /** Absolute path to the vault root (the dir containing `SCHEMA.md`). */
110
+ vaultPath: string;
111
+ /** True when the `okr/` directory was created this run. */
112
+ folderCreated: boolean;
113
+ /** True when the `okr/` block was injected into `SCHEMA.md` this run. */
114
+ schemaUpdated: boolean;
115
+ /** Convenience: folderCreated || schemaUpdated. */
116
+ changed: boolean;
117
+ }
118
+ /**
119
+ * Aggregate result of {@link WikiMigrateService.ensureOkrFolders}. Lists every
120
+ * existing TEAM/PROJECT vault that was inspected and whether it changed.
121
+ */
122
+ export interface WikiEnsureOkrResult {
123
+ ok: true;
124
+ /** When false (default), describes what WOULD change without writing. */
125
+ applied: boolean;
126
+ /** One entry per existing vault inspected. */
127
+ vaults: WikiOkrFolderResult[];
128
+ /** Count of vaults that changed (or would change) this run. */
129
+ changedCount: number;
130
+ }
84
131
  export interface WikiMigrateScanResult {
85
132
  ok: true;
86
133
  /** Resolved absolute project vault path. */
@@ -228,5 +275,49 @@ export declare class WikiMigrateService {
228
275
  */
229
276
  private renderForPage;
230
277
  private summarize;
278
+ /**
279
+ * Idempotently add the frozen `okr/` folder + SCHEMA.md block to EXISTING
280
+ * team and project vaults that predate the OKR cascade.
281
+ *
282
+ * New vaults already seed `okr/` via the skeleton writers; this method covers
283
+ * vaults already on disk. It is the analogue of {@link bootstrapMissingVaults}
284
+ * for a single added frozen folder: only vaults whose `SCHEMA.md` already
285
+ * exists are touched (a fully-missing vault is bootstrapped elsewhere).
286
+ *
287
+ * Detection is idempotent — a vault that already declares `okr/` in its
288
+ * SCHEMA.md and has the directory on disk is reported as `changed: false`.
289
+ * The cascade source-of-truth stays the runtime Mission tree; this folder
290
+ * holds authored narrative only.
291
+ *
292
+ * @param input.projectRoot - Absolute path to the project root (dir holding
293
+ * `.crewly/wiki/`). Its project vault is backfilled when present.
294
+ * @param input.homeDir - Override for `~`; team vaults live under
295
+ * `<homeDir>/.crewly/teams/<uuid>/wiki/`. Tests pass a scratch dir.
296
+ * @param input.apply - false (default) for a dry-run preview; true to write.
297
+ * @returns Per-vault results and a changed-vault count.
298
+ * @example
299
+ * ```typescript
300
+ * const res = await WikiMigrateService.getInstance().ensureOkrFolders({
301
+ * projectRoot, homeDir, apply: true,
302
+ * });
303
+ * ```
304
+ */
305
+ ensureOkrFolders(input: {
306
+ projectRoot?: string;
307
+ homeDir?: string;
308
+ apply?: boolean;
309
+ }): Promise<WikiEnsureOkrResult>;
310
+ /**
311
+ * Backfill a single existing vault with the frozen `okr/` folder + schema
312
+ * block. Idempotent: a no-op (changed=false) when the folder and the schema
313
+ * block are both already present.
314
+ *
315
+ * @param vaultDir - Absolute path to the vault root (contains `SCHEMA.md`).
316
+ * @param scope - Vault scope, used to pick the schema description copy.
317
+ * @param description - Description string for the injected `okr/` block.
318
+ * @param apply - When false, only reports what would change.
319
+ * @returns The per-vault outcome.
320
+ */
321
+ private ensureOkrForVault;
231
322
  }
232
323
  //# sourceMappingURL=wiki-migrate.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wiki-migrate.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-migrate.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiki-migrate.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-migrate.service.ts"],"names":[],"mappings":"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"}
@@ -37,6 +37,23 @@ export const WIKI_MIGRATE_MANIFEST_FILENAME = '.migration-state.json';
37
37
  export const WIKI_MIGRATE_MANIFEST_VERSION = 1;
38
38
  /** Hard cap on loose .md files we walk (defensive). */
39
39
  export const WIKI_MIGRATE_MAX_LOOSE_MD = 200;
40
+ /**
41
+ * Name of the frozen `okr/` folder added to TEAM + PROJECT vaults for the
42
+ * OKR cascade (spec okr-cascade.md §5). Holds AUTHORED OKR narrative only —
43
+ * runtime Mission/KeyResult entities remain the cascade source-of-truth; this
44
+ * folder optionally mirrors approved Missions and is read-only to agents.
45
+ */
46
+ export const WIKI_OKR_FOLDER = 'okr';
47
+ /**
48
+ * Service reference recorded in the `okr/` frozen-folder schema block's
49
+ * `referenced_by` list. Lets the schema-loader / referenced-by resolver link
50
+ * the folder back to the cascade service that owns its mirrored content.
51
+ */
52
+ export const WIKI_OKR_REFERENCED_BY = 'service:okr-cascade.service';
53
+ /** Human-readable description for the TEAM-scope `okr/` frozen-folder block. */
54
+ export const WIKI_OKR_TEAM_DESCRIPTION = 'Authored OKR narrative for this team. Mirrors approved Missions; agents read-only, Steve authors.';
55
+ /** Human-readable description for the PROJECT-scope `okr/` frozen-folder block. */
56
+ export const WIKI_OKR_PROJECT_DESCRIPTION = 'Authored OKR narrative for this project. Mirrors approved Missions; agents read-only, Steve authors.';
40
57
  // ---------------------------------------------------------------------------
41
58
  // Service
42
59
  // ---------------------------------------------------------------------------
@@ -443,6 +460,7 @@ export class WikiMigrateService {
443
460
  async writeProjectVaultSkeleton(vaultDir) {
444
461
  await fs.mkdir(path.join(vaultDir, 'memory'), { recursive: true });
445
462
  await fs.mkdir(path.join(vaultDir, 'sop-overrides'), { recursive: true });
463
+ await fs.mkdir(path.join(vaultDir, WIKI_OKR_FOLDER), { recursive: true });
446
464
  await fs.mkdir(path.join(vaultDir, 'llm-curated'), { recursive: true });
447
465
  await fs.writeFile(path.join(vaultDir, 'SCHEMA.md'), PROJECT_VAULT_SCHEMA_MD, 'utf8');
448
466
  }
@@ -455,6 +473,7 @@ export class WikiMigrateService {
455
473
  async writeTeamVaultSkeleton(vaultDir, teamUuid, teamName) {
456
474
  await fs.mkdir(path.join(vaultDir, 'sop'), { recursive: true });
457
475
  await fs.mkdir(path.join(vaultDir, 'team-norm'), { recursive: true });
476
+ await fs.mkdir(path.join(vaultDir, WIKI_OKR_FOLDER), { recursive: true });
458
477
  await fs.mkdir(path.join(vaultDir, 'llm-curated'), { recursive: true });
459
478
  const schema = teamVaultSchemaMd(teamUuid, teamName);
460
479
  await fs.writeFile(path.join(vaultDir, 'SCHEMA.md'), schema, 'utf8');
@@ -1081,6 +1100,117 @@ export class WikiMigrateService {
1081
1100
  }
1082
1101
  return s;
1083
1102
  }
1103
+ // ---------------------------------------------------------------------------
1104
+ // OKR cascade — `okr/` frozen-folder backfill for EXISTING vaults (spec §5)
1105
+ // ---------------------------------------------------------------------------
1106
+ /**
1107
+ * Idempotently add the frozen `okr/` folder + SCHEMA.md block to EXISTING
1108
+ * team and project vaults that predate the OKR cascade.
1109
+ *
1110
+ * New vaults already seed `okr/` via the skeleton writers; this method covers
1111
+ * vaults already on disk. It is the analogue of {@link bootstrapMissingVaults}
1112
+ * for a single added frozen folder: only vaults whose `SCHEMA.md` already
1113
+ * exists are touched (a fully-missing vault is bootstrapped elsewhere).
1114
+ *
1115
+ * Detection is idempotent — a vault that already declares `okr/` in its
1116
+ * SCHEMA.md and has the directory on disk is reported as `changed: false`.
1117
+ * The cascade source-of-truth stays the runtime Mission tree; this folder
1118
+ * holds authored narrative only.
1119
+ *
1120
+ * @param input.projectRoot - Absolute path to the project root (dir holding
1121
+ * `.crewly/wiki/`). Its project vault is backfilled when present.
1122
+ * @param input.homeDir - Override for `~`; team vaults live under
1123
+ * `<homeDir>/.crewly/teams/<uuid>/wiki/`. Tests pass a scratch dir.
1124
+ * @param input.apply - false (default) for a dry-run preview; true to write.
1125
+ * @returns Per-vault results and a changed-vault count.
1126
+ * @example
1127
+ * ```typescript
1128
+ * const res = await WikiMigrateService.getInstance().ensureOkrFolders({
1129
+ * projectRoot, homeDir, apply: true,
1130
+ * });
1131
+ * ```
1132
+ */
1133
+ async ensureOkrFolders(input) {
1134
+ const apply = input.apply ?? false;
1135
+ const homeDir = input.homeDir ?? os.homedir();
1136
+ const vaults = [];
1137
+ // Project vault (only when its SCHEMA.md already exists on disk).
1138
+ if (input.projectRoot) {
1139
+ const projectVault = path.join(input.projectRoot, '.crewly', 'wiki');
1140
+ if (existsSync(path.join(projectVault, 'SCHEMA.md'))) {
1141
+ vaults.push(await this.ensureOkrForVault(projectVault, 'project', WIKI_OKR_PROJECT_DESCRIPTION, apply));
1142
+ }
1143
+ }
1144
+ // Team vaults under <home>/.crewly/teams/<uuid>/wiki/.
1145
+ const teamsRoot = path.join(homeDir, '.crewly', 'teams');
1146
+ if (existsSync(teamsRoot)) {
1147
+ let entries = [];
1148
+ try {
1149
+ entries = await fs.readdir(teamsRoot, { withFileTypes: true });
1150
+ }
1151
+ catch {
1152
+ entries = [];
1153
+ }
1154
+ for (const entry of entries) {
1155
+ if (!entry.isDirectory())
1156
+ continue;
1157
+ if (entry.name === 'orchestrator')
1158
+ continue;
1159
+ const teamVault = path.join(teamsRoot, entry.name, 'wiki');
1160
+ if (!existsSync(path.join(teamVault, 'SCHEMA.md')))
1161
+ continue;
1162
+ vaults.push(await this.ensureOkrForVault(teamVault, 'team', WIKI_OKR_TEAM_DESCRIPTION, apply));
1163
+ }
1164
+ }
1165
+ return {
1166
+ ok: true,
1167
+ applied: apply,
1168
+ vaults,
1169
+ changedCount: vaults.filter((v) => v.changed).length,
1170
+ };
1171
+ }
1172
+ /**
1173
+ * Backfill a single existing vault with the frozen `okr/` folder + schema
1174
+ * block. Idempotent: a no-op (changed=false) when the folder and the schema
1175
+ * block are both already present.
1176
+ *
1177
+ * @param vaultDir - Absolute path to the vault root (contains `SCHEMA.md`).
1178
+ * @param scope - Vault scope, used to pick the schema description copy.
1179
+ * @param description - Description string for the injected `okr/` block.
1180
+ * @param apply - When false, only reports what would change.
1181
+ * @returns The per-vault outcome.
1182
+ */
1183
+ async ensureOkrForVault(vaultDir, scope, description, apply) {
1184
+ const okrDir = path.join(vaultDir, WIKI_OKR_FOLDER);
1185
+ const schemaPath = path.join(vaultDir, 'SCHEMA.md');
1186
+ const folderMissing = !existsSync(okrDir);
1187
+ let schema = '';
1188
+ try {
1189
+ schema = await fs.readFile(schemaPath, 'utf8');
1190
+ }
1191
+ catch {
1192
+ schema = '';
1193
+ }
1194
+ const schemaMissingBlock = !schemaDeclaresOkr(schema);
1195
+ if (apply) {
1196
+ if (folderMissing) {
1197
+ await fs.mkdir(okrDir, { recursive: true });
1198
+ }
1199
+ if (schemaMissingBlock && schema) {
1200
+ const next = injectOkrBlock(schema, description);
1201
+ if (next !== schema) {
1202
+ await fs.writeFile(schemaPath, next, 'utf8');
1203
+ }
1204
+ }
1205
+ }
1206
+ return {
1207
+ scope,
1208
+ vaultPath: vaultDir,
1209
+ folderCreated: folderMissing,
1210
+ schemaUpdated: schemaMissingBlock && schema.length > 0,
1211
+ changed: folderMissing || (schemaMissingBlock && schema.length > 0),
1212
+ };
1213
+ }
1084
1214
  }
1085
1215
  // ---------------------------------------------------------------------------
1086
1216
  // Renderers — pure functions (test-friendly)
@@ -1280,6 +1410,44 @@ function frontmatter(fields) {
1280
1410
  lines.push('---');
1281
1411
  return lines.join('\n') + '\n\n';
1282
1412
  }
1413
+ /**
1414
+ * True when a SCHEMA.md already declares the frozen `okr/` folder. Cheap
1415
+ * line-scan for a `- path: okr/` hardcoded entry; used to keep the OKR
1416
+ * backfill idempotent without parsing the full YAML.
1417
+ *
1418
+ * @param schema - Raw SCHEMA.md contents.
1419
+ * @returns true when an `okr/` path block is present.
1420
+ */
1421
+ function schemaDeclaresOkr(schema) {
1422
+ return new RegExp(`(^|\\n)\\s*-\\s*path:\\s*${WIKI_OKR_FOLDER}/\\s*(\\n|$)`).test(schema);
1423
+ }
1424
+ /**
1425
+ * Inject an `okr/` frozen-folder block into an existing SCHEMA.md, immediately
1426
+ * before the `llm_curated:` section (so it sits with the other `hardcoded:`
1427
+ * entries). Falls back to appending the block at end-of-file when no
1428
+ * `llm_curated:` marker exists. Returns the input unchanged when `okr/` is
1429
+ * already declared (defensive double-check).
1430
+ *
1431
+ * @param schema - Raw SCHEMA.md contents to mutate.
1432
+ * @param description - Description copy for the injected block.
1433
+ * @returns The updated SCHEMA.md contents.
1434
+ */
1435
+ function injectOkrBlock(schema, description) {
1436
+ if (schemaDeclaresOkr(schema))
1437
+ return schema;
1438
+ const block = ` - path: ${WIKI_OKR_FOLDER}/\n` +
1439
+ ` frozen: true\n` +
1440
+ ` description: "${description.replace(/"/g, '\\"')}"\n` +
1441
+ ` referenced_by:\n` +
1442
+ ` - ${WIKI_OKR_REFERENCED_BY}\n\n`;
1443
+ const marker = '\nllm_curated:';
1444
+ const idx = schema.indexOf(marker);
1445
+ if (idx === -1) {
1446
+ const sep = schema.endsWith('\n') ? '' : '\n';
1447
+ return `${schema}${sep}\n${block}`;
1448
+ }
1449
+ return schema.slice(0, idx + 1) + block + schema.slice(idx + 1);
1450
+ }
1283
1451
  // ---------------------------------------------------------------------------
1284
1452
  // SCHEMA.md skeletons
1285
1453
  // ---------------------------------------------------------------------------
@@ -1303,6 +1471,12 @@ hardcoded:
1303
1471
  referenced_by:
1304
1472
  - skill:get-sops
1305
1473
 
1474
+ - path: ${WIKI_OKR_FOLDER}/
1475
+ frozen: true
1476
+ description: "${WIKI_OKR_PROJECT_DESCRIPTION}"
1477
+ referenced_by:
1478
+ - ${WIKI_OKR_REFERENCED_BY}
1479
+
1306
1480
  llm_curated:
1307
1481
  - path: llm-curated/
1308
1482
  frozen: false
@@ -1389,6 +1563,12 @@ hardcoded:
1389
1563
  referenced_by:
1390
1564
  - skill:get-team-norms
1391
1565
 
1566
+ - path: ${WIKI_OKR_FOLDER}/
1567
+ frozen: true
1568
+ description: "${WIKI_OKR_TEAM_DESCRIPTION}"
1569
+ referenced_by:
1570
+ - ${WIKI_OKR_REFERENCED_BY}
1571
+
1392
1572
  llm_curated:
1393
1573
  - path: llm-curated/
1394
1574
  frozen: false