@uzysjung/agent-harness 26.168.0 → 26.169.0
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/README.ko.md +2 -2
- package/README.md +2 -2
- package/dist/{chunk-V4UY222W.js → chunk-SU2RUN2W.js} +63 -87
- package/dist/chunk-SU2RUN2W.js.map +1 -0
- package/dist/index.js +1643 -966
- package/dist/index.js.map +1 -1
- package/dist/trust-tier-drift.js +5 -2
- package/dist/trust-tier-drift.js.map +1 -1
- package/package.json +1 -1
- package/templates/CLAUDE.md +7 -0
- package/templates/mcp.json +2 -8
- package/templates/track-mcp-map.tsv +3 -1
- package/dist/chunk-V4UY222W.js.map +0 -1
package/dist/trust-tier-drift.js
CHANGED
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
init_esm_shims,
|
|
18
18
|
residentCost,
|
|
19
19
|
resolveBundleRoot
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-SU2RUN2W.js";
|
|
21
21
|
|
|
22
22
|
// src/trust-tier-drift.ts
|
|
23
23
|
init_esm_shims();
|
|
@@ -39,7 +39,10 @@ var REPO_OVERRIDE = {
|
|
|
39
39
|
"railway-mcp-server": "railwayapp/cli",
|
|
40
40
|
"chrome-devtools": "ChromeDevTools/chrome-devtools-mcp",
|
|
41
41
|
"github-mcp": "github/github-mcp-server",
|
|
42
|
-
vercel: "vercel/vercel"
|
|
42
|
+
vercel: "vercel/vercel",
|
|
43
|
+
// #751 — 남은 기본 서버 둘
|
|
44
|
+
context7: "upstash/context7",
|
|
45
|
+
supabase: "supabase/mcp"
|
|
43
46
|
};
|
|
44
47
|
function normalizeRepo(source) {
|
|
45
48
|
const stripped = source.replace(/^https?:\/\/github\.com\//i, "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/trust-tier-drift.ts"],"sourcesContent":["/**\n * A1 — Trust Tier star-drift 검출 데이터 + 순수 로직.\n *\n * TRUST_TIER 의 star 기반 라벨(vetted ≥ 1000★ / experimental < 1000★)이 실제 GitHub\n * star 와 어긋났는지(drift) 판정한다. `official` 은 star 무관(Anthropic 공식·하네스 자체)\n * 이라 검사 제외.\n *\n * repo 출처 = 각 자산 method (in-code authoritative — 주석이 아니라 실제 설치 source):\n * skill → method.source (\"owner/repo\" 또는 github URL)\n * plugin → method.marketplace (\"owner/repo\")\n * npm → NPM_REPO_OVERRIDE[id] (pkg 는 npm 명이므로 GitHub repo 를 별도 명시)\n *\n * fetch/네트워크는 본 모듈에 없음 — 순수 로직만(테스트 가능). 실 fetch 는\n * `scripts/trust-tier-drift.mjs` 가 담당.\n */\nimport { EXTERNAL_ASSETS, type ExternalAsset, TRUST_TIER } from \"./external-assets.js\";\n\n// v26.79.0 — gen-compatibility 의 카테고리 exhaustiveness 가드용 SSOT (하드코딩 drift 차단).\nexport { CATEGORIES } from \"./categories.js\";\n// v26.116.0 (ADR-043) — context-cost-report.mjs 가 dist 에서 비용 계측기를 읽도록 re-export.\n// v26.140.0 — formatResidentCostBlock: 리포트가 표를 직접 조립하지 않도록 표시 계약도 함께 노출.\nexport {\n assetCostRows,\n estimateTokens,\n formatResidentCostBlock,\n residentCost,\n resolveBundleRoot,\n} from \"./context-cost.js\";\n// v26.76.0 — gen-compatibility.mjs 가 dist 에서 자산 카탈로그+tier 를 읽도록 re-export.\n// v26.93.0 — DEV_METHOD_SKILL_IDS 추가: gen-compatibility 의 CLI scope override 를\n// 하드코딩 id 목록 대신 SSOT 에서 derive (no-false-ship drift 구조 차단).\n// v26.95.0 — INTERNAL_BUNDLED_SKILL_IDS (dev-method + opt-in gemini-consult) 로 CLI scope derive.\nexport {\n // v26.102.0 (ADR-031) — gen-compatibility 의 CLI 열이 도달 범위를 derive 하도록 re-export.\n assetCliSupport,\n DEV_METHOD_SKILL_IDS,\n EXTERNAL_ASSETS,\n INTERNAL_BUNDLED_SKILL_IDS,\n TRUST_TIER,\n} from \"./external-assets.js\";\nexport { buildAssetSpec, buildManifest } from \"./manifest.js\";\n// v26.102.0 (ADR-031) — 도달 라벨(\"N-CLI\")의 N 을 derive 하기 위한 re-export (매직 넘버 금지).\nexport { CLI_BASES, DEFAULT_OPTIONS, TRACKS } from \"./types.js\";\n\n/** vetted 경계 (NORTH_STAR / PRD v26-71 D2). */\nexport const STAR_THRESHOLD = 1000;\n\nexport type StarTier = \"vetted\" | \"experimental\";\nexport type DriftVerdict = \"ok\" | \"promote\" | \"demote\";\n\n/**\n * method 가 GitHub repo 를 안 담는 자산(npm.pkg / npx-run.cmd 는 npm 명) → 트러스트 근거가\n * 된 GitHub repo 를 명시 매핑. override 가 method 도출보다 우선.\n */\nconst REPO_OVERRIDE: Record<string, string> = {\n \"vercel-cli\": \"vercel/vercel\", // npm\n \"netlify-cli\": \"netlify/cli\", // npm\n \"supabase-cli\": \"supabase/cli\", // npm\n \"agent-browser\": \"vercel-labs/agent-browser\", // npm\n openspec: \"Fission-AI/OpenSpec\", // npm (v26.75.0)\n \"bmad-method\": \"bmad-code-org/BMAD-METHOD\", // npx-run (v26.75.0)\n // internal — 트랙 표 MCP 행(#709 · #722). 원격 서버에 공개 저장소가 따로 없으면 같은 벤더의 공개 저장소를 감시한다(ADR-106)\n \"railway-mcp-server\": \"railwayapp/cli\",\n \"chrome-devtools\": \"ChromeDevTools/chrome-devtools-mcp\",\n \"github-mcp\": \"github/github-mcp-server\",\n vercel: \"vercel/vercel\",\n};\n\n/** \"https://github.com/owner/repo\" 또는 \"owner/repo[/...]\" → \"owner/repo\". 실패 시 null. */\nexport function normalizeRepo(source: string): string | null {\n const stripped = source.replace(/^https?:\\/\\/github\\.com\\//i, \"\");\n const m = stripped.match(/^([^/\\s]+\\/[^/\\s]+)/);\n return m?.[1] ?? null;\n}\n\n/** 자산의 GitHub owner/repo 도출. override 우선 → skill/plugin method. 도출 불가 시 null. */\nexport function repoForAsset(asset: ExternalAsset): string | null {\n const override = REPO_OVERRIDE[asset.id];\n if (override) return override;\n const m = asset.method;\n if (m.kind === \"skill\") return normalizeRepo(m.source);\n if (m.kind === \"plugin\") return normalizeRepo(m.marketplace);\n return null;\n}\n\nexport interface DriftTarget {\n id: string;\n tier: StarTier;\n repo: string;\n}\n\n/** star 기반(vetted/experimental) 자산만 + repo 도출 가능한 것만 검사 대상. */\nexport function driftTargets(\n assets: ReadonlyArray<ExternalAsset> = EXTERNAL_ASSETS,\n): DriftTarget[] {\n const out: DriftTarget[] = [];\n for (const a of assets) {\n const tier = TRUST_TIER[a.id];\n if (tier !== \"vetted\" && tier !== \"experimental\") continue;\n const repo = repoForAsset(a);\n if (!repo) continue; // 도출 불가 — 테스트가 0건을 강제하므로 정상 경로에선 발생 안 함\n out.push({ id: a.id, tier, repo });\n }\n return out;\n}\n\n/** 정적 tier 가 실제 star 와 어긋났는지 판정. */\nexport function classifyDrift(tier: StarTier, stars: number): DriftVerdict {\n if (tier === \"vetted\" && stars < STAR_THRESHOLD) return \"demote\";\n if (tier === \"experimental\" && stars >= STAR_THRESHOLD) return \"promote\";\n return \"ok\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AA6CO,IAAM,iBAAiB;AAS9B,IAAM,gBAAwC;AAAA,EAC5C,cAAc;AAAA;AAAA,EACd,eAAe;AAAA;AAAA,EACf,gBAAgB;AAAA;AAAA,EAChB,iBAAiB;AAAA;AAAA,EACjB,UAAU;AAAA;AAAA,EACV,eAAe;AAAA;AAAA;AAAA,EAEf,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,QAAQ;
|
|
1
|
+
{"version":3,"sources":["../src/trust-tier-drift.ts"],"sourcesContent":["/**\n * A1 — Trust Tier star-drift 검출 데이터 + 순수 로직.\n *\n * TRUST_TIER 의 star 기반 라벨(vetted ≥ 1000★ / experimental < 1000★)이 실제 GitHub\n * star 와 어긋났는지(drift) 판정한다. `official` 은 star 무관(Anthropic 공식·하네스 자체)\n * 이라 검사 제외.\n *\n * repo 출처 = 각 자산 method (in-code authoritative — 주석이 아니라 실제 설치 source):\n * skill → method.source (\"owner/repo\" 또는 github URL)\n * plugin → method.marketplace (\"owner/repo\")\n * npm → NPM_REPO_OVERRIDE[id] (pkg 는 npm 명이므로 GitHub repo 를 별도 명시)\n *\n * fetch/네트워크는 본 모듈에 없음 — 순수 로직만(테스트 가능). 실 fetch 는\n * `scripts/trust-tier-drift.mjs` 가 담당.\n */\nimport { EXTERNAL_ASSETS, type ExternalAsset, TRUST_TIER } from \"./external-assets.js\";\n\n// v26.79.0 — gen-compatibility 의 카테고리 exhaustiveness 가드용 SSOT (하드코딩 drift 차단).\nexport { CATEGORIES } from \"./categories.js\";\n// v26.116.0 (ADR-043) — context-cost-report.mjs 가 dist 에서 비용 계측기를 읽도록 re-export.\n// v26.140.0 — formatResidentCostBlock: 리포트가 표를 직접 조립하지 않도록 표시 계약도 함께 노출.\nexport {\n assetCostRows,\n estimateTokens,\n formatResidentCostBlock,\n residentCost,\n resolveBundleRoot,\n} from \"./context-cost.js\";\n// v26.76.0 — gen-compatibility.mjs 가 dist 에서 자산 카탈로그+tier 를 읽도록 re-export.\n// v26.93.0 — DEV_METHOD_SKILL_IDS 추가: gen-compatibility 의 CLI scope override 를\n// 하드코딩 id 목록 대신 SSOT 에서 derive (no-false-ship drift 구조 차단).\n// v26.95.0 — INTERNAL_BUNDLED_SKILL_IDS (dev-method + opt-in gemini-consult) 로 CLI scope derive.\nexport {\n // v26.102.0 (ADR-031) — gen-compatibility 의 CLI 열이 도달 범위를 derive 하도록 re-export.\n assetCliSupport,\n DEV_METHOD_SKILL_IDS,\n EXTERNAL_ASSETS,\n INTERNAL_BUNDLED_SKILL_IDS,\n TRUST_TIER,\n} from \"./external-assets.js\";\nexport { buildAssetSpec, buildManifest } from \"./manifest.js\";\n// v26.102.0 (ADR-031) — 도달 라벨(\"N-CLI\")의 N 을 derive 하기 위한 re-export (매직 넘버 금지).\nexport { CLI_BASES, DEFAULT_OPTIONS, TRACKS } from \"./types.js\";\n\n/** vetted 경계 (NORTH_STAR / PRD v26-71 D2). */\nexport const STAR_THRESHOLD = 1000;\n\nexport type StarTier = \"vetted\" | \"experimental\";\nexport type DriftVerdict = \"ok\" | \"promote\" | \"demote\";\n\n/**\n * method 가 GitHub repo 를 안 담는 자산(npm.pkg / npx-run.cmd 는 npm 명) → 트러스트 근거가\n * 된 GitHub repo 를 명시 매핑. override 가 method 도출보다 우선.\n */\nconst REPO_OVERRIDE: Record<string, string> = {\n \"vercel-cli\": \"vercel/vercel\", // npm\n \"netlify-cli\": \"netlify/cli\", // npm\n \"supabase-cli\": \"supabase/cli\", // npm\n \"agent-browser\": \"vercel-labs/agent-browser\", // npm\n openspec: \"Fission-AI/OpenSpec\", // npm (v26.75.0)\n \"bmad-method\": \"bmad-code-org/BMAD-METHOD\", // npx-run (v26.75.0)\n // internal — 트랙 표 MCP 행(#709 · #722). 원격 서버에 공개 저장소가 따로 없으면 같은 벤더의 공개 저장소를 감시한다(ADR-106)\n \"railway-mcp-server\": \"railwayapp/cli\",\n \"chrome-devtools\": \"ChromeDevTools/chrome-devtools-mcp\",\n \"github-mcp\": \"github/github-mcp-server\",\n vercel: \"vercel/vercel\",\n // #751 — 남은 기본 서버 둘\n context7: \"upstash/context7\",\n supabase: \"supabase/mcp\",\n};\n\n/** \"https://github.com/owner/repo\" 또는 \"owner/repo[/...]\" → \"owner/repo\". 실패 시 null. */\nexport function normalizeRepo(source: string): string | null {\n const stripped = source.replace(/^https?:\\/\\/github\\.com\\//i, \"\");\n const m = stripped.match(/^([^/\\s]+\\/[^/\\s]+)/);\n return m?.[1] ?? null;\n}\n\n/** 자산의 GitHub owner/repo 도출. override 우선 → skill/plugin method. 도출 불가 시 null. */\nexport function repoForAsset(asset: ExternalAsset): string | null {\n const override = REPO_OVERRIDE[asset.id];\n if (override) return override;\n const m = asset.method;\n if (m.kind === \"skill\") return normalizeRepo(m.source);\n if (m.kind === \"plugin\") return normalizeRepo(m.marketplace);\n return null;\n}\n\nexport interface DriftTarget {\n id: string;\n tier: StarTier;\n repo: string;\n}\n\n/** star 기반(vetted/experimental) 자산만 + repo 도출 가능한 것만 검사 대상. */\nexport function driftTargets(\n assets: ReadonlyArray<ExternalAsset> = EXTERNAL_ASSETS,\n): DriftTarget[] {\n const out: DriftTarget[] = [];\n for (const a of assets) {\n const tier = TRUST_TIER[a.id];\n if (tier !== \"vetted\" && tier !== \"experimental\") continue;\n const repo = repoForAsset(a);\n if (!repo) continue; // 도출 불가 — 테스트가 0건을 강제하므로 정상 경로에선 발생 안 함\n out.push({ id: a.id, tier, repo });\n }\n return out;\n}\n\n/** 정적 tier 가 실제 star 와 어긋났는지 판정. */\nexport function classifyDrift(tier: StarTier, stars: number): DriftVerdict {\n if (tier === \"vetted\" && stars < STAR_THRESHOLD) return \"demote\";\n if (tier === \"experimental\" && stars >= STAR_THRESHOLD) return \"promote\";\n return \"ok\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AA6CO,IAAM,iBAAiB;AAS9B,IAAM,gBAAwC;AAAA,EAC5C,cAAc;AAAA;AAAA,EACd,eAAe;AAAA;AAAA,EACf,gBAAgB;AAAA;AAAA,EAChB,iBAAiB;AAAA;AAAA,EACjB,UAAU;AAAA;AAAA,EACV,eAAe;AAAA;AAAA;AAAA,EAEf,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,QAAQ;AAAA;AAAA,EAER,UAAU;AAAA,EACV,UAAU;AACZ;AAGO,SAAS,cAAc,QAA+B;AAC3D,QAAM,WAAW,OAAO,QAAQ,8BAA8B,EAAE;AAChE,QAAM,IAAI,SAAS,MAAM,qBAAqB;AAC9C,SAAO,IAAI,CAAC,KAAK;AACnB;AAGO,SAAS,aAAa,OAAqC;AAChE,QAAM,WAAW,cAAc,MAAM,EAAE;AACvC,MAAI,SAAU,QAAO;AACrB,QAAM,IAAI,MAAM;AAChB,MAAI,EAAE,SAAS,QAAS,QAAO,cAAc,EAAE,MAAM;AACrD,MAAI,EAAE,SAAS,SAAU,QAAO,cAAc,EAAE,WAAW;AAC3D,SAAO;AACT;AASO,SAAS,aACd,SAAuC,iBACxB;AACf,QAAM,MAAqB,CAAC;AAC5B,aAAW,KAAK,QAAQ;AACtB,UAAM,OAAO,WAAW,EAAE,EAAE;AAC5B,QAAI,SAAS,YAAY,SAAS,eAAgB;AAClD,UAAM,OAAO,aAAa,CAAC;AAC3B,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,KAAK,CAAC;AAAA,EACnC;AACA,SAAO;AACT;AAGO,SAAS,cAAc,MAAgB,OAA6B;AACzE,MAAI,SAAS,YAAY,QAAQ,eAAgB,QAAO;AACxD,MAAI,SAAS,kBAAkB,SAAS,eAAgB,QAAO;AAC/D,SAAO;AACT;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uzysjung/agent-harness",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.169.0",
|
|
4
4
|
"description": "Curate vetted AI-coding skills & plugins by your tech stack — install only what you need, across Claude Code, Codex, OpenCode & Antigravity",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
package/templates/CLAUDE.md
CHANGED
|
@@ -33,6 +33,13 @@ Treat methods as replaceable. Improve or replace them when new evidence,
|
|
|
33
33
|
capabilities, or circumstances offer a better path to the same required outcomes
|
|
34
34
|
and protections.
|
|
35
35
|
|
|
36
|
+
For multi-part work, derive user or operational outcomes from the current request and
|
|
37
|
+
applicable plans, designs, or agreed briefs. Divide them into coherent units described
|
|
38
|
+
well enough to start and verify without re-deriving the plan; sequence by dependencies
|
|
39
|
+
and agreed priorities. Where authorized, preserve material decisions and acceptance
|
|
40
|
+
evidence in existing project records, and judge completion by evidenced required results
|
|
41
|
+
and protections rather than closed units.
|
|
42
|
+
|
|
36
43
|
## 3. Keep changes focused and coherent
|
|
37
44
|
|
|
38
45
|
Let scope follow what the requested outcome genuinely needs, including necessary
|
package/templates/mcp.json
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "프로젝트 .mcp.json 의 모든 트랙 기본
|
|
3
|
-
"mcpServers": {
|
|
4
|
-
"context7": {
|
|
5
|
-
"type": "stdio",
|
|
6
|
-
"command": "npx",
|
|
7
|
-
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
8
|
-
}
|
|
9
|
-
}
|
|
2
|
+
"_comment": "프로젝트 .mcp.json 의 바탕. 하네스 서버는 전부 track-mcp-map.tsv 한 곳이 정한다(모든 트랙 기본 = 패턴 `*`, #751) — 그래야 위저드 · --without <id> 로 고르고 뺄 수 있다. 글로벌 ~/.claude/는 절대 건드리지 않음.",
|
|
3
|
+
"mcpServers": {}
|
|
10
4
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# - mcp_name: .mcp.json의 mcpServers[키]
|
|
8
8
|
# - track_pattern: any_track 패턴 (csr-*|full 같은 bash glob). 패턴은 **기본** 트랙이다 — 같은 이름의
|
|
9
9
|
# 카탈로그 `internal` 자산이 있으면 그 서버는 어느 트랙에서든 `--with <id>`/위저드로 고를 수 있다(#709).
|
|
10
|
+
# `*` = 모든 트랙의 기본이다(#751 — context7. 위저드 3단계에 체크된 채 보이고 `--without <id>` 로 뺀다).
|
|
10
11
|
# `-` = 어느 트랙에서도 기본이 아니다 — 같은 이름의 카탈로그 internal 자산으로만 고른다(#722 · ADR-106)
|
|
11
12
|
# - command: 실행 명령 (npx 등). 리터럴 `url` 이면 원격(Streamable HTTP) 행이다
|
|
12
13
|
# - args_json: jq 인자 배열 (JSON 형식). 원격 행은 {"url":"https://…","bearerEnv":"ENV_NAME"?} —
|
|
@@ -14,8 +15,9 @@
|
|
|
14
15
|
#
|
|
15
16
|
# 신규 MCP 추가 시: 이 파일에 1줄 추가만 하면 setup-harness.sh 수정 불필요.
|
|
16
17
|
# 주석 (#) 라인은 무시.
|
|
18
|
+
context7 * npx ["-y", "@upstash/context7-mcp@latest"]
|
|
17
19
|
railway-mcp-server csr-supabase|csr-fastify|csr-fastapi|ssr-htmx|full url {"url":"https://mcp.railway.com"}
|
|
18
|
-
supabase csr-supabase|full
|
|
20
|
+
supabase csr-supabase|full url {"url":"https://mcp.supabase.com/mcp"}
|
|
19
21
|
chrome-devtools csr-*|ssr-*|full npx ["-y", "chrome-devtools-mcp@latest", "--no-usage-statistics"]
|
|
20
22
|
vercel - url {"url":"https://mcp.vercel.com"}
|
|
21
23
|
github-mcp - url {"url":"https://api.githubcopilot.com/mcp/","bearerEnv":"GITHUB_PAT"}
|