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,460 @@
1
+ import { dirname, basename } from "path";
2
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, unlinkSync, renameSync } from "fs";
3
+ import { DEUK_ROOT_DIR, SPOKE_REGISTRY, makePath, resolvePackageRoot, resolveUserHome, toFileUri, toRepoRelativePath } from "./cli-utils.js";
4
+ import { CANONICAL_INIT_CLEANUP_PATHS, GLOBAL_POINTER_BEGIN_PREFIX, GLOBAL_POINTER_END, hashManagedContent, mergeManagedBlock, safeReadText, splitManagedBlock, wrapManagedBlock } from "./cli-init-core.js";
5
+ import { upsertClaudeUserPromptSubmitHook } from "./cli-init-claude.js";
6
+ import { ensureTicketDirAndGitignore } from "./cli-init-logic.js";
7
+ import { resolveHomeTicketDirForWorkspace } from "./cli-ticket-home.js";
8
+ import { normalizeTicketPaths } from "./cli-ticket-migration.js";
9
+ import { rebuildTicketIndexFromTopicFilesIfNeeded } from "./cli-ticket-parser.js";
10
+ import { syncActiveTicketId, writeTicketIndexJson } from "./cli-ticket-index.js";
11
+ import { cleanupGeneratedAgentPointerSurface, cleanupNestedGeneratedAgentPointers, ensureWritableDirectory, migrateDeukRootDir, migrateHtmlMarkersToHeadings, migrateLegacyStructure, removeLegacyPaths, removeLocalAgentSurfaces, removeLocalSkillCopies, removeRuntimeTemplateCopies, sameFileContent } from "./cli-init-migrate.js";
12
+ import { ensureSystemSkills } from "./cli-skill-commands.js";
13
+ function readWorkspaceDeukContextMcpUrl(cwd) {
14
+ const mcpPath = makePath(cwd, ".mcp.json");
15
+ if (!existsSync(mcpPath))
16
+ return "";
17
+ try {
18
+ const config = JSON.parse(readFileSync(mcpPath, "utf8"));
19
+ const servers = config.mcpServers || config.servers || {};
20
+ const deukContextServer = servers["deuk-agent-context"] || servers["deuk_agent_context"];
21
+ return String(deukContextServer?.url || "").trim();
22
+ }
23
+ catch (err) {
24
+ if (process.env.DEBUG)
25
+ console.warn(`[DEBUG] Failed to parse ${mcpPath}: ${err.message}`);
26
+ return "";
27
+ }
28
+ }
29
+ function upsertCodexMcpTomlUrl(existingContent, nextUrl) {
30
+ const sectionHeader = "[mcp_servers.deuk_agent_context]";
31
+ const normalizedUrlLine = `url = ${JSON.stringify(nextUrl)}`;
32
+ const content = String(existingContent || "").trimEnd();
33
+ const sectionPattern = /(^|\n)\[mcp_servers\.deuk_agent_context\]\n([\s\S]*?)(?=\n\[[^\]]+\]|\s*$)/;
34
+ const sectionMatch = content.match(sectionPattern);
35
+ if (!sectionMatch) {
36
+ const prefix = content ? `${content}\n\n` : "";
37
+ return `${prefix}${sectionHeader}\n${normalizedUrlLine}\n`;
38
+ }
39
+ const sectionBody = sectionMatch[2];
40
+ const nextSectionBody = /^url\s*=.*$/m.test(sectionBody)
41
+ ? sectionBody.replace(/^url\s*=.*$/m, normalizedUrlLine)
42
+ : `${sectionBody.trimEnd()}${sectionBody.trimEnd() ? "\n" : ""}${normalizedUrlLine}`;
43
+ return `${content.slice(0, sectionMatch.index)}${sectionMatch[1]}${sectionHeader}\n${nextSectionBody}${content.slice(sectionMatch.index + sectionMatch[0].length)}\n`;
44
+ }
45
+ export function syncCodexMcpEndpointFromWorkspace(cwd, opts = {}) {
46
+ const url = readWorkspaceDeukContextMcpUrl(cwd);
47
+ if (!url)
48
+ return { changed: false, url: "" };
49
+ const homeDir = resolveUserHome(opts);
50
+ const dryRun = Boolean(opts.dryRun);
51
+ const codexConfigPath = makePath(homeDir, ".codex", "config.toml");
52
+ const existingContent = existsSync(codexConfigPath) ? readFileSync(codexConfigPath, "utf8") : "";
53
+ const nextContent = upsertCodexMcpTomlUrl(existingContent, url);
54
+ const changed = existingContent !== nextContent;
55
+ if (!changed)
56
+ return { changed: false, url, path: codexConfigPath };
57
+ if (!dryRun) {
58
+ mkdirSync(dirname(codexConfigPath), { recursive: true });
59
+ writeFileSync(codexConfigPath, nextContent, "utf8");
60
+ }
61
+ console.log(`[MIGRATE] ${dryRun ? "Would sync" : "Synced"} Codex MCP endpoint: deuk_agent_context -> ${url}`);
62
+ return { changed: true, url, path: codexConfigPath };
63
+ }
64
+ function canonicalizeLegacyDeukAgentText(content, bundleRoot) {
65
+ const coreRulesPath = makePath(bundleRoot, "core-rules", "AGENTS.md");
66
+ const coreRulesUri = toFileUri(coreRulesPath);
67
+ return String(content || "")
68
+ .replace(/DeukAgentRules/g, "DeukAgentFlow")
69
+ .replace(/deuk-agent-rule/g, "deuk-agent-flow")
70
+ .replace(/Deuk Agent Rules/g, "Deuk Agent Flow")
71
+ .replace(/\bdeuk-agent-flow rules path --path-only\b/g, "deuk-agent-flow rules")
72
+ .replace(/file:\/\/[^)\s>\]"'`]+\/DeukAgentRules\/core-rules\/AGENTS\.md/g, coreRulesUri)
73
+ .replace(/\/home\/joy\/workspace\/DeukAgentRules\/core-rules\/AGENTS\.md/g, coreRulesPath)
74
+ .replace(/file:\/\/[^)\s>\]"'`]+\/deuk-agent-flow\/core-rules\/AGENTS\.md/g, coreRulesUri)
75
+ .replace(/(?:[a-zA-Z]:[\\/]|(?:\/|\\\\)[^\n\\/]+)[^\n)\s>\]"'`]+\/deuk-agent-flow\/core-rules\/AGENTS\.md/g, coreRulesPath);
76
+ }
77
+ function normalizeExistingSpokeContent(existingContent, managedContent, bundleRoot) {
78
+ const current = String(existingContent || "");
79
+ if (!current.trim())
80
+ return current;
81
+ if (isGeneratedDeukPointer(current))
82
+ return "";
83
+ const normalizedManaged = String(managedContent || "").trim();
84
+ const canonicalize = (value) => canonicalizeLegacyDeukAgentText(value, bundleRoot).trim();
85
+ if (canonicalize(current) === normalizedManaged)
86
+ return "";
87
+ const currentBlock = splitManagedBlock(current);
88
+ if (!currentBlock)
89
+ return current;
90
+ const before = canonicalize(currentBlock.before) === normalizedManaged ? "" : currentBlock.before;
91
+ const after = canonicalize(currentBlock.after) === normalizedManaged ? "" : currentBlock.after;
92
+ return [before, wrapManagedBlock(managedContent), after].filter(Boolean).join("\n\n").trimEnd() + "\n";
93
+ }
94
+ export function canonicalizeTextFile(absPath, cwd, bundleRoot, dryRun, label) {
95
+ if (!existsSync(absPath))
96
+ return false;
97
+ const before = readFileSync(absPath, "utf8");
98
+ const after = canonicalizeLegacyDeukAgentText(before, bundleRoot);
99
+ if (before === after)
100
+ return false;
101
+ if (!dryRun)
102
+ writeFileSync(absPath, after, "utf8");
103
+ console.log(`[MIGRATE] ${dryRun ? "Would canonicalize" : "Canonicalized"} ${label}: ${toRepoRelativePath(cwd, absPath)}`);
104
+ return true;
105
+ }
106
+ export function splitProjectDoc(content) {
107
+ const marker = "--- project-doc ---";
108
+ const idx = String(content || "").indexOf(marker);
109
+ if (idx === -1)
110
+ return { pointer: content, projectDoc: "" };
111
+ return {
112
+ pointer: content.slice(0, idx),
113
+ projectDoc: content.slice(idx).trimStart()
114
+ };
115
+ }
116
+ export function isGeneratedDeukPointer(content) {
117
+ const src = String(content || "");
118
+ const hasHeader = /Managed by DeukAgent(?:Rules|Flow)/.test(src) || /# Deuk Agent Rules\b|# Deuk Agent Flow\b|# DeukAgentFlow\b/.test(src);
119
+ const hasCoreRulesRef = /Core rules (?:are at|path is resolved by|are printed by):/i.test(src) || /deuk-agent-flow rules/i.test(src);
120
+ if (!hasHeader || !hasCoreRulesRef)
121
+ return false;
122
+ // Old format required "thin bootstrap" line; new format omits it — both are valid generated pointers
123
+ return true;
124
+ }
125
+ export function canonicalizeGeneratedCommandReferences(cwd, bundleRoot, dryRun) {
126
+ const targets = [
127
+ makePath(cwd, "AGENTS.md"),
128
+ makePath(cwd, "PROJECT_RULE.md"),
129
+ makePath(cwd, DEUK_ROOT_DIR, "PROJECT_RULE.md"),
130
+ makePath(cwd, "docs", "project", "AGENTS.md"),
131
+ makePath(cwd, ".github", "copilot-instructions.md"),
132
+ makePath(cwd, ".codex", "AGENTS.md"),
133
+ ];
134
+ for (const target of targets) {
135
+ canonicalizeTextFile(target, cwd, bundleRoot, dryRun, "legacy command reference");
136
+ }
137
+ }
138
+ export function buildGlobalCodexInstructions() {
139
+ return buildGlobalAgentPointer();
140
+ }
141
+ export function buildGlobalClaudeInstructions() {
142
+ return buildGlobalAgentPointer();
143
+ }
144
+ function extractMarkdownHeadingSection(content = "", heading = "") {
145
+ const normalizeHeading = value => String(value || "")
146
+ .trim()
147
+ .replace(/^#+\s*/, "")
148
+ .replace(/^\d+[\).\s-]+/, "")
149
+ .toLowerCase();
150
+ const target = normalizeHeading(heading);
151
+ if (!target)
152
+ return "";
153
+ const lines = String(content || "").split(/\r?\n/);
154
+ let start = -1;
155
+ let level = 0;
156
+ for (const [index, line] of lines.entries()) {
157
+ const match = line.match(/^(#{1,6})\s+(.+?)\s*$/);
158
+ if (!match)
159
+ continue;
160
+ if (start === -1) {
161
+ if (normalizeHeading(match[2]) === target) {
162
+ start = index;
163
+ level = match[1].length;
164
+ }
165
+ continue;
166
+ }
167
+ if (match[1].length <= level) {
168
+ return lines.slice(start, index).join("\n").trim();
169
+ }
170
+ }
171
+ return start === -1 ? "" : lines.slice(start).join("\n").trim();
172
+ }
173
+ function readCoreRulesSection(bundleRoot, heading) {
174
+ const rulesPath = makePath([bundleRoot, "core-rules", "AGENTS.md"]);
175
+ if (!existsSync(rulesPath))
176
+ return "";
177
+ return extractMarkdownHeadingSection(readFileSync(rulesPath, "utf8"), heading);
178
+ }
179
+ function readCliSurfaceDocument(bundleRoot, name) {
180
+ const surfacePath = makePath(bundleRoot, "docs", "cli-surfaces", `${name}.md`);
181
+ if (!existsSync(surfacePath)) {
182
+ throw new Error(`CLI surface document not found: ${surfacePath}`);
183
+ }
184
+ return readFileSync(surfacePath, "utf8");
185
+ }
186
+ function renderCliSurfaceDocument(bundleRoot, name, replacements = {}) {
187
+ let content = readCliSurfaceDocument(bundleRoot, name);
188
+ content = content.replace(/\{\{CORE:([^}]+)\}\}/g, (_match, heading) => readCoreRulesSection(bundleRoot, String(heading || "").trim()).trimEnd());
189
+ for (const [key, value] of Object.entries(replacements)) {
190
+ content = content.replaceAll(`{{${key}}}`, String(value ?? ""));
191
+ }
192
+ return content.trimEnd();
193
+ }
194
+ function buildGlobalAgentPointer(bundleRoot = resolvePackageRoot({ fromUrl: import.meta.url }), format = "markdown", agentId = "default") {
195
+ let body = "";
196
+ try {
197
+ body = renderCliSurfaceDocument(bundleRoot, `global-pointer-${agentId}`);
198
+ }
199
+ catch (e) {
200
+ body = renderCliSurfaceDocument(bundleRoot, "global-pointer");
201
+ }
202
+ if (format === "mdc") {
203
+ return `---
204
+ description: "DeukAgentFlow global pointer"
205
+ globs: ["**/*"]
206
+ alwaysApply: true
207
+ ---
208
+ ${body}`;
209
+ }
210
+ return body;
211
+ }
212
+ function splitMdcFrontMatter(content) {
213
+ const text = String(content || "");
214
+ if (!text.startsWith("---\n"))
215
+ return { frontMatter: "", body: text };
216
+ const endIdx = text.indexOf("\n---\n", 4);
217
+ if (endIdx === -1)
218
+ return { frontMatter: "", body: text };
219
+ return {
220
+ frontMatter: stripPathKeysFromFrontMatter(text.slice(0, endIdx + 5)).trimEnd(),
221
+ body: text.slice(endIdx + 5).trimStart()
222
+ };
223
+ }
224
+ function stripPathKeysFromFrontMatter(frontMatter) {
225
+ return String(frontMatter || "")
226
+ .split(/\r?\n/)
227
+ .filter(line => !/^\s*(path|absPath|absolutePath|relativePath|sourcePath|targetPath|workspacePath|rulesPath|ticketPath)\s*:/i.test(line))
228
+ .join("\n");
229
+ }
230
+ function wrapGlobalPointerBlock(content) {
231
+ const normalizedContent = String(content || "").trimEnd();
232
+ const { frontMatter, body } = splitMdcFrontMatter(normalizedContent);
233
+ const pointerBlock = [
234
+ `${GLOBAL_POINTER_BEGIN_PREFIX} ${hashManagedContent(normalizedContent)}`,
235
+ body.trimEnd(),
236
+ GLOBAL_POINTER_END
237
+ ].join("\n");
238
+ return frontMatter ? `${frontMatter}\n${pointerBlock}` : pointerBlock;
239
+ }
240
+ function stripGlobalPointerBlocks(content) {
241
+ let text = String(content || "");
242
+ // Strip <!-- deuk-agent-managed --> wrapped blocks (legacy)
243
+ let currentBlock = splitManagedBlock(text);
244
+ while (currentBlock) {
245
+ text = [currentBlock.before, currentBlock.after].filter(Boolean).join("\n\n").trim();
246
+ currentBlock = splitManagedBlock(text);
247
+ }
248
+ // Strip --- DEUK_AGENT_FLOW_BEGIN/END blocks
249
+ text = text.replace(/--- DEUK_AGENT_FLOW_BEGIN :[^\n]*\n[\s\S]*?--- DEUK_AGENT_FLOW_END\n?/g, "");
250
+ text = text.replace(/DEUK_AGENT_GLOBAL_POINTER_BEGIN[\s\S]*?DEUK_AGENT_GLOBAL_POINTER_END\n?/g, "");
251
+ text = text.replace(/^---\ndescription: "DeukAgentFlow global pointer"\nglobs: \["\*\*\/\*"\]\nalwaysApply: true\n---\n# DeukAgentFlow Global Pointer\n\nManaged by DeukAgentFlow\.\n\nRead this file first:\n[^\n]+\n\nKeep personal notes in the sibling `\.user` file, not in this managed pointer\.\n?/gm, "");
252
+ text = text.replace(/^# DeukAgentFlow Global Pointer\n\nManaged by DeukAgentFlow\.\n\nRead this file first:\n[^\n]+\n\nKeep personal notes in the sibling `\.user` file, not in this managed pointer\.\n?/gm, "");
253
+ text = text.replace(/^---\ndescription: "DeukAgentFlow global pointer"\nglobs: \["\*\*\/\*"\]\nalwaysApply: true\n---\n?/gm, "");
254
+ // Strip plain (tag-free) pointer blocks left by previous init versions
255
+ text = text.replace(/^# DeukAgentFlow Global Pointer\n[\s\S]*$/m, "");
256
+ return text.trim();
257
+ }
258
+ function mergeGlobalAgentPointer(existingContent, managedContent) {
259
+ const nextBlock = wrapGlobalPointerBlock(managedContent);
260
+ const current = String(existingContent || "");
261
+ const remainder = stripGlobalPointerBlocks(current);
262
+ return remainder ? `${nextBlock}\n\n${remainder}\n` : `${nextBlock}\n`;
263
+ }
264
+ function getGlobalAgentInstructionTargets(homeDir = resolveUserHome(), bundleRoot = resolvePackageRoot({ fromUrl: import.meta.url })) {
265
+ return [
266
+ {
267
+ id: "codex",
268
+ target: makePath(homeDir, ".codex", "AGENTS.md"),
269
+ content: buildGlobalAgentPointer(bundleRoot, "markdown", "codex")
270
+ },
271
+ {
272
+ id: "claude",
273
+ target: makePath(homeDir, ".claude", "CLAUDE.md"),
274
+ content: buildGlobalAgentPointer(bundleRoot, "markdown", "claude")
275
+ },
276
+ {
277
+ id: "gemini",
278
+ target: makePath(homeDir, ".gemini", "GEMINI.md"),
279
+ content: buildGlobalAgentPointer(bundleRoot, "markdown", "gemini")
280
+ },
281
+ {
282
+ id: "cursor",
283
+ target: makePath(homeDir, ".cursor", "rules", "deuk-agent.mdc"),
284
+ content: buildGlobalAgentPointer(bundleRoot, "mdc", "cursor")
285
+ },
286
+ {
287
+ id: "copilot",
288
+ target: makePath(homeDir, ".config", "Code", "User", "copilot-instructions.md"),
289
+ content: buildGlobalAgentPointer(bundleRoot, "markdown", "copilot")
290
+ },
291
+ {
292
+ id: "antigravity",
293
+ target: makePath(homeDir, ".config", "Antigravity", "User", "AGENTS.md"),
294
+ content: buildGlobalAgentPointer(bundleRoot, "markdown", "antigravity")
295
+ },
296
+ ];
297
+ }
298
+ function syncGlobalAgentInstructions(dryRun, bundleRoot = resolvePackageRoot({ fromUrl: import.meta.url }), homeDir = resolveUserHome()) {
299
+ for (const entry of getGlobalAgentInstructionTargets(homeDir, bundleRoot)) {
300
+ if (dryRun)
301
+ continue;
302
+ const nextContent = entry.content;
303
+ const existingContent = existsSync(entry.target) ? safeReadText(entry.target) : "";
304
+ const mergedContent = mergeGlobalAgentPointer(existingContent, nextContent);
305
+ if (existingContent === mergedContent)
306
+ continue;
307
+ mkdirSync(dirname(entry.target), { recursive: true });
308
+ writeFileSync(entry.target, mergedContent, "utf8");
309
+ }
310
+ // Claude settings.json 훅도 rules 실행 시마다 최신 커맨드로 자동 동기화.
311
+ upsertClaudeUserPromptSubmitHook({ dryRun, homeDir });
312
+ }
313
+ export function runGlobalAgentInstructionSync(dryRun = false, bundleRoot = resolvePackageRoot({ fromUrl: import.meta.url }), homeDir = resolveUserHome()) {
314
+ syncGlobalAgentInstructions(dryRun, bundleRoot, homeDir);
315
+ }
316
+ export function generateSpokeContent(spoke, bundleRoot) {
317
+ let content = "";
318
+ try {
319
+ content = renderCliSurfaceDocument(bundleRoot, `spoke-pointer-${spoke.id}`);
320
+ }
321
+ catch (err) {
322
+ content = renderCliSurfaceDocument(bundleRoot, "spoke-pointer");
323
+ }
324
+ if (spoke.format === "mdc") {
325
+ return `---
326
+ description: "Deuk Agent Flow - Project conventions and ticket workflow"
327
+ globs: ["**/*"]
328
+ alwaysApply: true
329
+ ---
330
+ ${content}`;
331
+ }
332
+ return `---\n\n## DeukAgentFlow\n\n> Managed by DeukAgentFlow. Remove this section if not installed.\n\n${content}\n`;
333
+ }
334
+ export function mergeManagedRuleContent(existingContent, managedContent) {
335
+ return mergeManagedBlock(existingContent, managedContent);
336
+ }
337
+ function deploySpokePointers(cwd, bundleRoot, dryRun) {
338
+ for (const spoke of SPOKE_REGISTRY) {
339
+ const legacyPath = spoke.legacy ? makePath(cwd, spoke.legacy) : null;
340
+ const legacyExisted = Boolean(legacyPath && existsSync(legacyPath));
341
+ // Legacy root files are replaced by canonical spoke targets.
342
+ if (legacyPath) {
343
+ if (legacyExisted) {
344
+ if (!dryRun)
345
+ unlinkSync(legacyPath);
346
+ console.log(`[CLEANUP] removed legacy: ${spoke.legacy}`);
347
+ }
348
+ }
349
+ const shouldInstallDefaultHub = spoke.id === "antigravity" && existsSync(makePath(cwd, DEUK_ROOT_DIR));
350
+ if (!spoke.detect(cwd) && !legacyExisted && !shouldInstallDefaultHub)
351
+ continue;
352
+ const targetPath = makePath(cwd, spoke.target);
353
+ const targetDir = dirname(targetPath);
354
+ const managedContent = generateSpokeContent(spoke, bundleRoot);
355
+ const existingContent = existsSync(targetPath) ? safeReadText(targetPath) : "";
356
+ const normalizedContent = normalizeExistingSpokeContent(existingContent, managedContent, bundleRoot);
357
+ const nextContent = mergeManagedBlock(normalizedContent, managedContent);
358
+ if (existingContent === nextContent) {
359
+ console.log(`spoke synced: ${spoke.target} (${spoke.id})`);
360
+ continue;
361
+ }
362
+ if (!dryRun) {
363
+ ensureWritableDirectory(targetDir, cwd, dryRun, `spoke target conflict resolved for ${spoke.id}`);
364
+ mkdirSync(targetDir, { recursive: true });
365
+ writeFileSync(targetPath, nextContent, "utf8");
366
+ }
367
+ console.log(`spoke synced: ${spoke.target} (${spoke.id})`);
368
+ }
369
+ }
370
+ export function removeDuplicateRuleCopies(cwd, dryRun) {
371
+ // Note: AGENTS.md is now the Antigravity spoke target — do NOT delete it here.
372
+ // CLAUDE.md/GEMINI.md legacy cleanup is handled by deploySpokePointers (spoke.legacy field).
373
+ // .gemini is the Antigravity platform directory — preserve it.
374
+ removeLegacyPaths(cwd, dryRun, CANONICAL_INIT_CLEANUP_PATHS.duplicateRuleCopies, "legacy/duplicate");
375
+ }
376
+ function migrateProjectRuleToAgentRoot(cwd, dryRun, opts = {}) {
377
+ const sourcePath = makePath(cwd, "PROJECT_RULE.md");
378
+ if (!existsSync(sourcePath))
379
+ return false;
380
+ // Workspace-level PROJECT_RULE.md is legacy — remove it (content lives in home ticket store).
381
+ const homeDir = resolveHomeTicketDirForWorkspace(cwd, opts);
382
+ const targetPath = makePath(homeDir, "PROJECT_RULE.md");
383
+ if (existsSync(targetPath)) {
384
+ if (sameFileContent(sourcePath, targetPath)) {
385
+ if (!dryRun)
386
+ unlinkSync(sourcePath);
387
+ console.log(`[MIGRATE] removed duplicate root PROJECT_RULE.md: ${toRepoRelativePath(cwd, sourcePath)}`);
388
+ return true;
389
+ }
390
+ console.warn(`[WARNING] PROJECT_RULE.md conflict: home store version exists with different content, kept ${toRepoRelativePath(cwd, sourcePath)}`);
391
+ return false;
392
+ }
393
+ if (!dryRun) {
394
+ mkdirSync(dirname(targetPath), { recursive: true });
395
+ renameSync(sourcePath, targetPath);
396
+ }
397
+ console.log(`[MIGRATE] ${dryRun ? "Would move" : "Moved"} project rules: ${toRepoRelativePath(cwd, sourcePath)} -> home ticket store`);
398
+ return true;
399
+ }
400
+ function ensureProjectRule(cwd, bundleRoot, dryRun, opts = {}) {
401
+ const homeDir = resolveHomeTicketDirForWorkspace(cwd, opts);
402
+ const projectRulePath = makePath(homeDir, "PROJECT_RULE.md");
403
+ if (existsSync(projectRulePath))
404
+ return false;
405
+ const templatePath = makePath(bundleRoot, "templates", "PROJECT_RULE.md");
406
+ if (!existsSync(templatePath))
407
+ return false;
408
+ if (!dryRun) {
409
+ mkdirSync(dirname(projectRulePath), { recursive: true });
410
+ copyFileSync(templatePath, projectRulePath);
411
+ }
412
+ console.log(`PROJECT_RULE.md: created from template in home ticket store`);
413
+ return true;
414
+ }
415
+ function ensureProjectMemory(cwd, bundleRoot, dryRun, opts = {}) {
416
+ const homeDir = resolveHomeTicketDirForWorkspace(cwd, opts);
417
+ const memoryPath = makePath(homeDir, "project-memory.md");
418
+ if (existsSync(memoryPath))
419
+ return false;
420
+ const templatePath = makePath(bundleRoot, "templates", "project-memory.md");
421
+ if (!existsSync(templatePath))
422
+ return false;
423
+ if (!dryRun) {
424
+ mkdirSync(dirname(memoryPath), { recursive: true });
425
+ copyFileSync(templatePath, memoryPath);
426
+ }
427
+ console.log(`project-memory.md: created from template in home ticket store`);
428
+ return true;
429
+ }
430
+ export function runSingleWorkspaceMaintenance(cwd, dryRun, bundleRoot, opts = {}) {
431
+ console.log(`\nInitializing ${basename(cwd)}...`);
432
+ // #713: self-healing home root migration (~/.deuk-agent → ~/.deuk). Idempotent, runs every init.
433
+ migrateDeukRootDir({ ...opts, dryRun });
434
+ migrateLegacyStructure(cwd, dryRun);
435
+ migrateHtmlMarkersToHeadings(cwd, dryRun);
436
+ ensureTicketDirAndGitignore({ ...opts, cwd, dryRun });
437
+ normalizeTicketPaths(cwd, { silent: false });
438
+ if (!dryRun) {
439
+ const rebuiltIndex = rebuildTicketIndexFromTopicFilesIfNeeded(cwd, { force: true });
440
+ writeTicketIndexJson(cwd, rebuiltIndex, { force: true });
441
+ syncActiveTicketId(cwd);
442
+ }
443
+ removeDuplicateRuleCopies(cwd, dryRun);
444
+ removeLocalAgentSurfaces(cwd, dryRun);
445
+ cleanupGeneratedAgentPointerSurface(makePath(cwd, "AGENTS.md"), cwd, dryRun);
446
+ migrateProjectRuleToAgentRoot(cwd, dryRun, opts);
447
+ ensureProjectRule(cwd, bundleRoot, dryRun, opts);
448
+ // #685: project-memory.md 자동 생성 제거 — 무의미한 진행-상태 레이어(언니 지시).
449
+ removeRuntimeTemplateCopies(cwd, dryRun);
450
+ removeLocalSkillCopies(cwd, dryRun);
451
+ // #697: 시스템 필수 스킬(ticket-status-surface 등 system:true)을 항상 보장.
452
+ try {
453
+ ensureSystemSkills(cwd, { dryRun });
454
+ }
455
+ catch { /* best-effort */ }
456
+ removeLocalAgentSurfaces(cwd, dryRun);
457
+ canonicalizeGeneratedCommandReferences(cwd, bundleRoot, dryRun);
458
+ cleanupNestedGeneratedAgentPointers(cwd, dryRun);
459
+ }
460
+ //# sourceMappingURL=cli-init-instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-init-instructions.js","sourceRoot":"","sources":["../../cli-init-instructions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { existsSync, writeFileSync, readFileSync } from "fs";
2
+ import { LEGACY_DEUK, DEUK_ROOT_DIR, isInsideGitWorkTree, makePath } from "./cli-utils.js";
3
+ const GITIGNORE_AGENT_MARKER = "# deuk-agent-flow: agent hub directory (local, not committed by default)";
4
+ const LEGACY_GITIGNORE_AGENT_MARKER = "# deuk-agent-rule: agent hub directory (local, not committed by default)";
5
+ function hasExactGitignoreLine(content, line) {
6
+ return content
7
+ .split(/\r?\n/)
8
+ .map(s => s.trim())
9
+ .includes(line);
10
+ }
11
+ function removeExactGitignoreLines(content, lines) {
12
+ const remove = new Set(lines);
13
+ return content
14
+ .split(/\r?\n/)
15
+ .filter(line => !remove.has(line.trim()))
16
+ .join("\n");
17
+ }
18
+ export function ensureTicketDirAndGitignore(opts) {
19
+ const gitignorePath = makePath(opts.cwd, ".gitignore");
20
+ if (opts.dryRun)
21
+ return;
22
+ if (!isInsideGitWorkTree(opts.cwd))
23
+ return;
24
+ let gi = existsSync(gitignorePath) ? readFileSync(gitignorePath, "utf8") : "";
25
+ // Remove all legacy/old deuk ignore lines. The new .deuk-workspace-id file is committed
26
+ // (not ignored), so no new ignore entry is added. Legacy dir names come from the single
27
+ // LEGACY_DEUK.dirs SSOT — for each we strip both "<dir>/" and "<dir>/tickets/". DEUK_ROOT_DIR
28
+ // ("<.deuk>/") is also stripped in case an older flow ever added it.
29
+ const legacyIgnoreLines = LEGACY_DEUK.dirs.flatMap(dir => [`${dir}/`, `${dir}/tickets/`]);
30
+ const cleanedGi = removeExactGitignoreLines(gi, [
31
+ ...legacyIgnoreLines,
32
+ GITIGNORE_AGENT_MARKER,
33
+ LEGACY_GITIGNORE_AGENT_MARKER,
34
+ `${DEUK_ROOT_DIR}/`, // new .deuk/ root line (if ever added)
35
+ ]);
36
+ if (cleanedGi !== gi) {
37
+ writeFileSync(gitignorePath, cleanedGi.replace(/\n*$/, "\n"), "utf8");
38
+ console.log("[INIT] Removed legacy .deuk-agent/ .gitignore entries");
39
+ }
40
+ }
41
+ //# sourceMappingURL=cli-init-logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-init-logic.js","sourceRoot":"","sources":["../../cli-init-logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,aAAa,EAAa,YAAY,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAW,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEpG,MAAM,sBAAsB,GAAG,0EAA0E,CAAC;AAC1G,MAAM,6BAA6B,GAAG,0EAA0E,CAAC;AAEjH,SAAS,qBAAqB,CAAC,OAAO,EAAE,IAAI;IAC1C,OAAO,OAAO;SACX,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,yBAAyB,CAAC,OAAO,EAAE,KAAK;IAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,OAAO;SACX,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACxC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAI;IAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO;IAExB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO;IAE3C,IAAI,EAAE,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,wFAAwF;IACxF,wFAAwF;IACxF,8FAA8F;IAC9F,qEAAqE;IACrE,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,yBAAyB,CAAC,EAAE,EAAE;QAC9C,GAAG,iBAAiB;QACpB,sBAAsB;QACtB,6BAA6B;QAC7B,GAAG,aAAa,GAAG,EAAG,uCAAuC;KAC9D,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;AACH,CAAC"}