umtri-mcp 1.3.1 → 1.3.3

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.
@@ -35,7 +35,9 @@ back onto the nodes. The human commits when satisfied.
35
35
  unless the node already has `metadata.implements`** (step 3), so attach the
36
36
  source paths first. The human can also commit from the UI. If you are unsure
37
37
  the realization is complete, leave it as plan and ask the human rather than
38
- committing.
38
+ committing. **Commit from the top down:** a node whose parent is still a plan
39
+ is rejected — commit the parent first. (A committed node under a plan parent
40
+ would vanish from the tree whenever Plan mode is off.)
39
41
  6. **Record the commit (CI/CD form record).** When the code lands in git, the
40
42
  commit is recorded onto the nodes it touched via `record_commit`
41
43
  (sha + changed files → appended to each matching node's `metadata.commits`).
package/core/tools.js CHANGED
@@ -814,7 +814,7 @@ export function registerTools(server, { api }) {
814
814
  'commit_plan',
815
815
  {
816
816
  title: 'Commit a realized plan node',
817
- description: 'Promotes a plan node (metadata.plan=true) to the real tree by clearing the plan flag. VERIFICATION GATE: the node must already carry metadata.implements (the source path(s) you wrote) — without it the commit is rejected, because an uncommitted plan node with no implements is not considered realized. Call this only after you have actually written the code and recorded implements via update_node. See umtri://rules/plan.',
817
+ description: 'Promotes a plan node (metadata.plan=true) to the real tree by clearing the plan flag. VERIFICATION GATE: the node must already carry metadata.implements (the source path(s) you wrote) — without it the commit is rejected, because an uncommitted plan node with no implements is not considered realized. Call this only after you have actually written the code and recorded implements via update_node. Commit from the top down: a node whose parent is still a plan is rejected — commit the parent first. See umtri://rules/plan.',
818
818
  inputSchema: z.object({
819
819
  slug: z.string().min(1).describe('Ground slug.'),
820
820
  id: z.string().min(1).describe('Plan node id to commit.'),
@@ -857,7 +857,10 @@ export function registerTools(server, { api }) {
857
857
  slug: z.string().min(1).describe('Ground slug.'),
858
858
  source: z.string().min(1).describe('Source node id.'),
859
859
  target: z.string().min(1).describe('Target node id.'),
860
- type: z.string().optional().describe('Edge type. Backend defaults if omitted.'),
860
+ // 서버(store.createEdge)가 type을 필수로 요구한다. 예전엔 optional + "Backend defaults"라고
861
+ // 안내해 생략한 에이전트가 매번 한 번씩 거부당했다. 그라운드마다 edge_types가 있어 enum으로
862
+ // 못 박지 않고 필수 문자열로 둔다.
863
+ type: z.string().min(1).describe('Edge type — required. "dependency" (source is built on / needs target) or "data_flow" (data moves source → target) — use one of the ground\'s edgeTypes.'),
861
864
  label: z.string().optional(),
862
865
  metadata: z.record(z.any()).optional(),
863
866
  }),
@@ -867,8 +870,7 @@ export function registerTools(server, { api }) {
867
870
  const { ok, rejectReason } = validateEdge({ sourceId: source, targetId: target });
868
871
  if (!ok) throw new Error(`Rejected by protocol: ${rejectReason}`);
869
872
 
870
- const body = { source, target };
871
- if (type !== undefined) body.type = type;
873
+ const body = { source, target, type };
872
874
  if (label !== undefined) body.label = label;
873
875
  if (metadata !== undefined) body.metadata = metadata;
874
876
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "umtri-mcp",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "MCP server for Umtri — give your AI coding agent a persistent map of your project's structure, dependencies, and bugs.",
5
5
  "mcpName": "io.umtri/umtri",
6
6
  "keywords": [