deuk-agent-flow 5.0.2 → 5.0.7

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 (102) hide show
  1. package/CHANGELOG.ko.md +45 -0
  2. package/CHANGELOG.md +48 -0
  3. package/bundled/deuk-agent-flow.vsix +0 -0
  4. package/core-rules/AGENTS.md +5 -5
  5. package/package.json +20 -2
  6. package/scripts/bundle-vscode-vsix.ts +1 -1
  7. package/scripts/cli-args.ts +46 -1
  8. package/scripts/cli-context-commands.ts +35 -0
  9. package/scripts/cli-init-claude.ts +179 -0
  10. package/scripts/cli-init-commands.ts +21 -8
  11. package/scripts/cli-init-core.ts +89 -0
  12. package/scripts/cli-init-instructions.ts +489 -0
  13. package/scripts/cli-init-migrate.ts +504 -0
  14. package/scripts/cli-init-workspace.ts +63 -0
  15. package/scripts/cli-locales.ts +85 -0
  16. package/scripts/cli-skill-commands.ts +3 -1
  17. package/scripts/cli-ticket-commands.ts +68 -2
  18. package/scripts/cli-ticket-docmeta.ts +103 -0
  19. package/scripts/cli-ticket-document.ts +153 -0
  20. package/scripts/cli-ticket-evidence.ts +312 -0
  21. package/scripts/cli-ticket-home.ts +449 -0
  22. package/scripts/cli-ticket-index.ts +8 -0
  23. package/scripts/cli-ticket-scan.ts +102 -0
  24. package/scripts/cli-ticket-surface.ts +56 -0
  25. package/scripts/cli.ts +10 -1
  26. package/scripts/oss-prepack.js +32 -0
  27. package/scripts/out/scripts/bundle-vscode-vsix.js +68 -0
  28. package/scripts/out/scripts/bundle-vscode-vsix.js.map +1 -0
  29. package/scripts/out/scripts/cli-args.js +411 -0
  30. package/scripts/out/scripts/cli-args.js.map +1 -0
  31. package/scripts/out/scripts/cli-context-commands.js +31 -0
  32. package/scripts/out/scripts/cli-context-commands.js.map +1 -0
  33. package/scripts/out/scripts/cli-init-claude.js +176 -0
  34. package/scripts/out/scripts/cli-init-claude.js.map +1 -0
  35. package/scripts/out/scripts/cli-init-commands.js +98 -0
  36. package/scripts/out/scripts/cli-init-commands.js.map +1 -0
  37. package/scripts/out/scripts/cli-init-core.js +89 -0
  38. package/scripts/out/scripts/cli-init-core.js.map +1 -0
  39. package/scripts/out/scripts/cli-init-instructions.js +460 -0
  40. package/scripts/out/scripts/cli-init-instructions.js.map +1 -0
  41. package/scripts/out/scripts/cli-init-logic.js +41 -0
  42. package/scripts/out/scripts/cli-init-logic.js.map +1 -0
  43. package/scripts/out/scripts/cli-init-migrate.js +497 -0
  44. package/scripts/out/scripts/cli-init-migrate.js.map +1 -0
  45. package/scripts/out/scripts/cli-init-workspace.js +57 -0
  46. package/scripts/out/scripts/cli-init-workspace.js.map +1 -0
  47. package/scripts/out/scripts/cli-locales.js +83 -0
  48. package/scripts/out/scripts/cli-locales.js.map +1 -0
  49. package/scripts/out/scripts/cli-prompts.js +101 -0
  50. package/scripts/out/scripts/cli-prompts.js.map +1 -0
  51. package/scripts/out/scripts/cli-rule-compiler.js +121 -0
  52. package/scripts/out/scripts/cli-rule-compiler.js.map +1 -0
  53. package/scripts/out/scripts/cli-skill-commands.js +708 -0
  54. package/scripts/out/scripts/cli-skill-commands.js.map +1 -0
  55. package/scripts/out/scripts/cli-telemetry-commands.js +604 -0
  56. package/scripts/out/scripts/cli-telemetry-commands.js.map +1 -0
  57. package/scripts/out/scripts/cli-ticket-command-shared.js +2 -0
  58. package/scripts/out/scripts/cli-ticket-command-shared.js.map +1 -0
  59. package/scripts/out/scripts/cli-ticket-commands.js +3538 -0
  60. package/scripts/out/scripts/cli-ticket-commands.js.map +1 -0
  61. package/scripts/out/scripts/cli-ticket-docmeta.js +90 -0
  62. package/scripts/out/scripts/cli-ticket-docmeta.js.map +1 -0
  63. package/scripts/out/scripts/cli-ticket-document.js +121 -0
  64. package/scripts/out/scripts/cli-ticket-document.js.map +1 -0
  65. package/scripts/out/scripts/cli-ticket-evidence.js +286 -0
  66. package/scripts/out/scripts/cli-ticket-evidence.js.map +1 -0
  67. package/scripts/out/scripts/cli-ticket-home.js +440 -0
  68. package/scripts/out/scripts/cli-ticket-home.js.map +1 -0
  69. package/scripts/out/scripts/cli-ticket-index.js +280 -0
  70. package/scripts/out/scripts/cli-ticket-index.js.map +1 -0
  71. package/scripts/out/scripts/cli-ticket-migration.js +261 -0
  72. package/scripts/out/scripts/cli-ticket-migration.js.map +1 -0
  73. package/scripts/out/scripts/cli-ticket-parser.js +90 -0
  74. package/scripts/out/scripts/cli-ticket-parser.js.map +1 -0
  75. package/scripts/out/scripts/cli-ticket-scan.js +93 -0
  76. package/scripts/out/scripts/cli-ticket-scan.js.map +1 -0
  77. package/scripts/out/scripts/cli-ticket-surface.js +53 -0
  78. package/scripts/out/scripts/cli-ticket-surface.js.map +1 -0
  79. package/scripts/out/scripts/cli-usage-commands.js +310 -0
  80. package/scripts/out/scripts/cli-usage-commands.js.map +1 -0
  81. package/scripts/out/scripts/cli-utils.js +1544 -0
  82. package/scripts/out/scripts/cli-utils.js.map +1 -0
  83. package/scripts/out/scripts/cli.js +705 -0
  84. package/scripts/out/scripts/cli.js.map +1 -0
  85. package/scripts/out/scripts/lint-md.js +238 -0
  86. package/scripts/out/scripts/lint-md.js.map +1 -0
  87. package/scripts/out/scripts/lint-rules.js +193 -0
  88. package/scripts/out/scripts/lint-rules.js.map +1 -0
  89. package/scripts/out/scripts/merge-logic.js +38 -0
  90. package/scripts/out/scripts/merge-logic.js.map +1 -0
  91. package/scripts/out/scripts/plan-parser.js +52 -0
  92. package/scripts/out/scripts/plan-parser.js.map +1 -0
  93. package/scripts/out/scripts/ticket-machine.js +94 -0
  94. package/scripts/out/scripts/ticket-machine.js.map +1 -0
  95. package/scripts/out/scripts/ticket-workflow.js +498 -0
  96. package/scripts/out/scripts/ticket-workflow.js.map +1 -0
  97. package/scripts/ticket-machine.ts +99 -0
  98. package/scripts/ticket-workflow.ts +544 -0
  99. package/templates/skills/role-closer/SKILL.md +27 -0
  100. package/templates/skills/role-implementer/SKILL.md +30 -0
  101. package/templates/skills/role-planner/SKILL.md +29 -0
  102. package/templates/skills/role-qa-verifier/SKILL.md +30 -0
@@ -0,0 +1,83 @@
1
+ import { resolveDocsLanguage } from "./cli-utils.js";
2
+ const CLI_LOCALES = {
3
+ en: {
4
+ "prompts.init.heading": "DeukAgentFlow init — let's configure your workspace.",
5
+ "prompts.init.workspaceKind": "What kind of workspace is this?",
6
+ "prompts.init.noManagedSurface": "No managed surface file found — will create with markers.",
7
+ "prompts.init.missingMarkers": "Managed surface file exists without managed markers — will append a managed block.",
8
+ "prompts.init.summary.workspaceKind": "Workspace Kind: {{value}}",
9
+ "prompts.init.summary.technicalSurface": "Technical Surface: {{value}}",
10
+ "prompts.init.summary.aiClients": "AI Clients: {{value}}",
11
+ "prompts.init.summary.allSupportedClients": "all supported clients",
12
+ "prompts.init.summary.docsLanguage": "Docs Language: {{value}}",
13
+ "prompts.init.summary.workflowMode": "Workflow Mode: {{value}}",
14
+ "prompts.init.summary.shareTickets": "Share Tickets: {{value}}",
15
+ "prompts.init.summary.shareYes": "Yes (Shared)",
16
+ "prompts.init.summary.shareNo": "No (Private)",
17
+ "prompts.init.summary.contextMcp": "Deuk AgentContext MCP: hidden during init",
18
+ "prompts.init.summary.externalSync": "External Sync: {{value}}",
19
+ "prompts.init.summary.enabled": "Enabled",
20
+ "prompts.init.summary.disabled": "Disabled",
21
+ "prompts.init.summary.syncUrl": "Sync URL: {{value}}",
22
+ "prompts.init.summary.surfaceMode": "Managed Surface: {{value}}",
23
+ "ticket.validation.selfServeRecipe": "Use the self-serve recipe from the printed rules surface: do not ask the user, call help, or search for templates.",
24
+ "ticket.phase.fillSlots": "First fill these slots in the ticket file:",
25
+ "init.migrate.convertedMarkers": "[MIGRATE] Converted legacy HTML markers to heading-based format in managed surface file",
26
+ "init.migrate.backupSaved": "[MIGRATE] Backup saved as {{path}}",
27
+ "init.migrate.dryRunConvertedMarkers": "[DRY-RUN] Would convert legacy HTML markers to heading-based format in managed surface file",
28
+ "init.migrate.replaceLegacyHtmlBlock": "[MIGRATE] {{action}} legacy HTML managed block: {{path}}",
29
+ "init.migrate.replaceLegacyPointer": "[MIGRATE] {{action}} legacy managed pointer: {{path}}",
30
+ "init.cleanup.strippedBlock": "stripped generated managed block",
31
+ "init.cleanup.removedPointer": "removed generated managed pointer",
32
+ "init.cleanup.strippedPointer": "stripped generated managed pointer",
33
+ "init.cleanup.message": "[CLEANUP] {{action}}: {{path}}",
34
+ "init.cleanup.summary": "[SUMMARY] {{action}} {{count}} nested generated managed pointer surface(s) under {{workspace}}.",
35
+ "lint.rules.missingCore": "core rules file not found",
36
+ "lint.rules.printsCurrentBody": "Core rules must state that deuk-agent-flow rules prints the current core rules body."
37
+ },
38
+ ko: {
39
+ "prompts.init.heading": "DeukAgentFlow init — 워크스페이스를 설정합니다.",
40
+ "prompts.init.workspaceKind": "이 워크스페이스 유형은 무엇인가요?",
41
+ "prompts.init.noManagedSurface": "관리 표면 파일이 없어 마커와 함께 생성합니다.",
42
+ "prompts.init.missingMarkers": "관리 표면 파일에 관리 마커가 없어 관리 블록을 추가합니다.",
43
+ "prompts.init.summary.workspaceKind": "워크스페이스 유형: {{value}}",
44
+ "prompts.init.summary.technicalSurface": "기술 표면: {{value}}",
45
+ "prompts.init.summary.aiClients": "AI 클라이언트: {{value}}",
46
+ "prompts.init.summary.allSupportedClients": "지원되는 모든 클라이언트",
47
+ "prompts.init.summary.docsLanguage": "문서 언어: {{value}}",
48
+ "prompts.init.summary.workflowMode": "워크플로우 모드: {{value}}",
49
+ "prompts.init.summary.shareTickets": "티켓 공유: {{value}}",
50
+ "prompts.init.summary.shareYes": "예 (공유)",
51
+ "prompts.init.summary.shareNo": "아니오 (개인)",
52
+ "prompts.init.summary.contextMcp": "Deuk AgentContext MCP: init 중 숨김",
53
+ "prompts.init.summary.externalSync": "외부 동기화: {{value}}",
54
+ "prompts.init.summary.enabled": "활성화",
55
+ "prompts.init.summary.disabled": "비활성화",
56
+ "prompts.init.summary.syncUrl": "동기화 URL: {{value}}",
57
+ "prompts.init.summary.surfaceMode": "관리 표면: {{value}}",
58
+ "ticket.validation.selfServeRecipe": "출력된 rules surface의 self-serve 레시피를 사용하세요. 사용자에게 다시 묻거나 help를 호출하거나 템플릿을 검색하지 마세요.",
59
+ "ticket.phase.fillSlots": "먼저 티켓 파일에 다음 슬롯을 채우세요:",
60
+ "init.migrate.convertedMarkers": "[MIGRATE] legacy HTML 마커를 heading 기반 관리 표면 형식으로 변환했습니다",
61
+ "init.migrate.backupSaved": "[MIGRATE] 백업 저장: {{path}}",
62
+ "init.migrate.dryRunConvertedMarkers": "[DRY-RUN] legacy HTML 마커를 heading 기반 관리 표면 형식으로 변환할 예정입니다",
63
+ "init.migrate.replaceLegacyHtmlBlock": "[MIGRATE] legacy HTML 관리 블록 {{action}}: {{path}}",
64
+ "init.migrate.replaceLegacyPointer": "[MIGRATE] legacy 관리 포인터 {{action}}: {{path}}",
65
+ "init.cleanup.strippedBlock": "생성된 관리 블록 제거",
66
+ "init.cleanup.removedPointer": "생성된 관리 포인터 삭제",
67
+ "init.cleanup.strippedPointer": "생성된 관리 포인터 제거",
68
+ "init.cleanup.message": "[CLEANUP] {{action}}: {{path}}",
69
+ "init.cleanup.summary": "[SUMMARY] {{workspace}} 아래 중첩 생성 관리 포인터 표면 {{count}}개를 {{action}}.",
70
+ "lint.rules.missingCore": "core rules 파일을 찾을 수 없습니다",
71
+ "lint.rules.printsCurrentBody": "Core rules는 deuk-agent-flow rules가 현재 core rules 본문을 출력한다고 명시해야 합니다."
72
+ }
73
+ };
74
+ export function resolveCliLocale(value = "auto", env = process.env) {
75
+ return resolveDocsLanguage(value, env);
76
+ }
77
+ export function cliText(key, { locale = "auto", env = process.env, vars = {} } = {}) {
78
+ const resolvedLocale = resolveCliLocale(locale, env);
79
+ const dictionary = CLI_LOCALES[resolvedLocale] || CLI_LOCALES.en;
80
+ const template = dictionary[key] || CLI_LOCALES.en[key] || key;
81
+ return String(template).replace(/\{\{(\w+)\}\}/g, (_match, name) => String(vars[name] ?? ""));
82
+ }
83
+ //# sourceMappingURL=cli-locales.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-locales.js","sourceRoot":"","sources":["../../cli-locales.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { createInterface } from "readline";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import { AGENT_TOOLS, WORKFLOW_MODE_EXECUTE, WORKSPACE_KINDS, makePath, normalizeWorkflowMode, resolveDocsLanguage } from "./cli-utils.js";
4
+ import { cliText } from "./cli-locales.js";
5
+ export async function ask(rl, question) {
6
+ return new Promise((resolve) => rl.question(question, resolve));
7
+ }
8
+ export async function askYesNo(question, defaultYes = true) {
9
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
10
+ try {
11
+ const ans = (await ask(rl, question + (defaultYes ? " [Y/n]: " : " [y/N]: "))).trim().toLowerCase();
12
+ if (!ans)
13
+ return defaultYes;
14
+ return ans === "y" || ans === "yes";
15
+ }
16
+ finally {
17
+ rl.close();
18
+ }
19
+ }
20
+ export async function selectOne(rl, prompt, choices) {
21
+ console.log("\n" + prompt);
22
+ choices.forEach((c, i) => console.log(` ${i + 1}) ${c.label}`));
23
+ while (true) {
24
+ const ans = (await ask(rl, ` Choice [1-${choices.length}]: `)).trim();
25
+ const idx = parseInt(ans, 10) - 1;
26
+ if (idx >= 0 && idx < choices.length)
27
+ return choices[idx].value;
28
+ }
29
+ }
30
+ export async function selectMany(rl, prompt, choices) {
31
+ console.log("\n" + prompt + " (comma-separated numbers, or 'all')");
32
+ choices.forEach((c, i) => console.log(` ${i + 1}) ${c.label}`));
33
+ while (true) {
34
+ const ans = (await ask(rl, ` Choices: `)).trim().toLowerCase();
35
+ if (ans === "all" || ans === "")
36
+ return choices.map((c) => c.value);
37
+ const parts = ans.split(/[,\s]+/).map((s) => parseInt(s, 10) - 1);
38
+ if (parts.every((i) => i >= 0 && i < choices.length))
39
+ return parts.map((i) => choices[i].value);
40
+ }
41
+ }
42
+ function hasAny(cwd, names) {
43
+ return names.some((name) => existsSync(makePath(cwd, name)));
44
+ }
45
+ export function inferInitDefaults(cwd, opts = {}) {
46
+ const packageJsonPath = makePath(cwd, "package.json");
47
+ const packageJson = existsSync(packageJsonPath)
48
+ ? readFileSync(packageJsonPath, "utf8")
49
+ : "";
50
+ const stack = opts.stack
51
+ || (hasAny(cwd, ["pyproject.toml", "requirements.txt", "notebooks"]) ? "data" : null)
52
+ || (hasAny(cwd, ["Dockerfile", "docker-compose.yml", "docker-compose.yaml", "k8s", "terraform"]) ? "infra" : null)
53
+ || (hasAny(cwd, ["Cargo.toml", "go.mod", "pom.xml", "build.gradle"]) ? "backend" : null)
54
+ || (packageJson && /"(@vitejs\/|vite|next|react|vue|svelte|astro)"/i.test(packageJson) ? "web" : null)
55
+ || (packageJson ? "backend" : null)
56
+ || "none";
57
+ const tools = AGENT_TOOLS.map((tool) => tool.value);
58
+ return {
59
+ stack,
60
+ agentTools: opts.agentTools ?? tools,
61
+ docsLanguage: resolveDocsLanguage(opts.docsLanguage ?? "auto"),
62
+ workflowMode: normalizeWorkflowMode(opts.workflowMode ?? opts.workflow ?? opts.approval ?? WORKFLOW_MODE_EXECUTE),
63
+ shareTickets: opts.shareTickets ?? false,
64
+ contextMcp: opts.contextMcp ?? "skip",
65
+ remoteSync: opts.remoteSync ?? false,
66
+ pipelineUrl: opts.pipelineUrl || ""
67
+ };
68
+ }
69
+ export async function runInteractive(opts) {
70
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
71
+ try {
72
+ const locale = resolveDocsLanguage(opts.docsLanguage ?? "auto");
73
+ console.log(`\n${cliText("prompts.init.heading", { locale })}\n`);
74
+ const workspaceKind = await selectOne(rl, cliText("prompts.init.workspaceKind", { locale }), WORKSPACE_KINDS);
75
+ const defaults = inferInitDefaults(opts.cwd, opts);
76
+ opts.workspaceKind = workspaceKind;
77
+ opts.kind = workspaceKind;
78
+ opts.stack = defaults.stack;
79
+ opts.agentTools = defaults.agentTools;
80
+ opts.docsLanguage = defaults.docsLanguage;
81
+ opts.workflowMode = defaults.workflowMode;
82
+ opts.shareTickets = defaults.shareTickets;
83
+ opts.contextMcp = defaults.contextMcp;
84
+ opts.remoteSync = defaults.remoteSync;
85
+ opts.pipelineUrl = defaults.pipelineUrl;
86
+ console.log(`\n ${cliText("prompts.init.summary.workspaceKind", { locale, vars: { value: workspaceKind } })}`);
87
+ console.log(` ${cliText("prompts.init.summary.technicalSurface", { locale, vars: { value: opts.stack } })}`);
88
+ console.log(` ${cliText("prompts.init.summary.aiClients", { locale, vars: { value: opts.agentTools.join(", ") || cliText("prompts.init.summary.allSupportedClients", { locale }) } })}`);
89
+ console.log(` ${cliText("prompts.init.summary.docsLanguage", { locale, vars: { value: opts.docsLanguage } })}`);
90
+ console.log(` ${cliText("prompts.init.summary.workflowMode", { locale, vars: { value: opts.workflowMode } })}`);
91
+ console.log(` ${cliText("prompts.init.summary.shareTickets", { locale, vars: { value: opts.shareTickets ? cliText("prompts.init.summary.shareYes", { locale }) : cliText("prompts.init.summary.shareNo", { locale }) } })}`);
92
+ console.log(` ${cliText("prompts.init.summary.contextMcp", { locale })}`);
93
+ console.log(` ${cliText("prompts.init.summary.externalSync", { locale, vars: { value: opts.remoteSync ? cliText("prompts.init.summary.enabled", { locale }) : cliText("prompts.init.summary.disabled", { locale }) } })}`);
94
+ if (opts.remoteSync)
95
+ console.log(` ${cliText("prompts.init.summary.syncUrl", { locale, vars: { value: opts.pipelineUrl } })}\n`);
96
+ }
97
+ finally {
98
+ rl.close();
99
+ }
100
+ }
101
+ //# sourceMappingURL=cli-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-prompts.js","sourceRoot":"","sources":["../../cli-prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ import { basename, resolve, dirname, isAbsolute } from "path";
2
+ import { existsSync, readdirSync, readFileSync } from "fs";
3
+ import { DEUK_ROOT_DIR, makePath, parseFrontMatter } from "./cli-utils.js";
4
+ import YAML from "yaml";
5
+ /**
6
+ * Scans directories for rule markdown files, evaluates their Frontmatter conditions,
7
+ * and compiles a single rule string for injection.
8
+ */
9
+ export function compileDynamicRules(cwd, bundleRoot, targetFileName) {
10
+ const bundleRulesDir = makePath(bundleRoot, "templates", "rules.d");
11
+ const localRulesDir = makePath(cwd, DEUK_ROOT_DIR, "project-rules");
12
+ const allRuleFiles = [];
13
+ // 1. Gather global rules
14
+ if (existsSync(bundleRulesDir)) {
15
+ readdirSync(bundleRulesDir).forEach(f => {
16
+ if (f.endsWith(".md"))
17
+ allRuleFiles.push(makePath(bundleRulesDir, f));
18
+ });
19
+ }
20
+ // 2. Gather local domain rules
21
+ if (existsSync(localRulesDir)) {
22
+ readdirSync(localRulesDir).forEach(f => {
23
+ if (f.endsWith(".md"))
24
+ allRuleFiles.push(makePath(localRulesDir, f));
25
+ });
26
+ }
27
+ let compiledContent = "";
28
+ for (const filePath of allRuleFiles) {
29
+ try {
30
+ const rawContent = readFileSync(filePath, "utf8");
31
+ const { meta, content } = parseFrontMatter(rawContent);
32
+ // Check if this rule is intended for the current target file (e.g., AGENTS.md)
33
+ if (meta.inject_target && !meta.inject_target.includes(targetFileName)) {
34
+ continue;
35
+ }
36
+ // Evaluate conditions
37
+ let shouldInclude = true;
38
+ if (meta.condition) {
39
+ shouldInclude = evaluateCondition(meta.condition, cwd);
40
+ }
41
+ if (shouldInclude) {
42
+ const sourceId = meta.id || basename(filePath);
43
+ compiledContent += `\n<!-- RULE MODULE: ${sourceId} -->\n`;
44
+ compiledContent += content.trim() + "\n";
45
+ }
46
+ }
47
+ catch (err) {
48
+ console.warn(`[WARNING] Skipping malformed rule file at ${filePath}:`, err.message);
49
+ continue;
50
+ }
51
+ }
52
+ return compiledContent.trim();
53
+ }
54
+ function normalizeProjects(projects, contextRoot) {
55
+ if (!Array.isArray(projects))
56
+ return [];
57
+ return projects
58
+ .filter(p => p && typeof p.path === "string")
59
+ .map(p => ({
60
+ ...p,
61
+ path: isAbsolute(p.path) ? resolve(p.path) : resolve(contextRoot, p.path)
62
+ }));
63
+ }
64
+ /**
65
+ * Attempts to locate and parse the DeukContext project registry from the workspace root.
66
+ * Current deployments store projects in ingest.yaml; config.yaml remains a legacy fallback.
67
+ */
68
+ function resolveDeukContextProjects(cwd) {
69
+ // Go up directories until we find a sibling DeukAgentContext folder, or hit root
70
+ let current = resolve(cwd);
71
+ while (current && current !== "/") {
72
+ const candidates = [
73
+ makePath(current, "DeukAgentContext", ".local", "ingest.yaml"),
74
+ makePath(current, "DeukAgentContext", ".local", "config.yaml"),
75
+ makePath(current, "DeukContext", ".local", "ingest.yaml"),
76
+ makePath(current, "DeukContext", ".local", "config.yaml") // Legacy fallback
77
+ ];
78
+ for (const candidatePath of candidates) {
79
+ if (existsSync(candidatePath)) {
80
+ try {
81
+ const raw = readFileSync(candidatePath, "utf8");
82
+ const parsed = YAML.parse(raw);
83
+ const contextRoot = dirname(dirname(candidatePath));
84
+ const projects = normalizeProjects(parsed?.projects, contextRoot);
85
+ if (projects.length > 0)
86
+ return projects;
87
+ }
88
+ catch (e) {
89
+ console.error(`Failed to parse DeukContext registry at ${candidatePath}:`, e);
90
+ return null;
91
+ }
92
+ }
93
+ }
94
+ const parent = dirname(current);
95
+ if (parent === current)
96
+ break;
97
+ current = parent;
98
+ }
99
+ return null;
100
+ }
101
+ /**
102
+ * Evaluates Frontmatter conditions to determine if a rule should be included.
103
+ */
104
+ function evaluateCondition(condition, cwd) {
105
+ if (!condition)
106
+ return true;
107
+ // Example: condition: { mcp: "deuk-agent-context" }
108
+ if (condition.mcp === "deuk-agent-context" || condition.mcp === "deuk_agent_context") {
109
+ const projects = resolveDeukContextProjects(cwd);
110
+ if (!projects || projects.length === 0)
111
+ return false;
112
+ // Check if the current cwd is managed by DeukContext
113
+ const isManaged = projects.some(p => {
114
+ // If the project path is a prefix of cwd, it's managed
115
+ return cwd.startsWith(p.path);
116
+ });
117
+ return isManaged;
118
+ }
119
+ return true;
120
+ }
121
+ //# sourceMappingURL=cli-rule-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-rule-compiler.js","sourceRoot":"","sources":["../../cli-rule-compiler.ts"],"names":[],"mappings":"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"}