opencodekit 0.0.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 (123) hide show
  1. package/README.md +258 -0
  2. package/dist/index.js +3391 -0
  3. package/dist/template/.opencode/.env.example +193 -0
  4. package/dist/template/.opencode/AGENTS.md +214 -0
  5. package/dist/template/.opencode/README.md +269 -0
  6. package/dist/template/.opencode/agent/build.md +75 -0
  7. package/dist/template/.opencode/agent/explore.md +66 -0
  8. package/dist/template/.opencode/agent/planner.md +83 -0
  9. package/dist/template/.opencode/agent/review.md +90 -0
  10. package/dist/template/.opencode/agent/rush.md +85 -0
  11. package/dist/template/.opencode/agent/scout.md +93 -0
  12. package/dist/template/.opencode/command/analyze-project.md +39 -0
  13. package/dist/template/.opencode/command/brainstorm.md +11 -0
  14. package/dist/template/.opencode/command/commit.md +11 -0
  15. package/dist/template/.opencode/command/create.md +118 -0
  16. package/dist/template/.opencode/command/design.md +15 -0
  17. package/dist/template/.opencode/command/finish.md +233 -0
  18. package/dist/template/.opencode/command/fix-ci.md +20 -0
  19. package/dist/template/.opencode/command/fix-types.md +10 -0
  20. package/dist/template/.opencode/command/fix-ui.md +22 -0
  21. package/dist/template/.opencode/command/fix.md +22 -0
  22. package/dist/template/.opencode/command/handoff.md +146 -0
  23. package/dist/template/.opencode/command/implement.md +167 -0
  24. package/dist/template/.opencode/command/import-plan.md +188 -0
  25. package/dist/template/.opencode/command/integration-test.md +36 -0
  26. package/dist/template/.opencode/command/issue.md +41 -0
  27. package/dist/template/.opencode/command/plan.md +158 -0
  28. package/dist/template/.opencode/command/pr.md +36 -0
  29. package/dist/template/.opencode/command/quick-build.md +13 -0
  30. package/dist/template/.opencode/command/research-and-implement.md +21 -0
  31. package/dist/template/.opencode/command/research-ui.md +32 -0
  32. package/dist/template/.opencode/command/research.md +153 -0
  33. package/dist/template/.opencode/command/resume.md +127 -0
  34. package/dist/template/.opencode/command/review-codebase.md +13 -0
  35. package/dist/template/.opencode/command/skill-create.md +29 -0
  36. package/dist/template/.opencode/command/skill-optimize.md +28 -0
  37. package/dist/template/.opencode/command/status.md +109 -0
  38. package/dist/template/.opencode/command/ui-review.md +28 -0
  39. package/dist/template/.opencode/dcp.jsonc +34 -0
  40. package/dist/template/.opencode/memory/README.md +128 -0
  41. package/dist/template/.opencode/memory/_templates/handoff.md +33 -0
  42. package/dist/template/.opencode/memory/_templates/research.md +29 -0
  43. package/dist/template/.opencode/memory/_templates/task-prd.md +43 -0
  44. package/dist/template/.opencode/memory/_templates/task-review.md +73 -0
  45. package/dist/template/.opencode/memory/_templates/task-spec.md +71 -0
  46. package/dist/template/.opencode/memory/design-guidelines.md +281 -0
  47. package/dist/template/.opencode/memory/handoffs/README.md +83 -0
  48. package/dist/template/.opencode/opencode.json +469 -0
  49. package/dist/template/.opencode/package.json +23 -0
  50. package/dist/template/.opencode/pickle-thinker.jsonc +11 -0
  51. package/dist/template/.opencode/plugin/README.md +162 -0
  52. package/dist/template/.opencode/plugin/notification.ts +88 -0
  53. package/dist/template/.opencode/plugin/sessions.ts +434 -0
  54. package/dist/template/.opencode/plugin/superpowers.ts +332 -0
  55. package/dist/template/.opencode/plugin/tsconfig.json +15 -0
  56. package/dist/template/.opencode/superpowers/.claude/settings.local.json +141 -0
  57. package/dist/template/.opencode/superpowers/.claude-plugin/marketplace.json +20 -0
  58. package/dist/template/.opencode/superpowers/.claude-plugin/plugin.json +13 -0
  59. package/dist/template/.opencode/superpowers/.codex/INSTALL.md +35 -0
  60. package/dist/template/.opencode/superpowers/.codex/superpowers-bootstrap.md +33 -0
  61. package/dist/template/.opencode/superpowers/.codex/superpowers-codex +267 -0
  62. package/dist/template/.opencode/superpowers/.github/FUNDING.yml +3 -0
  63. package/dist/template/.opencode/superpowers/.opencode/INSTALL.md +135 -0
  64. package/dist/template/.opencode/superpowers/.opencode/plugin/superpowers.js +215 -0
  65. package/dist/template/.opencode/superpowers/LICENSE +21 -0
  66. package/dist/template/.opencode/superpowers/README.md +165 -0
  67. package/dist/template/.opencode/superpowers/RELEASE-NOTES.md +493 -0
  68. package/dist/template/.opencode/superpowers/agents/code-reviewer.md +48 -0
  69. package/dist/template/.opencode/superpowers/commands/brainstorm.md +5 -0
  70. package/dist/template/.opencode/superpowers/commands/execute-plan.md +5 -0
  71. package/dist/template/.opencode/superpowers/commands/write-plan.md +5 -0
  72. package/dist/template/.opencode/superpowers/docs/README.codex.md +153 -0
  73. package/dist/template/.opencode/superpowers/docs/README.opencode.md +234 -0
  74. package/dist/template/.opencode/superpowers/docs/plans/2025-11-22-opencode-support-design.md +294 -0
  75. package/dist/template/.opencode/superpowers/docs/plans/2025-11-22-opencode-support-implementation.md +1095 -0
  76. package/dist/template/.opencode/superpowers/hooks/hooks.json +15 -0
  77. package/dist/template/.opencode/superpowers/hooks/session-start.sh +34 -0
  78. package/dist/template/.opencode/superpowers/lib/skills-core.js +208 -0
  79. package/dist/template/.opencode/superpowers/skills/brainstorming/SKILL.md +54 -0
  80. package/dist/template/.opencode/superpowers/skills/condition-based-waiting/SKILL.md +120 -0
  81. package/dist/template/.opencode/superpowers/skills/condition-based-waiting/example.ts +158 -0
  82. package/dist/template/.opencode/superpowers/skills/defense-in-depth/SKILL.md +127 -0
  83. package/dist/template/.opencode/superpowers/skills/dispatching-parallel-agents/SKILL.md +180 -0
  84. package/dist/template/.opencode/superpowers/skills/executing-plans/SKILL.md +76 -0
  85. package/dist/template/.opencode/superpowers/skills/finishing-a-development-branch/SKILL.md +200 -0
  86. package/dist/template/.opencode/superpowers/skills/frontend-aesthetics/SKILL.md +137 -0
  87. package/dist/template/.opencode/superpowers/skills/gemini-large-context/SKILL.md +205 -0
  88. package/dist/template/.opencode/superpowers/skills/receiving-code-review/SKILL.md +209 -0
  89. package/dist/template/.opencode/superpowers/skills/requesting-code-review/SKILL.md +105 -0
  90. package/dist/template/.opencode/superpowers/skills/requesting-code-review/code-reviewer.md +146 -0
  91. package/dist/template/.opencode/superpowers/skills/root-cause-tracing/SKILL.md +174 -0
  92. package/dist/template/.opencode/superpowers/skills/root-cause-tracing/find-polluter.sh +63 -0
  93. package/dist/template/.opencode/superpowers/skills/sharing-skills/SKILL.md +194 -0
  94. package/dist/template/.opencode/superpowers/skills/subagent-driven-development/SKILL.md +189 -0
  95. package/dist/template/.opencode/superpowers/skills/systematic-debugging/CREATION-LOG.md +119 -0
  96. package/dist/template/.opencode/superpowers/skills/systematic-debugging/SKILL.md +295 -0
  97. package/dist/template/.opencode/superpowers/skills/systematic-debugging/test-academic.md +14 -0
  98. package/dist/template/.opencode/superpowers/skills/systematic-debugging/test-pressure-1.md +58 -0
  99. package/dist/template/.opencode/superpowers/skills/systematic-debugging/test-pressure-2.md +68 -0
  100. package/dist/template/.opencode/superpowers/skills/systematic-debugging/test-pressure-3.md +69 -0
  101. package/dist/template/.opencode/superpowers/skills/test-driven-development/SKILL.md +364 -0
  102. package/dist/template/.opencode/superpowers/skills/testing-anti-patterns/SKILL.md +302 -0
  103. package/dist/template/.opencode/superpowers/skills/testing-skills-with-subagents/SKILL.md +387 -0
  104. package/dist/template/.opencode/superpowers/skills/testing-skills-with-subagents/examples/CLAUDE_MD_TESTING.md +189 -0
  105. package/dist/template/.opencode/superpowers/skills/ui-ux-research/SKILL.md +191 -0
  106. package/dist/template/.opencode/superpowers/skills/using-git-worktrees/SKILL.md +213 -0
  107. package/dist/template/.opencode/superpowers/skills/using-superpowers/SKILL.md +101 -0
  108. package/dist/template/.opencode/superpowers/skills/verification-before-completion/SKILL.md +139 -0
  109. package/dist/template/.opencode/superpowers/skills/writing-plans/SKILL.md +116 -0
  110. package/dist/template/.opencode/superpowers/skills/writing-skills/SKILL.md +622 -0
  111. package/dist/template/.opencode/superpowers/skills/writing-skills/anthropic-best-practices.md +1150 -0
  112. package/dist/template/.opencode/superpowers/skills/writing-skills/graphviz-conventions.dot +172 -0
  113. package/dist/template/.opencode/superpowers/skills/writing-skills/persuasion-principles.md +187 -0
  114. package/dist/template/.opencode/superpowers/tests/opencode/run-tests.sh +165 -0
  115. package/dist/template/.opencode/superpowers/tests/opencode/setup.sh +73 -0
  116. package/dist/template/.opencode/superpowers/tests/opencode/test-plugin-loading.sh +81 -0
  117. package/dist/template/.opencode/superpowers/tests/opencode/test-priority.sh +198 -0
  118. package/dist/template/.opencode/superpowers/tests/opencode/test-skills-core.sh +440 -0
  119. package/dist/template/.opencode/superpowers/tests/opencode/test-tools.sh +104 -0
  120. package/dist/template/.opencode/tool/memory-read.ts +66 -0
  121. package/dist/template/.opencode/tool/memory-update.ts +61 -0
  122. package/dist/template/.opencode/tsconfig.json +21 -0
  123. package/package.json +52 -0
@@ -0,0 +1,104 @@
1
+ #!/usr/bin/env bash
2
+ # Test: Tools Functionality
3
+ # Verifies that use_skill and find_skills tools work correctly
4
+ # NOTE: These tests require OpenCode to be installed and configured
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8
+
9
+ echo "=== Test: Tools Functionality ==="
10
+
11
+ # Source setup to create isolated environment
12
+ source "$SCRIPT_DIR/setup.sh"
13
+
14
+ # Trap to cleanup on exit
15
+ trap cleanup_test_env EXIT
16
+
17
+ # Check if opencode is available
18
+ if ! command -v opencode &> /dev/null; then
19
+ echo " [SKIP] OpenCode not installed - skipping integration tests"
20
+ echo " To run these tests, install OpenCode: https://opencode.ai"
21
+ exit 0
22
+ fi
23
+
24
+ # Test 1: Test find_skills tool via direct invocation
25
+ echo "Test 1: Testing find_skills tool..."
26
+ echo " Running opencode with find_skills request..."
27
+
28
+ # Use timeout to prevent hanging, capture both stdout and stderr
29
+ output=$(timeout 60s opencode run --print-logs "Use the find_skills tool to list available skills. Just call the tool and show me the raw output." 2>&1) || {
30
+ exit_code=$?
31
+ if [ $exit_code -eq 124 ]; then
32
+ echo " [FAIL] OpenCode timed out after 60s"
33
+ exit 1
34
+ fi
35
+ echo " [WARN] OpenCode returned non-zero exit code: $exit_code"
36
+ }
37
+
38
+ # Check for expected patterns in output
39
+ if echo "$output" | grep -qi "superpowers:brainstorming\|superpowers:using-superpowers\|Available skills"; then
40
+ echo " [PASS] find_skills tool discovered superpowers skills"
41
+ else
42
+ echo " [FAIL] find_skills did not return expected skills"
43
+ echo " Output was:"
44
+ echo "$output" | head -50
45
+ exit 1
46
+ fi
47
+
48
+ # Check if personal test skill was found
49
+ if echo "$output" | grep -qi "personal-test"; then
50
+ echo " [PASS] find_skills found personal test skill"
51
+ else
52
+ echo " [WARN] personal test skill not found in output (may be ok if tool returned subset)"
53
+ fi
54
+
55
+ # Test 2: Test use_skill tool
56
+ echo ""
57
+ echo "Test 2: Testing use_skill tool..."
58
+ echo " Running opencode with use_skill request..."
59
+
60
+ output=$(timeout 60s opencode run --print-logs "Use the use_skill tool to load the personal-test skill and show me what you get." 2>&1) || {
61
+ exit_code=$?
62
+ if [ $exit_code -eq 124 ]; then
63
+ echo " [FAIL] OpenCode timed out after 60s"
64
+ exit 1
65
+ fi
66
+ echo " [WARN] OpenCode returned non-zero exit code: $exit_code"
67
+ }
68
+
69
+ # Check for the skill marker we embedded
70
+ if echo "$output" | grep -qi "PERSONAL_SKILL_MARKER_12345\|Personal Test Skill\|Launching skill"; then
71
+ echo " [PASS] use_skill loaded personal-test skill content"
72
+ else
73
+ echo " [FAIL] use_skill did not load personal-test skill correctly"
74
+ echo " Output was:"
75
+ echo "$output" | head -50
76
+ exit 1
77
+ fi
78
+
79
+ # Test 3: Test use_skill with superpowers: prefix
80
+ echo ""
81
+ echo "Test 3: Testing use_skill with superpowers: prefix..."
82
+ echo " Running opencode with superpowers:brainstorming skill..."
83
+
84
+ output=$(timeout 60s opencode run --print-logs "Use the use_skill tool to load superpowers:brainstorming and tell me the first few lines of what you received." 2>&1) || {
85
+ exit_code=$?
86
+ if [ $exit_code -eq 124 ]; then
87
+ echo " [FAIL] OpenCode timed out after 60s"
88
+ exit 1
89
+ fi
90
+ echo " [WARN] OpenCode returned non-zero exit code: $exit_code"
91
+ }
92
+
93
+ # Check for expected content from brainstorming skill
94
+ if echo "$output" | grep -qi "brainstorming\|Launching skill\|skill.*loaded"; then
95
+ echo " [PASS] use_skill loaded superpowers:brainstorming skill"
96
+ else
97
+ echo " [FAIL] use_skill did not load superpowers:brainstorming correctly"
98
+ echo " Output was:"
99
+ echo "$output" | head -50
100
+ exit 1
101
+ fi
102
+
103
+ echo ""
104
+ echo "=== All tools tests passed ==="
@@ -0,0 +1,66 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import fs from "fs/promises";
3
+ import path from "path";
4
+
5
+ export default tool({
6
+ description:
7
+ "Read memory files for persistent cross-session context. Returns current project state, learnings, and active tasks. Supports subdirectories (e.g., 'research/opencode-sessions').",
8
+ args: {
9
+ file: tool.schema
10
+ .string()
11
+ .optional()
12
+ .describe(
13
+ "Memory file to read: handoffs/YYYY-MM-DD-phase, research/YYYY-MM-DD-topic, _templates/task-prd, _templates/task-spec, _templates/task-review, _templates/research, _templates/handoff",
14
+ ),
15
+ },
16
+ execute: async (args: { file?: string }) => {
17
+ const fileName = args.file || "memory";
18
+
19
+ // Normalize: strip .md extension if present
20
+ const normalizedFile = fileName.replace(/\.md$/i, "");
21
+
22
+ // Location priority: project > global > legacy
23
+ const locations = [
24
+ path.join(process.cwd(), ".opencode/memory", `${normalizedFile}.md`),
25
+ path.join(
26
+ process.env.HOME || "",
27
+ ".config/opencode/memory",
28
+ `${normalizedFile}.md`,
29
+ ),
30
+ path.join(
31
+ process.cwd(),
32
+ ".config/opencode/memory",
33
+ `${normalizedFile}.md`,
34
+ ),
35
+ ];
36
+
37
+ // Try each location in order
38
+ for (const filePath of locations) {
39
+ try {
40
+ const content = await fs.readFile(filePath, "utf-8");
41
+ const locationLabel = filePath.includes(".opencode/memory")
42
+ ? "project"
43
+ : filePath.includes(process.env.HOME || "")
44
+ ? "global"
45
+ : "legacy";
46
+ return `[Read from ${locationLabel}: ${filePath}]\n\n${content}`;
47
+ } catch (error) {
48
+ // Continue to next location if file not found
49
+ if (
50
+ error instanceof Error &&
51
+ "code" in error &&
52
+ error.code === "ENOENT"
53
+ ) {
54
+ continue;
55
+ }
56
+ // Other errors should be reported
57
+ if (error instanceof Error) {
58
+ return `Error reading memory from ${filePath}: ${error.message}`;
59
+ }
60
+ }
61
+ }
62
+
63
+ // No file found in any location
64
+ return `Memory file '${normalizedFile}.md' not found in any location.\nSearched:\n- ${locations.join("\n- ")}\n\nStructure:\n- handoffs/YYYY-MM-DD-phase (phase transitions)\n- research/YYYY-MM-DD-topic (research findings)\n- _templates/ (prd, spec, review, research, handoff)`;
65
+ },
66
+ });
@@ -0,0 +1,61 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import fs from "fs/promises";
3
+ import path from "path";
4
+
5
+ export default tool({
6
+ description:
7
+ "Update memory files with new learnings, progress, or context. Appends or replaces content based on mode. Supports subdirectories for organization (e.g., 'research/opencode-sessions' creates .opencode/memory/research/opencode-sessions.md).",
8
+ args: {
9
+ file: tool.schema
10
+ .string()
11
+ .describe(
12
+ "Memory file to update: handoffs/YYYY-MM-DD-phase, research/YYYY-MM-DD-topic. Use _templates/ for reference only.",
13
+ ),
14
+ content: tool.schema
15
+ .string()
16
+ .describe("Content to write or append to the memory file"),
17
+ mode: tool.schema
18
+ .string()
19
+ .optional()
20
+ .default("replace")
21
+ .describe(
22
+ "Update mode: 'replace' (overwrite file) or 'append' (add to end).",
23
+ ),
24
+ },
25
+ execute: async (args: { file: string; content: string; mode?: string }) => {
26
+ // Always write to project memory (.opencode/memory/)
27
+ const memoryDir = path.join(process.cwd(), ".opencode/memory");
28
+
29
+ // Normalize file path: strip existing .md extension, handle subdirectories
30
+ let normalizedFile = args.file.replace(/\.md$/i, ""); // Remove .md if present
31
+ const filePath = path.join(memoryDir, `${normalizedFile}.md`);
32
+ const mode = args.mode || "replace";
33
+
34
+ try {
35
+ // Ensure parent directory exists (handles subdirectories)
36
+ const fileDir = path.dirname(filePath);
37
+ await fs.mkdir(fileDir, { recursive: true });
38
+
39
+ if (mode === "append") {
40
+ const timestamp = new Date().toISOString();
41
+ const appendContent = `\n\n---\n**Updated:** ${timestamp}\n\n${args.content}`;
42
+ await fs.appendFile(filePath, appendContent, "utf-8");
43
+ return `Successfully appended to ${normalizedFile}.md\n[Written to: ${filePath}]`;
44
+ } else {
45
+ // Replace mode - update timestamp
46
+ const timestamp = new Date().toISOString();
47
+ const updatedContent = args.content.replace(
48
+ /\*\*Last Updated:\*\* \[Timestamp\]/,
49
+ `**Last Updated:** ${timestamp}`,
50
+ );
51
+ await fs.writeFile(filePath, updatedContent, "utf-8");
52
+ return `Successfully updated ${normalizedFile}.md\n[Written to: ${filePath}]`;
53
+ }
54
+ } catch (error) {
55
+ if (error instanceof Error) {
56
+ return `Error updating memory: ${error.message}`;
57
+ }
58
+ return `Unknown error updating memory file`;
59
+ }
60
+ },
61
+ });
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "allowSyntheticDefaultImports": true,
7
+ "esModuleInterop": true,
8
+ "allowJs": true,
9
+ "strict": false,
10
+ "noEmit": true,
11
+ "declaration": true,
12
+ "outDir": "./dist",
13
+ "rootDir": "./",
14
+ "skipLibCheck": true,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "resolveJsonModule": true,
17
+ "types": ["node"]
18
+ },
19
+ "include": ["plugin/**/*.ts", "tool/**/*.ts", "agent/**/*.ts", "*.ts"],
20
+ "exclude": ["node_modules", "dist", "**/*.js", "**/*.test.ts"]
21
+ }
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "opencodekit",
3
+ "version": "0.0.1",
4
+ "description": "CLI tool for bootstrapping and managing OpenCodeKit projects",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/opencodekit/opencodekit-template.git"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public",
12
+ "registry": "https://registry.npmjs.org"
13
+ },
14
+ "bin": {
15
+ "ock": "dist/index.js"
16
+ },
17
+ "files": ["dist", "README.md"],
18
+ "scripts": {
19
+ "dev": "bun run src/index.ts",
20
+ "build": "bun build src/index.ts --outdir dist --target node && mkdir -p dist/template && rsync -av --exclude=node_modules --exclude=dist --exclude=.git --exclude=coverage --exclude=.next --exclude=.turbo --exclude=logs --exclude=package-lock.json .opencode/ dist/template/.opencode/",
21
+ "compile": "bun build src/index.ts --compile --outfile ock",
22
+ "compile:binary": "bun build src/index.ts --compile --outfile bin/ock",
23
+ "typecheck": "tsc --noEmit",
24
+ "test": "bun test",
25
+ "test:watch": "bun test --watch",
26
+ "lint": "biome check .",
27
+ "lint:fix": "biome check --fix ."
28
+ },
29
+ "keywords": ["cli", "opencodekit", "template", "agents", "mcp", "opencode"],
30
+ "author": "OpenCodeKit",
31
+ "license": "MIT",
32
+ "engines": {
33
+ "bun": ">=1.3.2"
34
+ },
35
+ "dependencies": {
36
+ "@clack/prompts": "^0.7.0",
37
+ "@opencode-ai/plugin": "^1.0.141",
38
+ "cac": "^6.7.14",
39
+ "cli-table3": "^0.6.5",
40
+ "ora": "^9.0.0",
41
+ "picocolors": "^1.1.1",
42
+ "zod": "^3.23.8"
43
+ },
44
+ "devDependencies": {
45
+ "@beads/bd": "^0.29.0",
46
+ "@biomejs/biome": "^1.9.4",
47
+ "@types/bun": "latest",
48
+ "@types/node": "^22.10.1",
49
+ "typescript": "^5.7.2"
50
+ },
51
+ "trustedDependencies": ["@beads/bd"]
52
+ }