mova-claude-import 0.1.1 → 0.1.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.
- package/README.md +95 -29
- package/control_surface_exclusions_v0.json +8 -0
- package/dist/anthropic_profile_v0.d.ts +1 -1
- package/dist/anthropic_profile_v0.js +1 -0
- package/dist/cli.js +206 -23
- package/dist/control_apply_v0.d.ts +5 -1
- package/dist/control_apply_v0.js +125 -8
- package/dist/control_check_v0.d.ts +1 -0
- package/dist/control_check_v0.js +194 -23
- package/dist/control_prefill_v0.js +128 -9
- package/dist/control_surface_coverage_v0.d.ts +22 -0
- package/dist/control_surface_coverage_v0.js +128 -0
- package/dist/control_v0.d.ts +149 -0
- package/dist/control_v0.js +360 -0
- package/dist/control_v0_schema.d.ts +6 -0
- package/dist/control_v0_schema.js +19 -0
- package/dist/init_v0.d.ts +6 -1
- package/dist/init_v0.js +41 -1
- package/dist/observability_writer_v0.d.ts +1 -0
- package/dist/observability_writer_v0.js +157 -0
- package/dist/observe_v0.d.ts +8 -0
- package/dist/observe_v0.js +57 -0
- package/dist/presets_v0.d.ts +11 -0
- package/dist/presets_v0.js +52 -0
- package/dist/redaction.js +5 -1
- package/dist/run_import.js +111 -26
- package/docs/CLAUDE_CONTROL_SURFACE_MAP_v0.md +78 -0
- package/docs/OPERATOR_GUIDE_v0.md +11 -0
- package/fixtures/pos/basic/mova/control_v0.json +93 -0
- package/fixtures/pos/claude_code_demo_full/.claude/agents/code-reviewer.md +13 -0
- package/fixtures/pos/claude_code_demo_full/.claude/agents/github-workflow.md +10 -0
- package/fixtures/pos/claude_code_demo_full/.claude/commands/code-quality.md +8 -0
- package/fixtures/pos/claude_code_demo_full/.claude/commands/docs-sync.md +8 -0
- package/fixtures/pos/claude_code_demo_full/.claude/commands/onboard.md +8 -0
- package/fixtures/pos/claude_code_demo_full/.claude/commands/pr-review.md +10 -0
- package/fixtures/pos/claude_code_demo_full/.claude/commands/pr-summary.md +8 -0
- package/fixtures/pos/claude_code_demo_full/.claude/commands/ticket.md +10 -0
- package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-eval.js +13 -0
- package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-eval.sh +15 -0
- package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-rules.json +21 -0
- package/fixtures/pos/claude_code_demo_full/.claude/hooks/skill-rules.schema.json +24 -0
- package/fixtures/pos/claude_code_demo_full/.claude/rules/code-style.md +5 -0
- package/fixtures/pos/claude_code_demo_full/.claude/rules/security.md +5 -0
- package/fixtures/pos/claude_code_demo_full/.claude/settings.json +102 -0
- package/fixtures/pos/claude_code_demo_full/.claude/settings.md +6 -0
- package/fixtures/pos/claude_code_demo_full/.claude/skills/core-components/SKILL.md +9 -0
- package/fixtures/pos/claude_code_demo_full/.claude/skills/formik-patterns/SKILL.md +9 -0
- package/fixtures/pos/claude_code_demo_full/.claude/skills/graphql-schema/SKILL.md +10 -0
- package/fixtures/pos/claude_code_demo_full/.claude/skills/react-ui-patterns/SKILL.md +10 -0
- package/fixtures/pos/claude_code_demo_full/.claude/skills/systematic-debugging/SKILL.md +9 -0
- package/fixtures/pos/claude_code_demo_full/.claude/skills/testing-patterns/SKILL.md +10 -0
- package/fixtures/pos/claude_code_demo_full/.github/workflows/pr-claude-code-review.yml +14 -0
- package/fixtures/pos/claude_code_demo_full/.github/workflows/scheduled-claude-code-dependency-audit.yml +14 -0
- package/fixtures/pos/claude_code_demo_full/.github/workflows/scheduled-claude-code-docs-sync.yml +14 -0
- package/fixtures/pos/claude_code_demo_full/.github/workflows/scheduled-claude-code-quality.yml +14 -0
- package/fixtures/pos/claude_code_demo_full/.mcp.json +44 -0
- package/fixtures/pos/claude_code_demo_full/CLAUDE.md +28 -0
- package/fixtures/pos/control_basic_project/mova/control_v0.json +93 -0
- package/fixtures/pos/observability_basic/CLAUDE.md +3 -0
- package/{.tmp_test_zip/out1 → fixtures/pos/preset_safe_observable_v0}/.mcp.json +3 -3
- package/fixtures/pos/preset_safe_observable_v0/CLAUDE.md +3 -0
- package/package.json +2 -1
- package/presets/safe_observable_v0/assets/.claude/agents/code-reviewer.md +9 -0
- package/presets/safe_observable_v0/assets/.claude/commands/finish.md +9 -0
- package/presets/safe_observable_v0/assets/.claude/commands/start.md +9 -0
- package/presets/safe_observable_v0/assets/.claude/hooks/skill-eval.js +15 -0
- package/presets/safe_observable_v0/assets/.claude/hooks/skill-eval.sh +17 -0
- package/presets/safe_observable_v0/assets/.claude/hooks/skill-rules.json +26 -0
- package/presets/safe_observable_v0/assets/.claude/rules/code-style.md +6 -0
- package/presets/safe_observable_v0/assets/.claude/rules/security.md +6 -0
- package/presets/safe_observable_v0/assets/.claude/skills/git-workflow/SKILL.md +9 -0
- package/presets/safe_observable_v0/assets/.claude/skills/security-basics/SKILL.md +9 -0
- package/presets/safe_observable_v0/assets/.claude/skills/systematic-debugging/SKILL.md +9 -0
- package/presets/safe_observable_v0/assets/.claude/skills/testing-patterns/SKILL.md +9 -0
- package/presets/safe_observable_v0/control_v0.json +214 -0
- package/schemas/mova.control_v0.schema.json +252 -0
- package/src/anthropic_profile_v0.ts +1 -0
- package/src/cli.ts +194 -23
- package/src/control_apply_v0.ts +131 -8
- package/src/control_check_v0.ts +203 -23
- package/src/control_prefill_v0.ts +136 -8
- package/src/control_surface_coverage_v0.ts +164 -0
- package/src/control_v0.ts +808 -0
- package/src/control_v0_schema.ts +26 -0
- package/src/init_v0.ts +48 -1
- package/src/observability_writer_v0.ts +157 -0
- package/src/observe_v0.ts +64 -0
- package/src/presets_v0.ts +58 -0
- package/src/redaction.ts +6 -1
- package/src/run_import.ts +132 -26
- package/test/control_demo_full_roundtrip.test.js +92 -0
- package/test/control_surface_coverage_v0.test.js +36 -0
- package/test/control_v0_schema_validation.test.js +69 -0
- package/test/init_v0.test.js +9 -0
- package/test/observability_writer_v0.test.js +59 -0
- package/test/preset_safe_observable_v0.test.js +55 -0
- package/test/profile_v0_output.test.js +1 -0
- package/test/scaffold_v0_output.test.js +1 -0
- package/tools/control_surface_coverage_v0.mjs +27 -0
- package/tools/smoke_v0.mjs +33 -0
- package/.tmp_test_control_apply/proj/.claude/agents/example_agent.md +0 -3
- package/.tmp_test_control_apply/proj/.claude/commands/example_command.md +0 -3
- package/.tmp_test_control_apply/proj/.claude/hooks/example_hook.sh +0 -2
- package/.tmp_test_control_apply/proj/.claude/output-styles/example_style.md +0 -3
- package/.tmp_test_control_apply/proj/.claude/settings.json +0 -30
- package/.tmp_test_control_apply/proj/.claude/settings.local.example.json +0 -3
- package/.tmp_test_control_apply/proj/.mcp.json +0 -3
- package/.tmp_test_control_apply/proj/CLAUDE.md +0 -13
- package/.tmp_test_control_apply/proj/MOVA.md +0 -3
- package/.tmp_test_control_check/proj/.mcp.json +0 -1
- package/.tmp_test_control_check/proj/CLAUDE.md +0 -1
- package/.tmp_test_control_prefill/out1/claude_control_profile_v0.json +0 -114
- package/.tmp_test_control_prefill/out1/prefill_report_v0.json +0 -13
- package/.tmp_test_control_prefill/out2/claude_control_profile_v0.json +0 -114
- package/.tmp_test_control_prefill/out2/prefill_report_v0.json +0 -13
- package/.tmp_test_overlay/proj/.claude/skills/a.md +0 -1
- package/.tmp_test_overlay/proj/.mcp.json +0 -1
- package/.tmp_test_overlay/proj/CLAUDE.md +0 -1
- package/.tmp_test_profile/proj/.claude/skills/a.md +0 -1
- package/.tmp_test_profile/proj/.mcp.json +0 -1
- package/.tmp_test_profile/proj/CLAUDE.md +0 -1
- package/.tmp_test_scaffold_apply/proj/.claude/agents/example_agent.md +0 -3
- package/.tmp_test_scaffold_apply/proj/.claude/commands/example_command.md +0 -3
- package/.tmp_test_scaffold_apply/proj/.claude/hooks/example_hook.sh +0 -2
- package/.tmp_test_scaffold_apply/proj/.claude/output-styles/example_style.md +0 -3
- package/.tmp_test_scaffold_apply/proj/.claude/settings.json +0 -30
- package/.tmp_test_scaffold_apply/proj/.claude/settings.local.example.json +0 -3
- package/.tmp_test_scaffold_apply/proj/.mcp.json +0 -3
- package/.tmp_test_scaffold_apply/proj/CLAUDE.md +0 -13
- package/.tmp_test_scaffold_apply/proj/MOVA.md +0 -3
- package/.tmp_test_strict/mova/claude_import/v0/VERSION.json +0 -10
- package/.tmp_test_strict/mova/claude_import/v0/episode_import_run.json +0 -20
- package/.tmp_test_strict/mova/claude_import/v0/import_manifest.json +0 -20
- package/.tmp_test_strict/mova/claude_import/v0/input_policy_report_v0.json +0 -32
- package/.tmp_test_zip/out1/.claude/agents/example_agent.md +0 -3
- package/.tmp_test_zip/out1/.claude/commands/example_command.md +0 -3
- package/.tmp_test_zip/out1/.claude/commands/mova_context.md +0 -4
- package/.tmp_test_zip/out1/.claude/commands/mova_lint.md +0 -4
- package/.tmp_test_zip/out1/.claude/commands/mova_proof.md +0 -6
- package/.tmp_test_zip/out1/.claude/hooks/example_hook.sh +0 -2
- package/.tmp_test_zip/out1/.claude/output-styles/example_style.md +0 -3
- package/.tmp_test_zip/out1/.claude/settings.json +0 -30
- package/.tmp_test_zip/out1/.claude/settings.local.example.json +0 -3
- package/.tmp_test_zip/out1/.claude/skills/a/SKILL.md +0 -1
- package/.tmp_test_zip/out1/.claude/skills/mova-control-v0/SKILL.md +0 -11
- package/.tmp_test_zip/out1/.claude/skills/mova-layer-v0/SKILL.md +0 -8
- package/.tmp_test_zip/out1/CLAUDE.md +0 -4
- package/.tmp_test_zip/out1/MOVA.md +0 -10
- package/.tmp_test_zip/out1/export.zip +0 -0
- package/.tmp_test_zip/out1/mova/claude_import/v0/VERSION.json +0 -10
- package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/instruction_profile_v0.json +0 -8
- package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/mcp_servers_v0.json +0 -4
- package/.tmp_test_zip/out1/mova/claude_import/v0/contracts/skills_catalog_v0.json +0 -11
- package/.tmp_test_zip/out1/mova/claude_import/v0/episode_import_run.json +0 -80
- package/.tmp_test_zip/out1/mova/claude_import/v0/export_manifest_v0.json +0 -32
- package/.tmp_test_zip/out1/mova/claude_import/v0/import_manifest.json +0 -33
- package/.tmp_test_zip/out1/mova/claude_import/v0/input_policy_report_v0.json +0 -38
- package/.tmp_test_zip/out1/mova/claude_import/v0/lint_report_v0.json +0 -6
- package/.tmp_test_zip/out1/mova/claude_import/v0/redaction_report.json +0 -4
- package/.tmp_test_zip/out2/.claude/agents/example_agent.md +0 -3
- package/.tmp_test_zip/out2/.claude/commands/example_command.md +0 -3
- package/.tmp_test_zip/out2/.claude/commands/mova_context.md +0 -4
- package/.tmp_test_zip/out2/.claude/commands/mova_lint.md +0 -4
- package/.tmp_test_zip/out2/.claude/commands/mova_proof.md +0 -6
- package/.tmp_test_zip/out2/.claude/hooks/example_hook.sh +0 -2
- package/.tmp_test_zip/out2/.claude/output-styles/example_style.md +0 -3
- package/.tmp_test_zip/out2/.claude/settings.json +0 -30
- package/.tmp_test_zip/out2/.claude/settings.local.example.json +0 -3
- package/.tmp_test_zip/out2/.claude/skills/a/SKILL.md +0 -1
- package/.tmp_test_zip/out2/.claude/skills/mova-control-v0/SKILL.md +0 -11
- package/.tmp_test_zip/out2/.claude/skills/mova-layer-v0/SKILL.md +0 -8
- package/.tmp_test_zip/out2/.mcp.json +0 -3
- package/.tmp_test_zip/out2/CLAUDE.md +0 -4
- package/.tmp_test_zip/out2/MOVA.md +0 -10
- package/.tmp_test_zip/out2/export.zip +0 -0
- package/.tmp_test_zip/out2/mova/claude_import/v0/VERSION.json +0 -10
- package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/instruction_profile_v0.json +0 -8
- package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/mcp_servers_v0.json +0 -4
- package/.tmp_test_zip/out2/mova/claude_import/v0/contracts/skills_catalog_v0.json +0 -11
- package/.tmp_test_zip/out2/mova/claude_import/v0/episode_import_run.json +0 -80
- package/.tmp_test_zip/out2/mova/claude_import/v0/export_manifest_v0.json +0 -32
- package/.tmp_test_zip/out2/mova/claude_import/v0/import_manifest.json +0 -33
- package/.tmp_test_zip/out2/mova/claude_import/v0/input_policy_report_v0.json +0 -38
- package/.tmp_test_zip/out2/mova/claude_import/v0/lint_report_v0.json +0 -6
- package/.tmp_test_zip/out2/mova/claude_import/v0/redaction_report.json +0 -4
- package/.tmp_test_zip/proj/.claude/skills/a.md +0 -1
- package/.tmp_test_zip/proj/.mcp.json +0 -1
- package/.tmp_test_zip/proj/CLAUDE.md +0 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://mova.dev/schemas/mova.control_v0.schema.json",
|
|
3
|
+
"version": "control_v0",
|
|
4
|
+
"claude_md": {
|
|
5
|
+
"inject_control_entry": true,
|
|
6
|
+
"marker": "<!-- MOVA_CONTROL_ENTRY_V0 -->",
|
|
7
|
+
"priority_sources": ["CLAUDE.md", ".claude/CLAUDE.md", "~/.claude/CLAUDE.md"]
|
|
8
|
+
},
|
|
9
|
+
"claude_memory": {
|
|
10
|
+
"enable": true,
|
|
11
|
+
"sources": ["CLAUDE.md"]
|
|
12
|
+
},
|
|
13
|
+
"overlay": {
|
|
14
|
+
"enable": true
|
|
15
|
+
},
|
|
16
|
+
"settings": {
|
|
17
|
+
"include_co_authored_by": true,
|
|
18
|
+
"env": {}
|
|
19
|
+
},
|
|
20
|
+
"mcp": {
|
|
21
|
+
"servers": {},
|
|
22
|
+
"enable_all_project_mcp_servers": false,
|
|
23
|
+
"enabled_mcpjson_servers": [],
|
|
24
|
+
"env_substitutions": {
|
|
25
|
+
"format": "${VAR}",
|
|
26
|
+
"default_format": "${VAR:-default}"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"policy": {
|
|
30
|
+
"mode": "report_only",
|
|
31
|
+
"hooks": {
|
|
32
|
+
"enable": true,
|
|
33
|
+
"on_invalid_hook": "report_only",
|
|
34
|
+
"definitions": [],
|
|
35
|
+
"events": {}
|
|
36
|
+
},
|
|
37
|
+
"permissions": {
|
|
38
|
+
"allow": [],
|
|
39
|
+
"deny": [],
|
|
40
|
+
"on_conflict": "deny_wins",
|
|
41
|
+
"on_unknown": "report_only"
|
|
42
|
+
},
|
|
43
|
+
"plugins": {
|
|
44
|
+
"enable": true,
|
|
45
|
+
"allowed_plugin_ids": [],
|
|
46
|
+
"denied_plugin_ids": [],
|
|
47
|
+
"on_unknown": "report_only",
|
|
48
|
+
"enabled_plugins": {}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"lsp": {
|
|
52
|
+
"enabled_plugins": [],
|
|
53
|
+
"config_path": ".claude/lsp.json",
|
|
54
|
+
"managed": false
|
|
55
|
+
},
|
|
56
|
+
"skill_eval": {
|
|
57
|
+
"enable": false,
|
|
58
|
+
"hooks": {
|
|
59
|
+
"shell": ".claude/hooks/skill-eval.sh",
|
|
60
|
+
"node": ".claude/hooks/skill-eval.js"
|
|
61
|
+
},
|
|
62
|
+
"rules_path": ".claude/hooks/skill-rules.json",
|
|
63
|
+
"scoring": {
|
|
64
|
+
"threshold": 0.6
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"observability": {
|
|
68
|
+
"enable": true,
|
|
69
|
+
"mode": "report_only",
|
|
70
|
+
"writer": {
|
|
71
|
+
"type": "node",
|
|
72
|
+
"script_path": ".claude/hooks/mova-observe.js"
|
|
73
|
+
},
|
|
74
|
+
"output_dir": ".mova/episodes",
|
|
75
|
+
"stdout_tail_bytes": 4000,
|
|
76
|
+
"stderr_tail_bytes": 4000,
|
|
77
|
+
"max_event_bytes": 20000,
|
|
78
|
+
"tail_lines": 50,
|
|
79
|
+
"include_tools": ["Bash", "Read", "Edit", "MultiEdit", "Write"],
|
|
80
|
+
"include_events": ["PostToolUse", "UserPromptSubmit", "Stop"]
|
|
81
|
+
},
|
|
82
|
+
"assets": {
|
|
83
|
+
"skills": [],
|
|
84
|
+
"agents": [],
|
|
85
|
+
"commands": [],
|
|
86
|
+
"rules": [],
|
|
87
|
+
"hooks": [],
|
|
88
|
+
"workflows": [],
|
|
89
|
+
"docs": [],
|
|
90
|
+
"dotfiles": [],
|
|
91
|
+
"schemas": []
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const prompt = process.env.CLAUDE_USER_PROMPT || process.env.CLAUDE_PROMPT || "";
|
|
3
|
+
let skill = "general";
|
|
4
|
+
|
|
5
|
+
if (/graphql/i.test(prompt)) {
|
|
6
|
+
skill = "graphql-schema";
|
|
7
|
+
} else if (/test/i.test(prompt)) {
|
|
8
|
+
skill = "testing-patterns";
|
|
9
|
+
} else if (/react|ui/i.test(prompt)) {
|
|
10
|
+
skill = "react-ui-patterns";
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
process.stdout.write(JSON.stringify({ feedback: `skill-eval: ${skill}`, suppressOutput: true }));
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
prompt="${CLAUDE_USER_PROMPT:-${CLAUDE_PROMPT:-}}"
|
|
5
|
+
skill="general"
|
|
6
|
+
|
|
7
|
+
if echo "$prompt" | grep -qi "graphql"; then
|
|
8
|
+
skill="graphql-schema"
|
|
9
|
+
elif echo "$prompt" | grep -qi "test"; then
|
|
10
|
+
skill="testing-patterns"
|
|
11
|
+
elif echo "$prompt" | grep -qi "react\\|ui"; then
|
|
12
|
+
skill="react-ui-patterns"
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
echo "{\"feedback\": \"skill-eval: ${skill}\", \"suppressOutput\": true}"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "v0",
|
|
3
|
+
"threshold": 0.6,
|
|
4
|
+
"rules": [
|
|
5
|
+
{
|
|
6
|
+
"id": "graphql-schema",
|
|
7
|
+
"keywords": ["graphql", "schema", "resolver"],
|
|
8
|
+
"score": 0.9
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "testing-patterns",
|
|
12
|
+
"keywords": ["test", "jest", "vitest", "tdd"],
|
|
13
|
+
"score": 0.8
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "react-ui-patterns",
|
|
17
|
+
"keywords": ["react", "ui", "component", "hook"],
|
|
18
|
+
"score": 0.7
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "skill-rules.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"version": { "type": "string" },
|
|
7
|
+
"threshold": { "type": "number" },
|
|
8
|
+
"rules": {
|
|
9
|
+
"type": "array",
|
|
10
|
+
"items": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"id": { "type": "string" },
|
|
14
|
+
"keywords": { "type": "array", "items": { "type": "string" } },
|
|
15
|
+
"score": { "type": "number" }
|
|
16
|
+
},
|
|
17
|
+
"required": ["id", "keywords", "score"],
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"required": ["version", "threshold", "rules"],
|
|
23
|
+
"additionalProperties": false
|
|
24
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"includeCoAuthoredBy": true,
|
|
3
|
+
"env": {
|
|
4
|
+
"INSIDE_CLAUDE_CODE": "1",
|
|
5
|
+
"BASH_DEFAULT_TIMEOUT_MS": "420000",
|
|
6
|
+
"BASH_MAX_TIMEOUT_MS": "420000"
|
|
7
|
+
},
|
|
8
|
+
"hooks": {
|
|
9
|
+
"enable": true,
|
|
10
|
+
"definitions": [],
|
|
11
|
+
"behavior": {
|
|
12
|
+
"on_invalid_hook": "report_only"
|
|
13
|
+
},
|
|
14
|
+
"UserPromptSubmit": [
|
|
15
|
+
{
|
|
16
|
+
"hooks": [
|
|
17
|
+
{
|
|
18
|
+
"type": "command",
|
|
19
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/skill-eval.sh",
|
|
20
|
+
"timeout": 5
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"PreToolUse": [
|
|
26
|
+
{
|
|
27
|
+
"matcher": "Edit|MultiEdit|Write",
|
|
28
|
+
"hooks": [
|
|
29
|
+
{
|
|
30
|
+
"type": "command",
|
|
31
|
+
"command": "[ \"$(git branch --show-current)\" != \"main\" ] || { echo '{\"block\": true, \"message\": \"Cannot edit files on main branch. Create a feature branch first.\"}' >&2; exit 2; }",
|
|
32
|
+
"timeout": 5
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"PostToolUse": [
|
|
38
|
+
{
|
|
39
|
+
"matcher": "Edit|MultiEdit|Write",
|
|
40
|
+
"hooks": [
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.(js|jsx|ts|tsx)$ ]]; then\n npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\" 2>&1\n exit_code=$?\n if [ $exit_code -ne 0 ]; then\n echo '{\"feedback\": \"Formatting failed.\"}' >&2\n exit 1\n fi\n echo '{\"feedback\": \"Formatting applied.\", \"suppressOutput\": true}'\nfi",
|
|
44
|
+
"timeout": 30
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"matcher": "Edit|MultiEdit|Write",
|
|
50
|
+
"hooks": [
|
|
51
|
+
{
|
|
52
|
+
"type": "command",
|
|
53
|
+
"command": "if [[ \"$CLAUDE_TOOL_INPUT_FILE_PATH\" =~ \\.test\\.(js|jsx|ts|tsx)$ ]]; then\n npm test -- --findRelatedTests \"$CLAUDE_TOOL_INPUT_FILE_PATH\" --passWithNoTests 2>&1 | tail -30\n exit 0\nfi",
|
|
54
|
+
"timeout": 90
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"Stop": [
|
|
60
|
+
{
|
|
61
|
+
"hooks": [
|
|
62
|
+
{
|
|
63
|
+
"type": "command",
|
|
64
|
+
"command": "echo '{\"feedback\": \"Stop hook executed.\", \"suppressOutput\": true}'",
|
|
65
|
+
"timeout": 3
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"mcp": {
|
|
72
|
+
"enableAllProjectMcpServers": false,
|
|
73
|
+
"enabledMcpjsonServers": ["jira", "github", "linear", "sentry", "memory"]
|
|
74
|
+
},
|
|
75
|
+
"permissions": {
|
|
76
|
+
"allow": ["Bash", "Edit", "Read"],
|
|
77
|
+
"deny": ["WriteToMain"],
|
|
78
|
+
"behavior": {
|
|
79
|
+
"on_conflict": "deny_wins",
|
|
80
|
+
"on_unknown": "report_only"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"plugins": {
|
|
84
|
+
"enable": true,
|
|
85
|
+
"allowed_plugin_ids": ["typescript-lsp", "pyright-lsp"],
|
|
86
|
+
"denied_plugin_ids": [],
|
|
87
|
+
"behavior": {
|
|
88
|
+
"on_unknown": "report_only"
|
|
89
|
+
},
|
|
90
|
+
"enabledPlugins": {
|
|
91
|
+
"typescript-lsp": true,
|
|
92
|
+
"pyright-lsp": true
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"lsp": {
|
|
96
|
+
"enabledPlugins": ["typescript-lsp", "pyright-lsp"]
|
|
97
|
+
},
|
|
98
|
+
"claude_md": {
|
|
99
|
+
"inject_control_entry": true,
|
|
100
|
+
"marker": "<!-- MOVA_CONTROL_ENTRY_V0 -->"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: scheduled-claude-code-dependency-audit
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
schedule:
|
|
5
|
+
- cron: "0 5 * * 0"
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
audit:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- name: Checkout
|
|
12
|
+
uses: actions/checkout@v4
|
|
13
|
+
- name: Audit dependencies
|
|
14
|
+
run: echo "Dependency audit placeholder"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"jira": {
|
|
4
|
+
"type": "stdio",
|
|
5
|
+
"command": "npx",
|
|
6
|
+
"args": ["-y", "@anthropic/mcp-jira"],
|
|
7
|
+
"env": {
|
|
8
|
+
"JIRA_HOST": "${JIRA_HOST}",
|
|
9
|
+
"JIRA_EMAIL": "${JIRA_EMAIL}",
|
|
10
|
+
"JIRA_API_TOKEN": "${JIRA_API_TOKEN}"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"github": {
|
|
14
|
+
"type": "stdio",
|
|
15
|
+
"command": "npx",
|
|
16
|
+
"args": ["-y", "@anthropic/mcp-github"],
|
|
17
|
+
"env": {
|
|
18
|
+
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"linear": {
|
|
22
|
+
"type": "stdio",
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["-y", "@anthropic/mcp-linear"],
|
|
25
|
+
"env": {
|
|
26
|
+
"LINEAR_API_KEY": "${LINEAR_API_KEY}"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"sentry": {
|
|
30
|
+
"type": "stdio",
|
|
31
|
+
"command": "npx",
|
|
32
|
+
"args": ["-y", "@anthropic/mcp-sentry"],
|
|
33
|
+
"env": {
|
|
34
|
+
"SENTRY_AUTH_TOKEN": "${SENTRY_AUTH_TOKEN}",
|
|
35
|
+
"SENTRY_ORG": "${SENTRY_ORG}"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"memory": {
|
|
39
|
+
"type": "stdio",
|
|
40
|
+
"command": "npx",
|
|
41
|
+
"args": ["-y", "@anthropic/mcp-memory"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Claude Code Demo (Full)
|
|
2
|
+
|
|
3
|
+
## Quick Facts
|
|
4
|
+
|
|
5
|
+
- Stack: React, TypeScript, Node.js
|
|
6
|
+
- Test: `npm test`
|
|
7
|
+
- Lint: `npm run lint`
|
|
8
|
+
- Build: `npm run build`
|
|
9
|
+
|
|
10
|
+
## Key Directories
|
|
11
|
+
|
|
12
|
+
- `src/components/` - UI components
|
|
13
|
+
- `src/hooks/` - Custom hooks
|
|
14
|
+
- `src/api/` - API clients
|
|
15
|
+
- `tests/` - Test suites
|
|
16
|
+
|
|
17
|
+
## Project Rules
|
|
18
|
+
|
|
19
|
+
- Prefer `interface` over `type` except unions.
|
|
20
|
+
- No `any`; use `unknown`.
|
|
21
|
+
- Use early returns to reduce nesting.
|
|
22
|
+
- Run lint + tests before PR.
|
|
23
|
+
|
|
24
|
+
## Skill Activation
|
|
25
|
+
|
|
26
|
+
- Tests -> `testing-patterns`
|
|
27
|
+
- GraphQL -> `graphql-schema`
|
|
28
|
+
- UI components -> `react-ui-patterns`
|