@hunter-harness/workflow-harness 0.2.50 → 0.2.52
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/harness/bundles/general/claude-code/.harness-build.json +1 -1
- package/harness/bundles/general/claude-code/README.md +4 -4
- package/harness/bundles/general/claude-code/harness-archive/SKILL.md +6 -6
- package/harness/bundles/general/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/SKILL.md +42 -258
- package/harness/bundles/general/claude-code/harness-knowledge-query/SKILL.md +38 -120
- package/harness/bundles/general/claude-code/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/claude-code/harness-plan/checklist.md +2 -2
- package/harness/bundles/general/claude-code/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-run/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/harness-sync/SKILL.md +7 -7
- package/harness/bundles/general/claude-code/harness-sync/reference.md +18 -11
- package/harness/bundles/general/claude-code/harness-test/SKILL.md +2 -2
- package/harness/bundles/general/claude-code/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/general/claude-code/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/general/claude-code/scripts/harness_archive.py +748 -200
- package/harness/bundles/general/claude-code/scripts/harness_profile.py +0 -1
- package/harness/bundles/general/claude-code/scripts/harness_state.py +3 -5
- package/harness/bundles/general/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/general/codebuddy/README.md +4 -4
- package/harness/bundles/general/codebuddy/harness-archive/SKILL.md +6 -6
- package/harness/bundles/general/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/SKILL.md +39 -244
- package/harness/bundles/general/codebuddy/harness-knowledge-query/SKILL.md +35 -106
- package/harness/bundles/general/codebuddy/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/codebuddy/harness-plan/checklist.md +2 -2
- package/harness/bundles/general/codebuddy/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-run/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/harness-sync/SKILL.md +8 -8
- package/harness/bundles/general/codebuddy/harness-sync/reference.md +18 -11
- package/harness/bundles/general/codebuddy/harness-test/SKILL.md +2 -2
- package/harness/bundles/general/codebuddy/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/general/codebuddy/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/general/codebuddy/scripts/harness_archive.py +748 -200
- package/harness/bundles/general/codebuddy/scripts/harness_profile.py +0 -1
- package/harness/bundles/general/codebuddy/scripts/harness_state.py +3 -5
- package/harness/bundles/general/codex/.harness-build.json +1 -1
- package/harness/bundles/general/codex/README.md +4 -4
- package/harness/bundles/general/codex/harness-archive/SKILL.md +6 -6
- package/harness/bundles/general/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/codex/harness-knowledge-ingest/SKILL.md +39 -244
- package/harness/bundles/general/codex/harness-knowledge-query/SKILL.md +35 -106
- package/harness/bundles/general/codex/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/codex/harness-plan/checklist.md +2 -2
- package/harness/bundles/general/codex/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-run/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/codex/harness-sync/SKILL.md +8 -8
- package/harness/bundles/general/codex/harness-sync/reference.md +18 -11
- package/harness/bundles/general/codex/harness-test/SKILL.md +2 -2
- package/harness/bundles/general/codex/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/general/codex/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/general/codex/scripts/harness_archive.py +748 -200
- package/harness/bundles/general/codex/scripts/harness_profile.py +0 -1
- package/harness/bundles/general/codex/scripts/harness_state.py +3 -5
- package/harness/bundles/general/cursor/.harness-build.json +1 -1
- package/harness/bundles/general/cursor/README.md +4 -4
- package/harness/bundles/general/cursor/harness-archive/SKILL.md +6 -6
- package/harness/bundles/general/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/general/cursor/harness-knowledge-ingest/SKILL.md +39 -244
- package/harness/bundles/general/cursor/harness-knowledge-query/SKILL.md +35 -106
- package/harness/bundles/general/cursor/harness-plan/SKILL.md +4 -4
- package/harness/bundles/general/cursor/harness-plan/checklist.md +2 -2
- package/harness/bundles/general/cursor/harness-review/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-run/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-submit/SKILL.md +2 -2
- package/harness/bundles/general/cursor/harness-sync/SKILL.md +8 -8
- package/harness/bundles/general/cursor/harness-sync/reference.md +18 -11
- package/harness/bundles/general/cursor/harness-test/SKILL.md +2 -2
- package/harness/bundles/general/cursor/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/general/cursor/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/general/cursor/scripts/harness_archive.py +748 -200
- package/harness/bundles/general/cursor/scripts/harness_profile.py +0 -1
- package/harness/bundles/general/cursor/scripts/harness_state.py +3 -5
- package/harness/bundles/java/claude-code/.harness-build.json +1 -1
- package/harness/bundles/java/claude-code/README.md +4 -4
- package/harness/bundles/java/claude-code/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-archive/SKILL.md +6 -6
- package/harness/bundles/java/claude-code/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/SKILL.md +42 -258
- package/harness/bundles/java/claude-code/harness-knowledge-query/SKILL.md +38 -120
- package/harness/bundles/java/claude-code/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/claude-code/harness-plan/checklist.md +2 -2
- package/harness/bundles/java/claude-code/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-run/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/harness-sync/SKILL.md +7 -7
- package/harness/bundles/java/claude-code/harness-sync/reference.md +18 -11
- package/harness/bundles/java/claude-code/harness-test/SKILL.md +2 -2
- package/harness/bundles/java/claude-code/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/java/claude-code/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/java/claude-code/scripts/harness_archive.py +748 -200
- package/harness/bundles/java/claude-code/scripts/harness_profile.py +0 -1
- package/harness/bundles/java/claude-code/scripts/harness_state.py +3 -5
- package/harness/bundles/java/codebuddy/.harness-build.json +1 -1
- package/harness/bundles/java/codebuddy/README.md +4 -4
- package/harness/bundles/java/codebuddy/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-archive/SKILL.md +6 -6
- package/harness/bundles/java/codebuddy/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/SKILL.md +39 -244
- package/harness/bundles/java/codebuddy/harness-knowledge-query/SKILL.md +35 -106
- package/harness/bundles/java/codebuddy/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/codebuddy/harness-plan/checklist.md +2 -2
- package/harness/bundles/java/codebuddy/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-run/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/harness-sync/SKILL.md +8 -8
- package/harness/bundles/java/codebuddy/harness-sync/reference.md +18 -11
- package/harness/bundles/java/codebuddy/harness-test/SKILL.md +2 -2
- package/harness/bundles/java/codebuddy/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/java/codebuddy/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/java/codebuddy/scripts/harness_archive.py +748 -200
- package/harness/bundles/java/codebuddy/scripts/harness_profile.py +0 -1
- package/harness/bundles/java/codebuddy/scripts/harness_state.py +3 -5
- package/harness/bundles/java/codex/.harness-build.json +1 -1
- package/harness/bundles/java/codex/README.md +4 -4
- package/harness/bundles/java/codex/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-archive/SKILL.md +6 -6
- package/harness/bundles/java/codex/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/codex/harness-knowledge-ingest/SKILL.md +39 -244
- package/harness/bundles/java/codex/harness-knowledge-query/SKILL.md +35 -106
- package/harness/bundles/java/codex/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/codex/harness-plan/checklist.md +2 -2
- package/harness/bundles/java/codex/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-run/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/codex/harness-sync/SKILL.md +8 -8
- package/harness/bundles/java/codex/harness-sync/reference.md +18 -11
- package/harness/bundles/java/codex/harness-test/SKILL.md +2 -2
- package/harness/bundles/java/codex/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/java/codex/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/java/codex/scripts/harness_archive.py +748 -200
- package/harness/bundles/java/codex/scripts/harness_profile.py +0 -1
- package/harness/bundles/java/codex/scripts/harness_state.py +3 -5
- package/harness/bundles/java/cursor/.harness-build.json +1 -1
- package/harness/bundles/java/cursor/README.md +4 -4
- package/harness/bundles/java/cursor/harness-apidoc/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-archive/SKILL.md +6 -6
- package/harness/bundles/java/cursor/harness-codebase-map/SKILL.md +1 -1
- package/harness/bundles/java/cursor/harness-knowledge-ingest/SKILL.md +39 -244
- package/harness/bundles/java/cursor/harness-knowledge-query/SKILL.md +35 -106
- package/harness/bundles/java/cursor/harness-package/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-plan/SKILL.md +4 -4
- package/harness/bundles/java/cursor/harness-plan/checklist.md +2 -2
- package/harness/bundles/java/cursor/harness-review/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-run/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-submit/SKILL.md +2 -2
- package/harness/bundles/java/cursor/harness-sync/SKILL.md +8 -8
- package/harness/bundles/java/cursor/harness-sync/reference.md +18 -11
- package/harness/bundles/java/cursor/harness-test/SKILL.md +2 -2
- package/harness/bundles/java/cursor/protocols/archive-report-protocol.md +5 -7
- package/harness/bundles/java/cursor/protocols/state-layout-protocol.md +17 -11
- package/harness/bundles/java/cursor/scripts/harness_archive.py +748 -200
- package/harness/bundles/java/cursor/scripts/harness_profile.py +0 -1
- package/harness/bundles/java/cursor/scripts/harness_state.py +3 -5
- package/harness/manifests/general/claude-code.json +21 -45
- package/harness/manifests/general/codebuddy.json +21 -45
- package/harness/manifests/general/codex.json +21 -45
- package/harness/manifests/general/cursor.json +21 -45
- package/harness/manifests/java/claude-code.json +23 -47
- package/harness/manifests/java/codebuddy.json +23 -47
- package/harness/manifests/java/codex.json +23 -47
- package/harness/manifests/java/cursor.json +23 -47
- package/hunter-workflow-family.json +4 -4
- package/package.json +1 -1
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/general/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/general/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/general/codex/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/general/codex/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/general/codex/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/general/codex/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/general/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/general/cursor/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/general/cursor/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/general/cursor/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/general/cursor/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/general/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/java/claude-code/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/java/codebuddy/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/java/codex/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/java/codex/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/java/codex/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/java/codex/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/java/codex/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
- package/harness/bundles/java/cursor/harness-knowledge-ingest/design.md +0 -842
- package/harness/bundles/java/cursor/harness-knowledge-ingest/evaluations/harness_knowledge_evaluation.xml +0 -42
- package/harness/bundles/java/cursor/harness-knowledge-ingest/mcp-config.example.json +0 -10
- package/harness/bundles/java/cursor/harness-knowledge-ingest/reference.md +0 -413
- package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge.py +0 -7263
- package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py +0 -275
package/harness/bundles/java/cursor/harness-knowledge-ingest/scripts/harness_knowledge_mcp.py
DELETED
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""MCP entry point for Harness knowledge operations."""
|
|
3
|
-
|
|
4
|
-
from __future__ import annotations
|
|
5
|
-
|
|
6
|
-
import argparse
|
|
7
|
-
import json
|
|
8
|
-
import sys
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from typing import Any
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
SCRIPT_DIR = Path(__file__).resolve().parent
|
|
14
|
-
if str(SCRIPT_DIR) not in sys.path:
|
|
15
|
-
sys.path.insert(0, str(SCRIPT_DIR))
|
|
16
|
-
|
|
17
|
-
import harness_knowledge as hk # noqa: E402
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
TOOL_DESCRIPTIONS: list[dict[str, Any]] = [
|
|
21
|
-
{
|
|
22
|
-
"name": "harness_knowledge_ingest",
|
|
23
|
-
"description": "Build or refresh a project-local .harness/knowledge index from .harness/archive.",
|
|
24
|
-
"inputSchema": {
|
|
25
|
-
"type": "object",
|
|
26
|
-
"properties": {
|
|
27
|
-
"project": {"type": "string", "description": "Project root containing .harness/archive."},
|
|
28
|
-
"incremental": {"type": "boolean", "default": True, "description": "Reuse cached archive extraction results when valid."},
|
|
29
|
-
},
|
|
30
|
-
"required": ["project"],
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"name": "harness_knowledge_sync",
|
|
35
|
-
"description": "Check whether .harness/knowledge is current, optionally refreshing stale indexes.",
|
|
36
|
-
"inputSchema": {
|
|
37
|
-
"type": "object",
|
|
38
|
-
"properties": {
|
|
39
|
-
"project": {"type": "string", "description": "Project root containing .harness/archive."},
|
|
40
|
-
"update": {"type": "boolean", "default": False, "description": "Refresh the index when it is out of date."},
|
|
41
|
-
"incremental": {"type": "boolean", "default": True, "description": "Use incremental extraction when update is true."},
|
|
42
|
-
},
|
|
43
|
-
"required": ["project"],
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"name": "harness_knowledge_auto",
|
|
48
|
-
"description": "Run the default automated knowledge maintenance workflow: create config when missing, sync, suggest validators, verify, and audit.",
|
|
49
|
-
"inputSchema": {
|
|
50
|
-
"type": "object",
|
|
51
|
-
"properties": {
|
|
52
|
-
"project": {"type": "string", "description": "Project root containing .harness/archive."},
|
|
53
|
-
"limit": {"type": "integer", "default": 20, "minimum": 1, "maximum": 100},
|
|
54
|
-
"suggest_statuses": {"type": "array", "items": {"type": "string"}, "default": []},
|
|
55
|
-
"apply_suggestions": {"type": "boolean", "default": True, "description": "Write validator suggestions into entry JSON files (default on)."},
|
|
56
|
-
"incremental": {"type": "boolean", "default": True, "description": "Reuse cached archive extraction results when refreshing."},
|
|
57
|
-
"audit_limit": {"type": "integer", "default": 10, "minimum": 1, "maximum": 100},
|
|
58
|
-
},
|
|
59
|
-
"required": ["project"],
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"name": "harness_knowledge_audit",
|
|
64
|
-
"description": "Generate review lists for candidate, stale, superseded, and conflicted knowledge.",
|
|
65
|
-
"inputSchema": {
|
|
66
|
-
"type": "object",
|
|
67
|
-
"properties": {
|
|
68
|
-
"project": {"type": "string", "description": "Project root containing .harness/knowledge."},
|
|
69
|
-
"limit": {"type": "integer", "default": 10, "minimum": 1, "maximum": 100},
|
|
70
|
-
},
|
|
71
|
-
"required": ["project"],
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"name": "harness_knowledge_verify",
|
|
76
|
-
"description": "Run configured validators against knowledge entries and refresh verification reports.",
|
|
77
|
-
"inputSchema": {
|
|
78
|
-
"type": "object",
|
|
79
|
-
"properties": {
|
|
80
|
-
"project": {"type": "string", "description": "Project root containing .harness/knowledge."},
|
|
81
|
-
},
|
|
82
|
-
"required": ["project"],
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
"name": "harness_knowledge_suggest_validators",
|
|
87
|
-
"description": "Suggest deterministic validators for knowledge entries, optionally applying them.",
|
|
88
|
-
"inputSchema": {
|
|
89
|
-
"type": "object",
|
|
90
|
-
"properties": {
|
|
91
|
-
"project": {"type": "string", "description": "Project root containing .harness/knowledge."},
|
|
92
|
-
"limit": {"type": "integer", "default": 20, "minimum": 1, "maximum": 100},
|
|
93
|
-
"statuses": {"type": "array", "items": {"type": "string"}, "default": []},
|
|
94
|
-
"apply": {"type": "boolean", "default": False, "description": "Write suggestions into entry JSON files."},
|
|
95
|
-
},
|
|
96
|
-
"required": ["project"],
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
"name": "harness_knowledge_query",
|
|
101
|
-
"description": "Search .harness/knowledge and generate a context pack for planning or implementation.",
|
|
102
|
-
"inputSchema": {
|
|
103
|
-
"type": "object",
|
|
104
|
-
"properties": {
|
|
105
|
-
"project": {"type": "string", "description": "Project root containing .harness/knowledge."},
|
|
106
|
-
"query": {"type": "string", "description": "Need, question, keyword, or file path to search."},
|
|
107
|
-
"limit": {"type": "integer", "default": 10, "minimum": 1, "maximum": 100},
|
|
108
|
-
"files": {"type": "array", "items": {"type": "string"}, "default": []},
|
|
109
|
-
"statuses": {"type": "array", "items": {"type": "string"}, "default": []},
|
|
110
|
-
"types": {"type": "array", "items": {"type": "string"}, "default": []},
|
|
111
|
-
},
|
|
112
|
-
"required": ["project", "query"],
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"name": "harness_knowledge_promote",
|
|
117
|
-
"description": "Promote a candidate knowledge entry to active after manual confirmation.",
|
|
118
|
-
"inputSchema": {
|
|
119
|
-
"type": "object",
|
|
120
|
-
"properties": {
|
|
121
|
-
"project": {"type": "string", "description": "Project root containing .harness/knowledge."},
|
|
122
|
-
"entry_id": {"type": "string", "description": "Knowledge entry id to promote."},
|
|
123
|
-
"note": {"type": "string", "default": "", "description": "Manual verification note."},
|
|
124
|
-
"allow_stale": {"type": "boolean", "default": False, "description": "Allow promoting a stale entry after manual verification."},
|
|
125
|
-
},
|
|
126
|
-
"required": ["project", "entry_id"],
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"name": "harness_knowledge_demote",
|
|
131
|
-
"description": "Demote an active knowledge entry to stale or candidate after manual review.",
|
|
132
|
-
"inputSchema": {
|
|
133
|
-
"type": "object",
|
|
134
|
-
"properties": {
|
|
135
|
-
"project": {"type": "string", "description": "Project root containing .harness/knowledge."},
|
|
136
|
-
"entry_id": {"type": "string", "description": "Active knowledge entry id to demote."},
|
|
137
|
-
"status": {"type": "string", "enum": ["candidate", "stale"], "description": "Target lifecycle status."},
|
|
138
|
-
"reason": {"type": "string", "description": "Manual demotion reason."},
|
|
139
|
-
},
|
|
140
|
-
"required": ["project", "entry_id", "status", "reason"],
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
]
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
def describe_tools() -> dict[str, Any]:
|
|
147
|
-
return {
|
|
148
|
-
"server": "harness-knowledge",
|
|
149
|
-
"transport": "stdio",
|
|
150
|
-
"tools": TOOL_DESCRIPTIONS,
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
def create_server() -> Any:
|
|
155
|
-
try:
|
|
156
|
-
from mcp.server.fastmcp import FastMCP
|
|
157
|
-
except Exception as exc: # pragma: no cover - exercised when SDK is absent
|
|
158
|
-
raise RuntimeError(
|
|
159
|
-
"Python package 'mcp' with FastMCP support is required to run the MCP server. "
|
|
160
|
-
"Use --describe-tools for static tool metadata."
|
|
161
|
-
) from exc
|
|
162
|
-
|
|
163
|
-
server = FastMCP(
|
|
164
|
-
"harness-knowledge",
|
|
165
|
-
instructions=(
|
|
166
|
-
"Use these tools to maintain and query project-local Harness knowledge. "
|
|
167
|
-
"Treat candidate and stale entries as historical context until verified."
|
|
168
|
-
),
|
|
169
|
-
)
|
|
170
|
-
|
|
171
|
-
@server.tool(description=TOOL_DESCRIPTIONS[0]["description"])
|
|
172
|
-
def harness_knowledge_ingest(project: str, incremental: bool = True) -> dict[str, Any]:
|
|
173
|
-
return hk.summarize_index(hk.build_index(Path(project), incremental=incremental))
|
|
174
|
-
|
|
175
|
-
@server.tool(description=TOOL_DESCRIPTIONS[1]["description"])
|
|
176
|
-
def harness_knowledge_sync(project: str, update: bool = False, incremental: bool = True) -> dict[str, Any]:
|
|
177
|
-
return hk.sync_status(Path(project), update=update, incremental=incremental)
|
|
178
|
-
|
|
179
|
-
@server.tool(description=TOOL_DESCRIPTIONS[2]["description"])
|
|
180
|
-
def harness_knowledge_auto(
|
|
181
|
-
project: str,
|
|
182
|
-
limit: int = 20,
|
|
183
|
-
suggest_statuses: list[str] | None = None,
|
|
184
|
-
apply_suggestions: bool = True,
|
|
185
|
-
incremental: bool = True,
|
|
186
|
-
audit_limit: int = 10,
|
|
187
|
-
) -> dict[str, Any]:
|
|
188
|
-
return hk.auto_knowledge(
|
|
189
|
-
Path(project),
|
|
190
|
-
limit=limit,
|
|
191
|
-
suggest_statuses=suggest_statuses or [],
|
|
192
|
-
apply_suggestions=apply_suggestions,
|
|
193
|
-
incremental=incremental,
|
|
194
|
-
audit_limit=audit_limit,
|
|
195
|
-
)
|
|
196
|
-
|
|
197
|
-
@server.tool(description=TOOL_DESCRIPTIONS[3]["description"])
|
|
198
|
-
def harness_knowledge_audit(project: str, limit: int = 10) -> dict[str, Any]:
|
|
199
|
-
return hk.audit_entries(Path(project), limit=limit)
|
|
200
|
-
|
|
201
|
-
@server.tool(description=TOOL_DESCRIPTIONS[4]["description"])
|
|
202
|
-
def harness_knowledge_verify(project: str) -> dict[str, Any]:
|
|
203
|
-
return hk.verify_knowledge(Path(project))
|
|
204
|
-
|
|
205
|
-
@server.tool(description=TOOL_DESCRIPTIONS[5]["description"])
|
|
206
|
-
def harness_knowledge_suggest_validators(
|
|
207
|
-
project: str,
|
|
208
|
-
limit: int = 20,
|
|
209
|
-
statuses: list[str] | None = None,
|
|
210
|
-
apply: bool = False,
|
|
211
|
-
) -> dict[str, Any]:
|
|
212
|
-
return hk.suggest_validators(Path(project), limit=limit, statuses=statuses or [], apply=apply)
|
|
213
|
-
|
|
214
|
-
@server.tool(description=TOOL_DESCRIPTIONS[6]["description"])
|
|
215
|
-
def harness_knowledge_query(
|
|
216
|
-
project: str,
|
|
217
|
-
query: str,
|
|
218
|
-
limit: int = 10,
|
|
219
|
-
files: list[str] | None = None,
|
|
220
|
-
statuses: list[str] | None = None,
|
|
221
|
-
types: list[str] | None = None,
|
|
222
|
-
change_id: str | None = None,
|
|
223
|
-
) -> dict[str, Any]:
|
|
224
|
-
return hk.query_index(
|
|
225
|
-
Path(project),
|
|
226
|
-
query,
|
|
227
|
-
limit=limit,
|
|
228
|
-
file_filters=files or [],
|
|
229
|
-
statuses=statuses or [],
|
|
230
|
-
types=types or [],
|
|
231
|
-
change_id=change_id,
|
|
232
|
-
)
|
|
233
|
-
|
|
234
|
-
@server.tool(description=TOOL_DESCRIPTIONS[7]["description"])
|
|
235
|
-
def harness_knowledge_promote(
|
|
236
|
-
project: str,
|
|
237
|
-
entry_id: str,
|
|
238
|
-
note: str = "",
|
|
239
|
-
allow_stale: bool = False,
|
|
240
|
-
) -> dict[str, Any]:
|
|
241
|
-
return hk.promote_entry(Path(project), entry_id, note, allow_stale=allow_stale)
|
|
242
|
-
|
|
243
|
-
@server.tool(description=TOOL_DESCRIPTIONS[8]["description"])
|
|
244
|
-
def harness_knowledge_demote(
|
|
245
|
-
project: str,
|
|
246
|
-
entry_id: str,
|
|
247
|
-
status: str,
|
|
248
|
-
reason: str,
|
|
249
|
-
) -> dict[str, Any]:
|
|
250
|
-
return hk.demote_entry(Path(project), entry_id, status, reason)
|
|
251
|
-
|
|
252
|
-
return server
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
def main(argv: list[str] | None = None) -> int:
|
|
256
|
-
parser = argparse.ArgumentParser(description="Run the Harness knowledge MCP server.")
|
|
257
|
-
parser.add_argument("--describe-tools", action="store_true", help="Print static MCP tool metadata as JSON and exit.")
|
|
258
|
-
parser.add_argument("--transport", choices=["stdio", "sse", "streamable-http"], default="stdio")
|
|
259
|
-
args = parser.parse_args(argv)
|
|
260
|
-
|
|
261
|
-
if args.describe_tools:
|
|
262
|
-
print(json.dumps(describe_tools(), ensure_ascii=False, indent=2))
|
|
263
|
-
return 0
|
|
264
|
-
|
|
265
|
-
try:
|
|
266
|
-
server = create_server()
|
|
267
|
-
except RuntimeError as exc:
|
|
268
|
-
print(str(exc), file=sys.stderr)
|
|
269
|
-
return 1
|
|
270
|
-
server.run(transport=args.transport)
|
|
271
|
-
return 0
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if __name__ == "__main__":
|
|
275
|
-
raise SystemExit(main())
|