@rryando/arcs 3.1.2 → 3.2.1

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 (128) hide show
  1. package/README.md +65 -40
  2. package/dist/cli/arcs-orchestrate.d.ts +1 -1
  3. package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
  4. package/dist/cli/arcs-orchestrate.js +8 -4
  5. package/dist/cli/arcs-orchestrate.js.map +1 -1
  6. package/dist/cli/arg-parser.d.ts +3 -3
  7. package/dist/cli/arg-parser.d.ts.map +1 -1
  8. package/dist/cli/arg-parser.js +1 -1
  9. package/dist/cli/arg-parser.js.map +1 -1
  10. package/dist/cli/bundle-installer.d.ts +11 -0
  11. package/dist/cli/bundle-installer.d.ts.map +1 -1
  12. package/dist/cli/bundle-installer.js +14 -4
  13. package/dist/cli/bundle-installer.js.map +1 -1
  14. package/dist/cli/command-registry.d.ts +61 -6
  15. package/dist/cli/command-registry.d.ts.map +1 -1
  16. package/dist/cli/command-registry.js.map +1 -1
  17. package/dist/cli/commands/batch.js +17 -16
  18. package/dist/cli/commands/batch.js.map +1 -1
  19. package/dist/cli/commands/brief.js +71 -74
  20. package/dist/cli/commands/brief.js.map +1 -1
  21. package/dist/cli/commands/bundle.js +79 -31
  22. package/dist/cli/commands/bundle.js.map +1 -1
  23. package/dist/cli/commands/dependency.js +47 -43
  24. package/dist/cli/commands/dependency.js.map +1 -1
  25. package/dist/cli/commands/diagnostics.js +1 -1
  26. package/dist/cli/commands/diagnostics.js.map +1 -1
  27. package/dist/cli/commands/diagram.js +96 -58
  28. package/dist/cli/commands/diagram.js.map +1 -1
  29. package/dist/cli/commands/done.js +19 -18
  30. package/dist/cli/commands/done.js.map +1 -1
  31. package/dist/cli/commands/graph.js +12 -10
  32. package/dist/cli/commands/graph.js.map +1 -1
  33. package/dist/cli/commands/index.d.ts +1 -0
  34. package/dist/cli/commands/index.d.ts.map +1 -1
  35. package/dist/cli/commands/index.js +1 -0
  36. package/dist/cli/commands/index.js.map +1 -1
  37. package/dist/cli/commands/knowledge-search.js +11 -12
  38. package/dist/cli/commands/knowledge-search.js.map +1 -1
  39. package/dist/cli/commands/knowledge.js +63 -56
  40. package/dist/cli/commands/knowledge.js.map +1 -1
  41. package/dist/cli/commands/loop.js +40 -36
  42. package/dist/cli/commands/loop.js.map +1 -1
  43. package/dist/cli/commands/maintenance.js +30 -19
  44. package/dist/cli/commands/maintenance.js.map +1 -1
  45. package/dist/cli/commands/next.js +9 -8
  46. package/dist/cli/commands/next.js.map +1 -1
  47. package/dist/cli/commands/plan.js +61 -55
  48. package/dist/cli/commands/plan.js.map +1 -1
  49. package/dist/cli/commands/project-updates.js +37 -33
  50. package/dist/cli/commands/project-updates.js.map +1 -1
  51. package/dist/cli/commands/project.js +33 -23
  52. package/dist/cli/commands/project.js.map +1 -1
  53. package/dist/cli/commands/proposal.d.ts +2 -0
  54. package/dist/cli/commands/proposal.d.ts.map +1 -0
  55. package/dist/cli/commands/proposal.js +509 -0
  56. package/dist/cli/commands/proposal.js.map +1 -0
  57. package/dist/cli/commands/remember.js +6 -6
  58. package/dist/cli/commands/remember.js.map +1 -1
  59. package/dist/cli/commands/status.js +9 -8
  60. package/dist/cli/commands/status.js.map +1 -1
  61. package/dist/cli/commands/task.d.ts +1 -5
  62. package/dist/cli/commands/task.d.ts.map +1 -1
  63. package/dist/cli/commands/task.js +261 -248
  64. package/dist/cli/commands/task.js.map +1 -1
  65. package/dist/cli/commands/utility.d.ts.map +1 -1
  66. package/dist/cli/commands/utility.js +39 -35
  67. package/dist/cli/commands/utility.js.map +1 -1
  68. package/dist/cli/dag-commands.js.map +1 -1
  69. package/dist/cli/help-generator.d.ts +3 -3
  70. package/dist/cli/help-generator.d.ts.map +1 -1
  71. package/dist/cli/help-generator.js +1 -1
  72. package/dist/cli/help-generator.js.map +1 -1
  73. package/dist/cli/md-renderer.d.ts.map +1 -1
  74. package/dist/cli/md-renderer.js +45 -11
  75. package/dist/cli/md-renderer.js.map +1 -1
  76. package/dist/cli/setup.d.ts.map +1 -1
  77. package/dist/cli/setup.js +235 -113
  78. package/dist/cli/setup.js.map +1 -1
  79. package/dist/utils/diagram-generator.d.ts.map +1 -1
  80. package/dist/utils/diagram-generator.js +8 -1
  81. package/dist/utils/diagram-generator.js.map +1 -1
  82. package/dist/utils/diagram-store.d.ts +45 -0
  83. package/dist/utils/diagram-store.d.ts.map +1 -0
  84. package/dist/utils/diagram-store.js +99 -0
  85. package/dist/utils/diagram-store.js.map +1 -0
  86. package/dist/utils/errors.d.ts.map +1 -1
  87. package/dist/utils/errors.js.map +1 -1
  88. package/dist/utils/graphify-knowledge.d.ts +19 -3
  89. package/dist/utils/graphify-knowledge.d.ts.map +1 -1
  90. package/dist/utils/graphify-knowledge.js +45 -58
  91. package/dist/utils/graphify-knowledge.js.map +1 -1
  92. package/dist/utils/graphify.d.ts +58 -3
  93. package/dist/utils/graphify.d.ts.map +1 -1
  94. package/dist/utils/graphify.js +175 -42
  95. package/dist/utils/graphify.js.map +1 -1
  96. package/dist/utils/json-schemas.d.ts +153 -0
  97. package/dist/utils/json-schemas.d.ts.map +1 -1
  98. package/dist/utils/json-schemas.js +23 -0
  99. package/dist/utils/json-schemas.js.map +1 -1
  100. package/dist/utils/proposal-store.d.ts +64 -0
  101. package/dist/utils/proposal-store.d.ts.map +1 -0
  102. package/dist/utils/proposal-store.js +161 -0
  103. package/dist/utils/proposal-store.js.map +1 -0
  104. package/dist/utils/storage-utils.d.ts +1 -1
  105. package/dist/utils/storage-utils.d.ts.map +1 -1
  106. package/dist/utils/storage-utils.js +1 -1
  107. package/dist/utils/storage-utils.js.map +1 -1
  108. package/dist/utils/task-store.d.ts +20 -0
  109. package/dist/utils/task-store.d.ts.map +1 -1
  110. package/dist/utils/task-store.js +42 -5
  111. package/dist/utils/task-store.js.map +1 -1
  112. package/dist/utils/toposort.d.ts +1 -1
  113. package/dist/utils/toposort.d.ts.map +1 -1
  114. package/dist/utils/toposort.js +5 -4
  115. package/dist/utils/toposort.js.map +1 -1
  116. package/dist/utils/workflow-policy.d.ts +1 -1
  117. package/dist/utils/workflow-policy.d.ts.map +1 -1
  118. package/dist/utils/workflow-policy.js +1 -1
  119. package/dist/utils/workflow-policy.js.map +1 -1
  120. package/opencode/arcs/bundle-runtime.json +3 -0
  121. package/opencode/arcs/manifest.json +47 -66
  122. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +8 -4
  123. package/opencode/arcs/prompts/arcs-orchestrate.txt +8 -4
  124. package/opencode/arcs/skills/enriching-graphify-proposals/SKILL.md +170 -0
  125. package/opencode/arcs/skills/init-project/SKILL.md +18 -11
  126. package/opencode/arcs/skills/to-diagram/SKILL.md +1 -1
  127. package/package.json +1 -1
  128. package/scripts/deploy-claudecode-bundle.mjs +414 -0
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Diagram store — encapsulates the manage-diagram.mjs subprocess.
3
+ *
4
+ * CLI command handlers should call into this module rather than spawning
5
+ * the script directly. Centralizes:
6
+ * - script discovery (repo-local vs ~/.config/opencode)
7
+ * - diagram file path resolution
8
+ * - subprocess invocation with consistent stdio + timeout
9
+ * - task-status → diagram-status namespace mapping
10
+ */
11
+ import { execSync } from "node:child_process";
12
+ import { existsSync } from "node:fs";
13
+ import { homedir } from "node:os";
14
+ import { resolve } from "node:path";
15
+ import { getDataDir } from "./paths.js";
16
+ /**
17
+ * Locate the manage-diagram.mjs script. Search order:
18
+ * 1. Repo-local bundle (development checkout)
19
+ * 2. OpenCode skill install (~/.config/opencode/skills/arcs/to-diagram/...)
20
+ * 3. Claude Code skill install (~/.claude/skills/arcs-to-diagram/...)
21
+ *
22
+ * The Claude Code path uses the `arcs-` prefix because Claude Code skills
23
+ * are flat under ~/.claude/skills/ — see scripts/deploy-claudecode-bundle.mjs.
24
+ */
25
+ export function findDiagramScript() {
26
+ const candidates = [
27
+ resolve(import.meta.dirname, "../../opencode/arcs/skills/to-diagram/scripts/manage-diagram.mjs"),
28
+ resolve(homedir(), ".config/opencode/skills/arcs/to-diagram/scripts/manage-diagram.mjs"),
29
+ resolve(homedir(), ".claude/skills/arcs-to-diagram/scripts/manage-diagram.mjs"),
30
+ ];
31
+ for (const path of candidates) {
32
+ if (existsSync(path))
33
+ return path;
34
+ }
35
+ return undefined;
36
+ }
37
+ export function resolveDiagramPath(slug, planId) {
38
+ const dataDir = getDataDir();
39
+ return resolve(dataDir, "projects", slug, "plans", `${planId}.diagram.mmd`);
40
+ }
41
+ /**
42
+ * Run the manage-diagram.mjs script and return trimmed stdout.
43
+ * Throws on non-zero exit; caller is responsible for error mapping.
44
+ */
45
+ export function runDiagramScript(scriptPath, subcommand, diagramPath, extraArgs = []) {
46
+ const argsStr = extraArgs.map((a) => `"${a}"`).join(" ");
47
+ return execSync(`node "${scriptPath}" ${subcommand} "${diagramPath}"${argsStr ? ` ${argsStr}` : ""}`, {
48
+ encoding: "utf-8",
49
+ timeout: 10000,
50
+ // Capture stderr so script error output never leaks to the parent's
51
+ // stderr — keeps --json output clean and parseable for agents.
52
+ stdio: ["ignore", "pipe", "pipe"],
53
+ }).trim();
54
+ }
55
+ /**
56
+ * Map task status (snake_case in the ARCS task model) to diagram classDef
57
+ * status (camelCase in the Mermaid script). The two namespaces are
58
+ * intentionally distinct — task statuses follow Python/JSON convention,
59
+ * diagram statuses match the classDef identifiers.
60
+ */
61
+ export function taskStatusToDiagramStatus(status) {
62
+ switch (status) {
63
+ case "in_progress":
64
+ return "inProgress";
65
+ case "done":
66
+ return "done";
67
+ case "cancelled":
68
+ return "blocked";
69
+ case "backlog":
70
+ return "backlog";
71
+ }
72
+ }
73
+ /**
74
+ * Best-effort diagram node status update. Returns a structured result
75
+ * rather than throwing — callers expect this to fail gracefully when
76
+ * the diagram or script is absent.
77
+ */
78
+ export function attemptDiagramUpdate(slug, planId, nodeId, status) {
79
+ const diagramPath = resolveDiagramPath(slug, planId);
80
+ if (!existsSync(diagramPath)) {
81
+ return { diagramUpdated: false, diagramError: "Diagram file not found" };
82
+ }
83
+ const scriptPath = findDiagramScript();
84
+ if (!scriptPath) {
85
+ return { diagramUpdated: false, diagramError: "manage-diagram.mjs script not found" };
86
+ }
87
+ try {
88
+ runDiagramScript(scriptPath, "status", diagramPath, [
89
+ nodeId,
90
+ taskStatusToDiagramStatus(status),
91
+ ]);
92
+ return { diagramUpdated: true };
93
+ }
94
+ catch (err) {
95
+ const msg = err instanceof Error ? err.stderr || err.message : String(err);
96
+ return { diagramUpdated: false, diagramError: msg };
97
+ }
98
+ }
99
+ //# sourceMappingURL=diagram-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-store.js","sourceRoot":"","sources":["../../src/utils/diagram-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAKpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKxE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAKzE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAK9D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,EACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,QAAQ,CAKV;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAE5F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAExF;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAM9D;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAMtF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKvD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ;;;;;;EAExC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAKpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKxE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAKzE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,EACzC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,QAAQ,CAKV;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAE5F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAExF;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAM9D;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAMtF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKvD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ;;;;;;EAExC"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,22 @@
1
1
  import type { KnowledgeProposal } from "./graphify.js";
2
- export declare function persistProposals(slug: string, proposals: KnowledgeProposal[]): Promise<{
3
- created: number;
4
- skipped: number;
2
+ /**
3
+ * Convert graphify ingestion output into a `proposals/graphify.json` payload
4
+ * and persist it through `proposal-store.writeProposals()`.
5
+ *
6
+ * Replaces the legacy direct-write path that used to populate
7
+ * `knowledge/index.json` and `knowledge/<id>.md` at ingest time. Graphify
8
+ * proposals now sit in the proposals gate until a skill-aware host enriches
9
+ * them into durable knowledge entries.
10
+ *
11
+ * Merge semantics: if a proposals file already exists, proposals from the
12
+ * existing file with ids NOT present in the new extraction are preserved.
13
+ * This protects backfilled proposals (with empty structuralFacts) and any
14
+ * other pending entries from being clobbered when graphify re-runs. The new
15
+ * extraction wins on collisions — a fresh extraction produces fresher facts.
16
+ */
17
+ export declare function writeProposalsFile(slug: string, proposals: KnowledgeProposal[], graphJsonContent: string): Promise<{
18
+ written: number;
19
+ fingerprint: string;
20
+ preserved: number;
5
21
  }>;
6
22
  //# sourceMappingURL=graphify-knowledge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphify-knowledge.d.ts","sourceRoot":"","sources":["../../src/utils/graphify-knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAwCvD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAAE,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoD/C"}
1
+ {"version":3,"file":"graphify-knowledge.d.ts","sourceRoot":"","sources":["../../src/utils/graphify-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUvD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,iBAAiB,EAAE,EAC9B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAmCtE"}
@@ -1,60 +1,47 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
- import { join } from "node:path";
3
- import { getProjectDir } from "./paths.js";
4
- function slugifyTitle(title) {
5
- return title
6
- .toLowerCase()
7
- .replace(/[^a-z0-9]+/g, "-")
8
- .replace(/^-+|-+$/g, "")
9
- .slice(0, 80);
10
- }
11
- async function readJsonSafe(filePath) {
12
- try {
13
- return JSON.parse(await readFile(filePath, "utf-8"));
14
- }
15
- catch {
16
- return undefined;
17
- }
18
- }
19
- async function writeJson(filePath, data) {
20
- await writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
21
- }
22
- export async function persistProposals(slug, proposals) {
23
- const projectDir = getProjectDir(slug);
24
- const knowledgeDir = join(projectDir, "knowledge");
25
- await mkdir(knowledgeDir, { recursive: true });
26
- const indexPath = join(knowledgeDir, "index.json");
27
- const index = (await readJsonSafe(indexPath)) ?? { entries: [] };
28
- const existingIds = new Set(index.entries.map((e) => e.id));
29
- let created = 0;
30
- let skipped = 0;
31
- for (const proposal of proposals) {
32
- const id = slugifyTitle(proposal.title);
33
- if (existingIds.has(id)) {
34
- skipped++;
35
- continue;
36
- }
37
- const ts = new Date().toISOString();
38
- const bodyFile = join("knowledge", `${id}.md`);
39
- const meta = {
40
- id,
41
- normalizedId: id,
42
- title: proposal.title,
43
- kind: proposal.kind,
44
- keywords: proposal.keywords,
45
- summary: proposal.summary,
46
- sourceFiles: proposal.sourceFiles,
47
- file: bodyFile,
48
- createdAt: ts,
49
- updatedAt: ts,
50
- };
51
- await writeJson(join(knowledgeDir, `${id}.meta.json`), meta);
52
- await writeFile(join(knowledgeDir, `${id}.md`), `# ${proposal.title}\n\n${proposal.summary}\n`, "utf-8");
53
- index.entries.push(meta);
54
- existingIds.add(id);
55
- created++;
56
- }
57
- await writeJson(indexPath, index);
58
- return { created, skipped };
1
+ import { annotateDedupCandidates, computeGraphFingerprint, readProposals, writeProposals, } from "./proposal-store.js";
2
+ /**
3
+ * Convert graphify ingestion output into a `proposals/graphify.json` payload
4
+ * and persist it through `proposal-store.writeProposals()`.
5
+ *
6
+ * Replaces the legacy direct-write path that used to populate
7
+ * `knowledge/index.json` and `knowledge/<id>.md` at ingest time. Graphify
8
+ * proposals now sit in the proposals gate until a skill-aware host enriches
9
+ * them into durable knowledge entries.
10
+ *
11
+ * Merge semantics: if a proposals file already exists, proposals from the
12
+ * existing file with ids NOT present in the new extraction are preserved.
13
+ * This protects backfilled proposals (with empty structuralFacts) and any
14
+ * other pending entries from being clobbered when graphify re-runs. The new
15
+ * extraction wins on collisions — a fresh extraction produces fresher facts.
16
+ */
17
+ export async function writeProposalsFile(slug, proposals, graphJsonContent) {
18
+ // Map ingestion shape → storage shape. The storage `Proposal` adds an
19
+ // initially-empty `suggestedDedupCandidates`; `annotateDedupCandidates`
20
+ // populates it from the existing knowledge index.
21
+ const draft = proposals.map((p) => ({
22
+ id: p.id,
23
+ kind: p.kind,
24
+ label: p.label,
25
+ structuralFacts: p.structuralFacts,
26
+ sourceFiles: p.sourceFiles,
27
+ suggestedDedupCandidates: [],
28
+ }));
29
+ const annotated = await annotateDedupCandidates(slug, draft);
30
+ // Preserve existing proposals not present in the new extraction. This
31
+ // protects the lossy backfill payload (structuralFacts: {}) and any other
32
+ // pending agent-enrichment work from being silently dropped on the next
33
+ // graphify-sync. New extraction wins on id collisions.
34
+ const existing = await readProposals(slug);
35
+ const newIds = new Set(annotated.map((p) => p.id));
36
+ const preserved = existing ? existing.proposals.filter((p) => !newIds.has(p.id)) : [];
37
+ const fingerprint = computeGraphFingerprint(graphJsonContent);
38
+ const payload = {
39
+ version: 1,
40
+ generatedAt: new Date().toISOString(),
41
+ graphFingerprint: fingerprint,
42
+ proposals: [...annotated, ...preserved],
43
+ };
44
+ await writeProposals(slug, payload);
45
+ return { written: proposals.length, fingerprint, preserved: preserved.length };
59
46
  }
60
47
  //# sourceMappingURL=graphify-knowledge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphify-knowledge.js","sourceRoot":"","sources":["../../src/utils/graphify-knowledge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graphify-knowledge.js","sourceRoot":"","sources":["../../src/utils/graphify-knowledge.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EAGvB,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,SAA8B,EAC9B,gBAAwB;IAExB,sEAAsE;IACtE,wEAAwE;IACxE,kDAAkD;IAClD,MAAM,KAAK,GAAe,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,eAAe,EAAE,CAAC,CAAC,eAAqD;QACxE,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,wBAAwB,EAAE,EAAE;KAC7B,CAAC,CAAC,CAAC;IAEJ,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE7D,sEAAsE;IACtE,0EAA0E;IAC1E,wEAAwE;IACxE,uDAAuD;IACvD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtF,MAAM,WAAW,GAAG,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IAE9D,MAAM,OAAO,GAAkB;QAC7B,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,gBAAgB,EAAE,WAAW;QAC7B,SAAS,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC;KACxC,CAAC;IAEF,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEpC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;AACjF,CAAC"}
@@ -14,16 +14,71 @@ export interface ExtractionError {
14
14
  code?: string;
15
15
  }
16
16
  export type ExtractionOutcome = ExtractionResult | ExtractionError;
17
+ /**
18
+ * A graphify-derived knowledge proposal.
19
+ *
20
+ * Carries STRUCTURAL FACTS only — not prose. The calling agent (which has LLM
21
+ * tokens) is responsible for producing the final `title`/`summary`/`keywords`
22
+ * during the proposal-promote step. See plan
23
+ * `2026-06-02-graphify-proposal-gate-implementation-plan` §Proposal Shape.
24
+ *
25
+ * `suggestedDedupCandidates` is intentionally NOT on this type — that's
26
+ * computed by the proposal-store layer when proposals are written to disk,
27
+ * not at ingest time.
28
+ */
17
29
  export interface KnowledgeProposal {
18
- title: string;
30
+ /** Stable id, e.g. "graphify-cluster-src-utils". */
31
+ id: string;
19
32
  kind: "architecture" | "module" | "gotcha" | "pattern";
20
- summary: string;
21
- keywords: string[];
33
+ /** Human-friendly label. Agents will write the final title. */
34
+ label: string;
35
+ structuralFacts: ProposalStructuralFacts;
22
36
  sourceFiles: Array<{
23
37
  path: string;
24
38
  anchor?: string;
25
39
  }>;
26
40
  }
41
+ export interface ProposalStructuralFacts {
42
+ memberCount?: number;
43
+ fileCount?: number;
44
+ /** e.g. { code: 260, document: 0 } */
45
+ fileTypeBreakdown?: Record<string, number>;
46
+ topHubs?: Array<{
47
+ label: string;
48
+ file: string;
49
+ in: number;
50
+ out: number;
51
+ }>;
52
+ topFilesByEntityCount?: Array<{
53
+ file: string;
54
+ count: number;
55
+ }>;
56
+ incomingFromOtherClusters?: number;
57
+ outgoingToOtherClusters?: number;
58
+ nodeFile?: string;
59
+ nodeIn?: number;
60
+ nodeOut?: number;
61
+ topCallers?: Array<{
62
+ label: string;
63
+ file: string;
64
+ }>;
65
+ topCallees?: Array<{
66
+ label: string;
67
+ file: string;
68
+ }>;
69
+ couplingA?: {
70
+ label: string;
71
+ file: string;
72
+ degree: number;
73
+ };
74
+ couplingB?: {
75
+ label: string;
76
+ file: string;
77
+ degree: number;
78
+ };
79
+ /** Edge relation types (e.g. ["imports_from", "calls"]). */
80
+ relations?: string[];
81
+ }
27
82
  export interface IngestionResult {
28
83
  proposals: KnowledgeProposal[];
29
84
  stats: {
@@ -1 +1 @@
1
- {"version":3,"file":"graphify.d.ts","sourceRoot":"","sources":["../../src/utils/graphify.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,cAAc,IAAI,YAAY,CAyB7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAInE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAsHD,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAwGjF;AAID,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAEpD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,CA0BhF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY,CA0BjG;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAsDtE"}
1
+ {"version":3,"file":"graphify.d.ts","sourceRoot":"","sources":["../../src/utils/graphify.ts"],"names":[],"mappings":"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"}