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.
- package/config/roles/orchestrator/prompt.md +55 -2
- package/config/roles/product-manager/prompt.md +40 -0
- package/config/roles/team-leader/prompt.md +33 -0
- package/config/skills/agent/core/get-sops/SKILL.md +6 -2
- package/config/skills/agent/core/get-sops/execute.sh +26 -1
- package/config/skills/agent/core/get-team-norms/SKILL.md +69 -0
- package/config/skills/agent/core/update-sop/SKILL.md +73 -0
- package/config/skills/agent/core/update-sop/execute.sh +115 -0
- package/config/skills/agent/core/update-team-norm/SKILL.md +67 -0
- package/config/skills/orchestrator/decompose-okr/SKILL.md +107 -0
- package/config/skills/orchestrator/decompose-okr/execute.sh +142 -0
- package/config/skills/registry.json +52 -6
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +2 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +2 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +6 -2
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts +8 -0
- package/dist/backend/backend/src/controllers/mission/kr.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/kr.controller.js +17 -0
- package/dist/backend/backend/src/controllers/mission/kr.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +198 -26
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +10 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +2 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts +17 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +32 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +45 -0
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +364 -46
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +44 -70
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +12 -6
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +13 -4
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +47 -11
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +28 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +49 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +60 -2
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +93 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +25 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +33 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +28 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +48 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +30 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +14 -0
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/backend/backend/src/services/index.d.ts +0 -1
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +0 -1
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts +26 -108
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js +26 -214
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +11 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +36 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +21 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +12 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +53 -1
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/sop/sop.service.d.ts +10 -0
- package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/sop/sop.service.js +71 -10
- package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts +92 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js +169 -1
- package/dist/backend/backend/src/services/v3/kr-tracking.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js +7 -1
- package/dist/backend/backend/src/services/v3/mission-period.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts +217 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js +417 -0
- package/dist/backend/backend/src/services/v3/okr-cascade.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts +11 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/okr-review.service.js +50 -0
- package/dist/backend/backend/src/services/v3/okr-review.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts +83 -0
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.js +185 -0
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +12 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +91 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +180 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +79 -19
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +275 -106
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +13 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +13 -0
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.js +43 -3
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/types/sop.types.d.ts +7 -0
- package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/sop.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/index.d.ts +4 -4
- package/dist/backend/backend/src/types/v2/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/index.js +2 -2
- package/dist/backend/backend/src/types/v2/index.js.map +1 -1
- package/dist/backend/backend/src/types/v2/key-result.types.d.ts +84 -0
- package/dist/backend/backend/src/types/v2/key-result.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/key-result.types.js +73 -3
- package/dist/backend/backend/src/types/v2/key-result.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +235 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +230 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +7 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/types/sop.types.d.ts +7 -0
- package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/sop.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +7 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/index-4099a91c.js +4961 -0
- package/frontend/dist/assets/index-44266b5d.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-068bb4f6.css +0 -42
- 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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAgBlC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,MAAc,EAAiB,EAAE;QAChE,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACzC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0FAA0F;AAC1F,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAChD,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,OAAO,IAAI;SACR,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,MAAM,WAAW,GAAG,aAAa,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,CAAC;gBACH,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,OAAO;gBACL,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,MAAM,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;gBAC/B,QAAQ;gBACR,KAAK;gBACL,SAAS,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;aACP,CAAC;QAC9B,CAAC,CAAC,CACH,CAAC;QACF,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC/E,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,OAAe;QAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,2CAA2C;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACxC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,OAAe;QAChD,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;QACD,2EAA2E;QAC3E,yDAAyD;QACzD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,0CAA0C;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM;YACR,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-cleanup.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-cleanup.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,aAAa,EAAwB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAExF,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,6BAA6B,GAAG,4BAA4B,CAAC;AAC1E,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,QAAQ;IACR,KAAK;IACL,eAAe;IACf,KAAK;CACN,CAAC,CAAC;AAEH,2DAA2D;AAC3D,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC;yCACyC;AACzC,MAAM,aAAa,GAAG,KAAK,CAAC;AAqG5B,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,OAAO,kBAAkB;IACrB,MAAM,CAAC,QAAQ,GAA8B,IAAI,CAAC;IACzC,MAAM,CAAkB;IAEzC;QACE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,aAAa;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,KAA2B;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;QAEtC,MAAM,KAAK,GAA+B;YACxC,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG;YAChD,oBAAoB,EAAE,KAAK,CAAC,KAAK,EAAE,oBAAoB,IAAI,IAAI;YAC/D,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;SAC3C,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAoF,EAAE,CAAC;QACrG,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC7F,CAAC;QAKD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;QACxC,MAAM,OAAO,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAE5E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC5D,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,CAAC;YAED,MAAM,YAAY,GAAG,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1F,IAAI,KAAK,CAAC,oBAAoB,IAAI,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC9G,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;gBAChD,OAAO,CAAC,eAAe,EAAE,CAAC;YAC5B,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE;oBACxB,OAAO;oBACP,IAAI,EAAE;wBACJ,UAAU,EAAE,IAAI;wBAChB,cAAc,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI;wBACxF,YAAY,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;qBACnF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwE,CAAC;YACjG,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACxC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;gBAC5B,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,iBAAiB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACxF,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC5D,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACrC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW;oBAAE,SAAS;gBAC9C,iDAAiD;gBACjD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClF,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;oBACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAC/C,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,MAAM,UAAU,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;oBAChF,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;4BAC5B,OAAO,EAAE,CAAC,kBAAkB,MAAM,UAAU,KAAK,CAAC,WAAW,GAAG,CAAC;4BACjE,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE;yBAC/F,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU;gBAChC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc;gBACxC,YAAY,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI;gBAClF,UAAU,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC5E,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;YACH,IAAI,UAAU,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;gBACvC,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YAC7C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,QAAQ,CAAC,MAAM;YAC7B,cAAc,EAAE,UAAU,CAAC,MAAM;YACjC,SAAS;YACT,OAAO;SACR,CAAC,CAAC;QAEH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU;YACV,YAAY,EAAE,QAAQ,CAAC,MAAM;YAC7B,SAAS;YACT,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK,CAAC,KAA4B;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;QAC5F,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,WAAW,EACX,EAAE,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,EAAE,EAAE,EACtD,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,IAAI,OAAO,CAAC,OAAO,KAAK,4BAA4B,EAAE,CAAC;YACrD,mEAAmE;YACnE,OAAO,CAAC,OAAO,GAAG,4BAA4B,CAAC;YAC/C,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAsC,EAAE,CAAC;QAEtD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,mEAAmE;YACnE,iEAAiE;YACjE,mEAAmE;YACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC5C,SAAS;YACX,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC/C,SAAS;YACX,CAAC;YAED,sDAAsD;YACtD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACpD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,OAAO,EAAE,CAAC,YAAY,CAAC;gBACvB,IAAI;gBACJ,WAAW;aACZ,CAAC,CAAC;YAEH,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,kDAAkD;QAClD,EAAE;QACF,sEAAsE;QACtE,qEAAqE;QACrE,+DAA+D;QAC/D,wDAAwD;QACxD,mEAAmE;QACnE,iEAAiE;QACjE,yDAAyD;QACzD,oEAAoE;QACpE,kEAAkE;QAClE,gEAAgE;QAChE,2DAA2D;QAC3D,MAAM,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAC9C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;YAC7B,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,OAAO;YACP,OAAO;YACP,WAAW;YACX,0BAA0B,EAAE,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAEpE,aAAa,CAAC,SAAiB;QACrC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,SAAS,EAAE,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,GAAW;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,SAAS,CACrB,GAAW,EACX,SAAiB,EACjB,WAA4F,EAC5F,GAAW;QAEX,IAAI,OAA8B,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,WAAW,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO,IAAI,CAAC;YAC3C,mEAAmE;YACnE,kEAAkE;YAClE,4DAA4D;YAC5D,6CAA6C;YAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvE,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBAC3C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;gBAChG,IAAI,SAAS;oBAAE,OAAO,IAAI,CAAC;gBAC3B,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC3C,MAAM,EAAE,WAAW,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC9C,WAAW,CAAC,IAAI,CAAC;oBACf,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;oBAChE,WAAW;oBACX,KAAK,EAAE,IAAI,CAAC,IAAI;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;oBACvD,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;;AAIH,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAChE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAClD,MAAM,EAAE,GAA4B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,IAAI,KAAK,GAA8B,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,yBAAyB;QACzB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,qCAAqC;QACrC,IAAI,KAAK,KAAK,MAAM;YAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aACzC,IAAI,KAAK,KAAK,OAAO;YAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;aAChD,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;;YACxE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7C,CAAC"}
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH,0EAA0E;AAC1E,eAAO,MAAM,8BAA8B,0BAA0B,CAAC;AACtE,mEAAmE;AACnE,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,uDAAuD;AACvD,eAAO,MAAM,yBAAyB,MAAM,CAAC;
|
|
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
|