takomi 2.0.6 ā 2.1.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/.pi/README.md +124 -0
- package/.pi/agents/architect.md +16 -0
- package/.pi/agents/coder.md +15 -0
- package/.pi/agents/designer.md +18 -0
- package/.pi/agents/orchestrator.md +23 -0
- package/.pi/agents/reviewer.md +17 -0
- package/.pi/extensions/oauth-router/README.md +125 -0
- package/.pi/extensions/oauth-router/commands.ts +380 -0
- package/.pi/extensions/oauth-router/config.ts +200 -0
- package/.pi/extensions/oauth-router/index.ts +41 -0
- package/.pi/extensions/oauth-router/oauth-flow.ts +154 -0
- package/.pi/extensions/oauth-router/oauth-store.ts +121 -0
- package/.pi/extensions/oauth-router/package.json +14 -0
- package/.pi/extensions/oauth-router/policies.ts +27 -0
- package/.pi/extensions/oauth-router/provider.ts +492 -0
- package/.pi/extensions/oauth-router/scripts/vibe-verify.py +98 -0
- package/.pi/extensions/oauth-router/state.ts +174 -0
- package/.pi/extensions/oauth-router/types.ts +153 -0
- package/.pi/extensions/takomi-runtime/command-text.ts +130 -0
- package/.pi/extensions/takomi-runtime/commands.ts +179 -0
- package/.pi/extensions/takomi-runtime/context-panel.ts +282 -0
- package/.pi/extensions/takomi-runtime/index.ts +1288 -0
- package/.pi/extensions/takomi-runtime/profile.ts +114 -0
- package/.pi/extensions/takomi-runtime/routing-policy.ts +105 -0
- package/.pi/extensions/takomi-runtime/shared.ts +492 -0
- package/.pi/extensions/takomi-runtime/subagent-controller.ts +364 -0
- package/.pi/extensions/takomi-runtime/subagent-render.ts +501 -0
- package/.pi/extensions/takomi-runtime/subagent-types.ts +83 -0
- package/.pi/extensions/takomi-runtime/ui.ts +133 -0
- package/.pi/extensions/takomi-subagents/agent-aliases.ts +18 -0
- package/.pi/extensions/takomi-subagents/agents.ts +113 -0
- package/.pi/extensions/takomi-subagents/delegation-plan.ts +95 -0
- package/.pi/extensions/takomi-subagents/dispatch-helpers.ts +26 -0
- package/.pi/extensions/takomi-subagents/dispatch.ts +215 -0
- package/.pi/extensions/takomi-subagents/index.ts +75 -0
- package/.pi/extensions/takomi-subagents/live-updates.ts +83 -0
- package/.pi/extensions/takomi-subagents/native-render.ts +174 -0
- package/.pi/extensions/takomi-subagents/tool-runner.ts +209 -0
- package/.pi/prompts/build-prompt.md +199 -0
- package/.pi/prompts/design-prompt.md +134 -0
- package/.pi/prompts/genesis-prompt.md +133 -0
- package/.pi/prompts/orch-prompt.md +144 -0
- package/.pi/prompts/prime-prompt.md +80 -0
- package/.pi/prompts/takomi-prompt.md +96 -0
- package/.pi/prompts/vibe-primeAgent.md +97 -0
- package/.pi/prompts/vibe-spawnTask.md +133 -0
- package/.pi/prompts/vibe-syncDocs.md +100 -0
- package/.pi/themes/takomi-noir.json +81 -0
- package/README.md +61 -27
- package/assets/.agent/skills/21st-dev-components/21st-handoff.md +146 -0
- package/assets/.agent/skills/21st-dev-components/SKILL.md +198 -0
- package/assets/.agent/skills/21st-dev-components/references/categories.md +91 -0
- package/assets/.agent/skills/21st-dev-components/references/manual-handoff-template.md +79 -0
- package/assets/.agent/skills/21st-dev-components/references/section-detection-rubric.md +59 -0
- package/assets/.agent/skills/21st-dev-components/scripts/_shared.mjs +304 -0
- package/assets/.agent/skills/21st-dev-components/scripts/build-manual-handoff-template.mjs +115 -0
- package/assets/.agent/skills/21st-dev-components/scripts/fetch-21st-source.mjs +65 -0
- package/assets/.agent/skills/21st-dev-components/scripts/resolve-21st-component.mjs +115 -0
- package/assets/.agent/skills/pr-comment-fix/SKILL.md +182 -0
- package/assets/.agent/skills/takomi/SKILL.md +59 -59
- package/package.json +58 -41
- package/src/cli.js +165 -15
- package/src/doctor.js +84 -0
- package/src/harness.js +13 -0
- package/src/pi-harness.js +351 -0
- package/src/pi-installer.js +171 -0
- package/src/pi-takomi-core/index.ts +4 -0
- package/src/pi-takomi-core/orchestration.ts +402 -0
- package/src/pi-takomi-core/routing.ts +93 -0
- package/src/pi-takomi-core/types.ts +173 -0
- package/src/pi-takomi-core/workflows.ts +299 -0
- package/src/skills-installer.js +101 -0
- package/src/utils.js +479 -447
- package/assets/.agent/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-311.pyc +0 -0
- package/assets/.agent/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-311.pyc +0 -0
- package/assets/.agent/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-311.pyc +0 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr-comment-fix
|
|
3
|
+
description: >
|
|
4
|
+
Automate fixing GitHub PR review comments. Use this skill whenever the user asks to
|
|
5
|
+
"fix PR comments", "address review feedback", "resolve PR threads", or references
|
|
6
|
+
a PR number/branch with unresolved review comments. Also trigger when the user says
|
|
7
|
+
things like "go through the review comments on my PR", "handle the feedback on #123",
|
|
8
|
+
or "clean up the review notes". Requires the `gh` CLI to be authenticated.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# PR Comment Fix Workflow
|
|
12
|
+
|
|
13
|
+
Checkout a PR branch, fetch unresolved review comments, fix each one, commit, reply, resolve, and push ā all in one pass.
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
Before starting, verify `gh` is authenticated:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
gh auth status
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
If it fails, stop and tell the user to run `gh auth login`.
|
|
24
|
+
|
|
25
|
+
## Step 1: Identify the PR
|
|
26
|
+
|
|
27
|
+
Determine the target PR from the user's message. They might give you a PR number (`#142`), a branch name (`feature/new-parser`), or a URL. Normalize to a PR number early:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# If given a branch name, find its open PR
|
|
31
|
+
gh pr list --head <branch-name> --state open --json number --jq '.[0].number'
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Once you have the PR number, fetch the branch name and check it out:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
gh pr checkout <pr-number>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This ensures you're on the exact branch the PR tracks ā not a stale local copy.
|
|
41
|
+
|
|
42
|
+
## Step 2: Fetch unresolved review comments
|
|
43
|
+
|
|
44
|
+
Pull all review comments and filter to unresolved threads. Each comment has a thread ID, file path, line number, and body.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
gh api graphql -f query='
|
|
48
|
+
query($owner: String!, $repo: String!, $pr: Int!) {
|
|
49
|
+
repository(owner: $owner, name: $repo) {
|
|
50
|
+
pullRequest(number: $pr) {
|
|
51
|
+
reviewThreads(first: 100) {
|
|
52
|
+
nodes {
|
|
53
|
+
id
|
|
54
|
+
isResolved
|
|
55
|
+
comments(first: 10) {
|
|
56
|
+
nodes {
|
|
57
|
+
body
|
|
58
|
+
path
|
|
59
|
+
line
|
|
60
|
+
author { login }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
' -f owner='{owner}' -f repo='{repo}' -F pr=<pr-number>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Extract `{owner}` and `{repo}` from the current git remote:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
gh repo view --json owner,name --jq '"\(.owner.login) \(.name)"'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Filter to threads where `isResolved` is `false`. If every thread is already resolved, tell the user there's nothing to fix and stop.
|
|
78
|
+
|
|
79
|
+
## Step 3: Triage comments
|
|
80
|
+
|
|
81
|
+
Not every comment is actionable code feedback. Classify each unresolved thread:
|
|
82
|
+
|
|
83
|
+
- **Actionable** ā requests a concrete code change (rename, refactor, fix bug, add validation, change logic, etc.)
|
|
84
|
+
- **Question / Discussion** ā asks "why did you do X?" or debates an approach with no clear fix directive
|
|
85
|
+
- **Nit / Style** ā trivial formatting or naming preferences
|
|
86
|
+
- **Praise / Acknowledgement** ā compliments, thumbs-up, "looks good"
|
|
87
|
+
|
|
88
|
+
Fix **Actionable** and **Nit/Style** comments. For **Question/Discussion** threads, draft a reply but flag them for the user to review rather than guessing at a code change. Skip **Praise** threads entirely (don't resolve them ā the author may want them visible).
|
|
89
|
+
|
|
90
|
+
## Step 4: Fix each comment
|
|
91
|
+
|
|
92
|
+
For each actionable comment, in the order they appear per-file:
|
|
93
|
+
|
|
94
|
+
1. **Read the file at the referenced path.** If the path no longer exists (file was renamed or deleted since the review), note this in your reply and skip.
|
|
95
|
+
2. **Locate the relevant code.** The line number in the comment refers to the diff, which may have shifted. Use the comment's surrounding code context to find the right location in the current file ā do not blindly trust line numbers.
|
|
96
|
+
3. **Make the fix.** Apply the smallest change that fully addresses the feedback. If the reviewer's suggestion is ambiguous, prefer the most conservative interpretation.
|
|
97
|
+
4. **Validate the fix compiles/parses.** After each file edit, run the project's build or lint command if one is configured. Catch errors before committing. Validate against the current branch worktree ā never against `main` or any other branch.
|
|
98
|
+
|
|
99
|
+
### Commit strategy
|
|
100
|
+
|
|
101
|
+
Group related fixes into logical commits rather than one commit per comment. Good groupings:
|
|
102
|
+
|
|
103
|
+
- All nit/style fixes in one commit
|
|
104
|
+
- Fixes in the same file or module together
|
|
105
|
+
- A single complex fix that touches multiple files in its own commit
|
|
106
|
+
|
|
107
|
+
Commit message format:
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
fix(review): <concise summary of what changed>
|
|
111
|
+
|
|
112
|
+
Addresses PR #<number> review feedback:
|
|
113
|
+
- <thread 1 summary>
|
|
114
|
+
- <thread 2 summary>
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Step 5: Reply and resolve threads
|
|
118
|
+
|
|
119
|
+
After committing the fixes, reply to each addressed thread and then resolve it:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Reply to the thread
|
|
123
|
+
gh api graphql -f query='
|
|
124
|
+
mutation($threadId: ID!, $body: String!) {
|
|
125
|
+
addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {
|
|
126
|
+
comment { id }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
' -f threadId='<thread-id>' -f body='<reply>'
|
|
130
|
+
|
|
131
|
+
# Resolve the thread
|
|
132
|
+
gh api graphql -f query='
|
|
133
|
+
mutation($threadId: ID!) {
|
|
134
|
+
resolvePullRequestReviewThread(input: {threadId: $threadId}) {
|
|
135
|
+
thread { isResolved }
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
' -f threadId='<thread-id>'
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Reply guidelines:
|
|
142
|
+
|
|
143
|
+
- For straightforward fixes: `"Fixed ā <brief description of what changed>."`
|
|
144
|
+
- For nits: `"Done."` or `"Fixed, good catch."`
|
|
145
|
+
- For discussion threads you didn't change code for: Draft a substantive reply explaining the reasoning, but **do not resolve** ā leave it for the user.
|
|
146
|
+
|
|
147
|
+
## Step 6: Push
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
git push
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
If the push is rejected (e.g., remote has new commits), rebase first:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
git pull --rebase origin <branch-name>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
If rebase conflicts arise, stop and tell the user ā don't auto-resolve merge conflicts in a PR fix workflow.
|
|
160
|
+
|
|
161
|
+
## After completion
|
|
162
|
+
|
|
163
|
+
Summarize what you did:
|
|
164
|
+
|
|
165
|
+
1. How many threads were fixed and resolved
|
|
166
|
+
2. How many threads were replied to but left open (discussion/questions) ā list these so the user can review
|
|
167
|
+
3. How many threads were skipped (praise, already resolved)
|
|
168
|
+
4. The commit SHAs created
|
|
169
|
+
|
|
170
|
+
If any fixes felt uncertain or the reviewer's intent was ambiguous, call those out explicitly so the user can double-check before the next review round.
|
|
171
|
+
|
|
172
|
+
## Error handling
|
|
173
|
+
|
|
174
|
+
- **`gh` not found or not authenticated** ā Stop immediately, tell the user to install/auth `gh`.
|
|
175
|
+
- **No open PR for the given branch** ā Tell the user; the PR may be closed or merged.
|
|
176
|
+
- **Comment references deleted file** ā Reply noting the file no longer exists, skip the fix, don't resolve.
|
|
177
|
+
- **Build fails after a fix** ā Revert that commit, note it in the summary, move on to other fixes.
|
|
178
|
+
- **Rate limiting from GitHub API** ā Pause and retry with backoff. If persistent, batch remaining replies and tell the user.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
Source: https://gist.github.com/GSonofNun/35c67304c35dac7d6b43308b5371f671
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: takomi
|
|
3
|
-
description: Unified Takomi protocol skill for Codex. Routes natural-language requests to built-in workflow playbooks in this skill folder (no slash commands required).
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Takomi (Unified Skill)
|
|
7
|
-
|
|
8
|
-
This single skill contains the full non-legacy Takomi workflow suite.
|
|
9
|
-
Use it whenever a user says "use takomi", asks for Vibe Code lifecycle execution, or references any prior workflow names.
|
|
10
|
-
|
|
11
|
-
## How To Use
|
|
12
|
-
- Natural language is primary. Slash commands are optional and not required.
|
|
13
|
-
- Examples:
|
|
14
|
-
- `use takomi`
|
|
15
|
-
- `use takomi genesis`
|
|
16
|
-
- `run vibe genesis`
|
|
17
|
-
- `continue build with takomi`
|
|
18
|
-
|
|
19
|
-
## Router Behavior
|
|
20
|
-
1. Match user intent to one workflow playbook from `workflows/`.
|
|
21
|
-
2. Execute that playbook's protocol.
|
|
22
|
-
3. Recommend the next workflow stage after completion.
|
|
23
|
-
4. Allow explicit user overrides (guided gates, not hard blocks).
|
|
24
|
-
|
|
25
|
-
## Lifecycle Gates
|
|
26
|
-
- Discover/Prime: `vibe-primeAgent.md`, `reverse_genesis.md`
|
|
27
|
-
- Plan/Design: `vibe-genesis.md`, `vibe-design.md`, `mode-architect.md`, `mode-visionary.md`
|
|
28
|
-
- Build/Continue: `vibe-build.md`, `vibe-continueBuild.md`, `mode-code.md`, `stitch.md`, `remotion-build.md`
|
|
29
|
-
- Review/Finalize: `mode-review.md`, `review_code.md`, `vibe-finalize.md`, `vibe-syncDocs.md`
|
|
30
|
-
- Recovery/Migration: `agent_reset.md`, `escalate.md`, `migrate.md`, `optimize-agent-context.md`, `mode-orchestrator.md`, `mode-debug.md`, `mode-ask.md`, `vibe-spawnTask.md`, `spawn-jstar-code-review.md`
|
|
31
|
-
|
|
32
|
-
## Workflow Playbooks (Contained In This Skill)
|
|
33
|
-
- `workflows/vibe-genesis.md`
|
|
34
|
-
- `workflows/vibe-design.md`
|
|
35
|
-
- `workflows/vibe-build.md`
|
|
36
|
-
- `workflows/vibe-continueBuild.md`
|
|
37
|
-
- `workflows/vibe-finalize.md`
|
|
38
|
-
- `workflows/vibe-primeAgent.md`
|
|
39
|
-
- `workflows/vibe-spawnTask.md`
|
|
40
|
-
- `workflows/vibe-syncDocs.md`
|
|
41
|
-
- `workflows/reverse_genesis.md`
|
|
42
|
-
- `workflows/mode-orchestrator.md`
|
|
43
|
-
- `workflows/mode-architect.md`
|
|
44
|
-
- `workflows/mode-code.md`
|
|
45
|
-
- `workflows/mode-debug.md`
|
|
46
|
-
- `workflows/mode-ask.md`
|
|
47
|
-
- `workflows/mode-review.md`
|
|
48
|
-
- `workflows/mode-visionary.md`
|
|
49
|
-
- `workflows/review_code.md`
|
|
50
|
-
- `workflows/spawn-jstar-code-review.md`
|
|
51
|
-
- `workflows/agent_reset.md`
|
|
52
|
-
- `workflows/escalate.md`
|
|
53
|
-
- `workflows/migrate.md`
|
|
54
|
-
- `workflows/optimize-agent-context.md`
|
|
55
|
-
- `workflows/stitch.md`
|
|
56
|
-
- `workflows/remotion-build.md`
|
|
57
|
-
|
|
58
|
-
## Alias Map
|
|
59
|
-
See [references/migration-map.md](references/migration-map.md).
|
|
1
|
+
---
|
|
2
|
+
name: takomi
|
|
3
|
+
description: Unified Takomi protocol skill for Codex. Routes natural-language requests to built-in workflow playbooks in this skill folder (no slash commands required).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Takomi (Unified Skill)
|
|
7
|
+
|
|
8
|
+
This single skill contains the full non-legacy Takomi workflow suite.
|
|
9
|
+
Use it whenever a user says "use takomi", asks for Vibe Code lifecycle execution, or references any prior workflow names.
|
|
10
|
+
|
|
11
|
+
## How To Use
|
|
12
|
+
- Natural language is primary. Slash commands are optional and not required.
|
|
13
|
+
- Examples:
|
|
14
|
+
- `use takomi`
|
|
15
|
+
- `use takomi genesis`
|
|
16
|
+
- `run vibe genesis`
|
|
17
|
+
- `continue build with takomi`
|
|
18
|
+
|
|
19
|
+
## Router Behavior
|
|
20
|
+
1. Match user intent to one workflow playbook from `workflows/`.
|
|
21
|
+
2. Execute that playbook's protocol.
|
|
22
|
+
3. Recommend the next workflow stage after completion.
|
|
23
|
+
4. Allow explicit user overrides (guided gates, not hard blocks).
|
|
24
|
+
|
|
25
|
+
## Lifecycle Gates
|
|
26
|
+
- Discover/Prime: `vibe-primeAgent.md`, `reverse_genesis.md`
|
|
27
|
+
- Plan/Design: `vibe-genesis.md`, `vibe-design.md`, `mode-architect.md`, `mode-visionary.md`
|
|
28
|
+
- Build/Continue: `vibe-build.md`, `vibe-continueBuild.md`, `mode-code.md`, `stitch.md`, `remotion-build.md`
|
|
29
|
+
- Review/Finalize: `mode-review.md`, `review_code.md`, `vibe-finalize.md`, `vibe-syncDocs.md`
|
|
30
|
+
- Recovery/Migration: `agent_reset.md`, `escalate.md`, `migrate.md`, `optimize-agent-context.md`, `mode-orchestrator.md`, `mode-debug.md`, `mode-ask.md`, `vibe-spawnTask.md`, `spawn-jstar-code-review.md`
|
|
31
|
+
|
|
32
|
+
## Workflow Playbooks (Contained In This Skill)
|
|
33
|
+
- `workflows/vibe-genesis.md`
|
|
34
|
+
- `workflows/vibe-design.md`
|
|
35
|
+
- `workflows/vibe-build.md`
|
|
36
|
+
- `workflows/vibe-continueBuild.md`
|
|
37
|
+
- `workflows/vibe-finalize.md`
|
|
38
|
+
- `workflows/vibe-primeAgent.md`
|
|
39
|
+
- `workflows/vibe-spawnTask.md`
|
|
40
|
+
- `workflows/vibe-syncDocs.md`
|
|
41
|
+
- `workflows/reverse_genesis.md`
|
|
42
|
+
- `workflows/mode-orchestrator.md`
|
|
43
|
+
- `workflows/mode-architect.md`
|
|
44
|
+
- `workflows/mode-code.md`
|
|
45
|
+
- `workflows/mode-debug.md`
|
|
46
|
+
- `workflows/mode-ask.md`
|
|
47
|
+
- `workflows/mode-review.md`
|
|
48
|
+
- `workflows/mode-visionary.md`
|
|
49
|
+
- `workflows/review_code.md`
|
|
50
|
+
- `workflows/spawn-jstar-code-review.md`
|
|
51
|
+
- `workflows/agent_reset.md`
|
|
52
|
+
- `workflows/escalate.md`
|
|
53
|
+
- `workflows/migrate.md`
|
|
54
|
+
- `workflows/optimize-agent-context.md`
|
|
55
|
+
- `workflows/stitch.md`
|
|
56
|
+
- `workflows/remotion-build.md`
|
|
57
|
+
|
|
58
|
+
## Alias Map
|
|
59
|
+
See [references/migration-map.md](references/migration-map.md).
|
package/package.json
CHANGED
|
@@ -1,42 +1,59 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "takomi",
|
|
3
|
-
"version": "2.0
|
|
4
|
-
"description": "šÆ Stop wrestling with AI. Start building with purpose. The artisan's toolkit
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"takomi": "./bin/takomi.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"bin",
|
|
11
|
-
"src",
|
|
12
|
-
"assets"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "takomi",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "šÆ Stop wrestling with AI. Start building with purpose. The artisan's toolkit for agent workflows, Codex skills, and original Takomi capabilities like 21st.dev integration.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"takomi": "./bin/takomi.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin",
|
|
11
|
+
"src",
|
|
12
|
+
"assets",
|
|
13
|
+
".pi/README.md",
|
|
14
|
+
".pi/agents",
|
|
15
|
+
".pi/extensions",
|
|
16
|
+
".pi/prompts",
|
|
17
|
+
".pi/themes"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/JStaRFilms/VibeCode-Protocol-Suite.git"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"takomi",
|
|
28
|
+
"ai",
|
|
29
|
+
"skills",
|
|
30
|
+
"codex",
|
|
31
|
+
"agentic",
|
|
32
|
+
"21st.dev",
|
|
33
|
+
"vibecode",
|
|
34
|
+
"cursor",
|
|
35
|
+
"windsurf",
|
|
36
|
+
"protocols"
|
|
37
|
+
],
|
|
38
|
+
"author": "J StaR Films Studios",
|
|
39
|
+
"license": "ISC",
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"commander": "^13.1.0",
|
|
42
|
+
"figlet": "^1.8.0",
|
|
43
|
+
"fs-extra": "^11.3.0",
|
|
44
|
+
"pi-subagents": "^0.24.0",
|
|
45
|
+
"picocolors": "^1.1.1",
|
|
46
|
+
"prompts": "^2.4.2"
|
|
47
|
+
},
|
|
48
|
+
"bugs": {
|
|
49
|
+
"url": "https://github.com/JStaRFilms/VibeCode-Protocol-Suite/issues"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/JStaRFilms/VibeCode-Protocol-Suite#readme",
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@mariozechner/pi-ai": "^0.70.2",
|
|
54
|
+
"@mariozechner/pi-coding-agent": "^0.70.2",
|
|
55
|
+
"@types/node": "^25.5.2",
|
|
56
|
+
"typebox": "^1.1.33",
|
|
57
|
+
"typescript": "^6.0.2"
|
|
58
|
+
}
|
|
42
59
|
}
|
package/src/cli.js
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
copyAgentReadme,
|
|
16
16
|
copyAgentYamls,
|
|
17
17
|
copyLegacyManual,
|
|
18
|
+
copyBundledPiAssets,
|
|
18
19
|
updateWorkflows,
|
|
19
20
|
updateSkills,
|
|
20
21
|
updateAgentYamls,
|
|
@@ -39,6 +40,10 @@ import {
|
|
|
39
40
|
getStoreWorkflows,
|
|
40
41
|
isStoreInitialized,
|
|
41
42
|
} from './store.js';
|
|
43
|
+
import { runDoctor } from './doctor.js';
|
|
44
|
+
import { ensurePiInstalled, ensurePiSubagentsInstalled, launchTakomiHarness, printPiInstallResult, printPiSubagentsInstallResult } from './pi-harness.js';
|
|
45
|
+
import { installPiHarnessAssets, printPiInstallSummary, syncPiHarnessAssets, validatePiHarnessInstall } from './pi-installer.js';
|
|
46
|
+
import { installBundledSkills, printSkillsInstallSummary, validateSkillsInstall } from './skills-installer.js';
|
|
42
47
|
|
|
43
48
|
const program = new Command();
|
|
44
49
|
|
|
@@ -124,6 +129,10 @@ async function init() {
|
|
|
124
129
|
// 0. Install from local assets
|
|
125
130
|
console.log(pc.cyan('š¦ Installing from local bundle...\n'));
|
|
126
131
|
|
|
132
|
+
if (await copyBundledPiAssets(destRoot)) {
|
|
133
|
+
console.log(pc.green('ā Installed Pi-native Takomi runtime (.pi).'));
|
|
134
|
+
}
|
|
135
|
+
|
|
127
136
|
// 1. Handle .agent Folder
|
|
128
137
|
if (response.components.includes('agent')) {
|
|
129
138
|
const agentDest = path.join(destRoot, '.agent');
|
|
@@ -160,11 +169,11 @@ async function init() {
|
|
|
160
169
|
// Handle Skills
|
|
161
170
|
if (response.skillMode === 'core') {
|
|
162
171
|
console.log(pc.green('ā Downloading Core Skills...'));
|
|
163
|
-
const coreSkills = [
|
|
164
|
-
'takomi',
|
|
165
|
-
'ai-sdk', 'code-review', 'component-analysis',
|
|
166
|
-
'nextjs-standards', 'security-audit', 'spawn-task',
|
|
167
|
-
'stitch', 'sync-docs'
|
|
172
|
+
const coreSkills = [
|
|
173
|
+
'takomi',
|
|
174
|
+
'ai-sdk', 'code-review', 'component-analysis',
|
|
175
|
+
'nextjs-standards', 'security-audit', 'spawn-task',
|
|
176
|
+
'stitch', 'sync-docs'
|
|
168
177
|
];
|
|
169
178
|
await copySpecificSkills(coreSkills, skillsDest);
|
|
170
179
|
} else if (response.skillMode === 'all') {
|
|
@@ -197,7 +206,8 @@ async function init() {
|
|
|
197
206
|
console.log(pc.white(`\nNext steps:`));
|
|
198
207
|
if (response.components.includes('agent')) {
|
|
199
208
|
console.log(pc.gray(`1. Your .agent folder is armed and ready.`));
|
|
200
|
-
console.log(pc.gray(`2.
|
|
209
|
+
console.log(pc.gray(`2. Your Pi-native .pi Takomi runtime is installed.`));
|
|
210
|
+
console.log(pc.gray(`3. In Codex, say "use takomi genesis" (slash command optional).`));
|
|
201
211
|
}
|
|
202
212
|
console.log(pc.dim(`\nš” Pro tip: Run "takomi install" to sync this toolkit across all your IDEs.\n`));
|
|
203
213
|
|
|
@@ -206,11 +216,125 @@ async function init() {
|
|
|
206
216
|
}
|
|
207
217
|
}
|
|
208
218
|
|
|
219
|
+
async function installSkillsTarget() {
|
|
220
|
+
console.log(pc.magenta('š§° Takomi Skills Install\n'));
|
|
221
|
+
try {
|
|
222
|
+
const result = await installBundledSkills(program.version());
|
|
223
|
+
const validation = await validateSkillsInstall();
|
|
224
|
+
printSkillsInstallSummary(result, validation);
|
|
225
|
+
console.log(pc.dim('\nGlobal skills are ready for Pi or other supported harnesses.\n'));
|
|
226
|
+
} catch (error) {
|
|
227
|
+
console.log(pc.red('\nSkills install failed.'));
|
|
228
|
+
console.log(pc.dim(String(error?.message || error)));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
async function installAllTargets() {
|
|
233
|
+
await installPiTarget();
|
|
234
|
+
await installSkillsTarget();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
async function installPiTarget() {
|
|
238
|
+
console.log(pc.magenta('š§ Pi Harness Preflight\n'));
|
|
239
|
+
const report = await runDoctor({ version: program.version() });
|
|
240
|
+
|
|
241
|
+
if (!report.pi.installed) {
|
|
242
|
+
console.log(pc.cyan('\nš¦ Installing Pi...\n'));
|
|
243
|
+
const installResult = await ensurePiInstalled();
|
|
244
|
+
printPiInstallResult(installResult);
|
|
245
|
+
if (!installResult.ok) {
|
|
246
|
+
console.log(pc.yellow('\nPi harness install stopped because Pi could not be installed.'));
|
|
247
|
+
console.log(pc.dim('Retry manually with: npm install -g @mariozechner/pi-coding-agent\n'));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (!report.piSubagents.localInstalled && !report.piSubagents.globalInstalled) {
|
|
253
|
+
console.log(pc.cyan('\nš¦ Installing pi-subagents...\n'));
|
|
254
|
+
const installResult = await ensurePiSubagentsInstalled();
|
|
255
|
+
printPiSubagentsInstallResult(installResult);
|
|
256
|
+
if (!installResult.ok) {
|
|
257
|
+
console.log(pc.yellow('\nPi harness install stopped because pi-subagents could not be installed.'));
|
|
258
|
+
console.log(pc.dim('Retry manually with: npm install -g pi-subagents\n'));
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
console.log(pc.cyan('\nš¦ Installing Takomi Pi harness assets...\n'));
|
|
264
|
+
try {
|
|
265
|
+
const result = await installPiHarnessAssets(program.version());
|
|
266
|
+
const validation = await validatePiHarnessInstall();
|
|
267
|
+
printPiInstallSummary(result, validation);
|
|
268
|
+
console.log(pc.dim('\nNext: cd <project> && takomi\n'));
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.log(pc.red('\nPi harness asset install failed.'));
|
|
271
|
+
console.log(pc.dim(String(error?.message || error)));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
async function syncPiTarget() {
|
|
276
|
+
console.log(pc.magenta('š” Takomi Pi Sync\n'));
|
|
277
|
+
try {
|
|
278
|
+
const result = await syncPiHarnessAssets(program.version());
|
|
279
|
+
const validation = await validatePiHarnessInstall();
|
|
280
|
+
printPiInstallSummary(result, validation);
|
|
281
|
+
} catch (error) {
|
|
282
|
+
console.log(pc.red('\nPi sync failed.'));
|
|
283
|
+
console.log(pc.dim(String(error?.message || error)));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
async function syncSkillsTarget() {
|
|
288
|
+
console.log(pc.magenta('š” Takomi Skills Sync\n'));
|
|
289
|
+
try {
|
|
290
|
+
const result = await installBundledSkills(program.version());
|
|
291
|
+
const validation = await validateSkillsInstall();
|
|
292
|
+
printSkillsInstallSummary(result, validation);
|
|
293
|
+
} catch (error) {
|
|
294
|
+
console.log(pc.red('\nSkills sync failed.'));
|
|
295
|
+
console.log(pc.dim(String(error?.message || error)));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
async function syncAllTargets() {
|
|
300
|
+
await syncPiTarget();
|
|
301
|
+
await syncSkillsTarget();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function printUnsupportedInstallTarget(target) {
|
|
305
|
+
console.log(pc.yellow(`Unsupported install target: ${target}`));
|
|
306
|
+
console.log(pc.dim('Supported targets right now: pi, skills, all'));
|
|
307
|
+
console.log(pc.dim('Use plain "takomi install" for the existing interactive global installer.\n'));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function printUnsupportedSyncTarget(target) {
|
|
311
|
+
console.log(pc.yellow(`Unsupported sync target: ${target}`));
|
|
312
|
+
console.log(pc.dim('Supported targets right now: pi, skills, all'));
|
|
313
|
+
console.log(pc.dim('Use plain "takomi sync" for the existing interactive global sync.\n'));
|
|
314
|
+
}
|
|
315
|
+
|
|
209
316
|
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
210
317
|
// takomi install (NEW ā Global Setup + Harness Routing)
|
|
211
318
|
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
212
319
|
|
|
213
|
-
async function install() {
|
|
320
|
+
async function install(target) {
|
|
321
|
+
if (target) {
|
|
322
|
+
if (target === 'pi') {
|
|
323
|
+
await installPiTarget();
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (target === 'skills') {
|
|
327
|
+
await installSkillsTarget();
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (target === 'all') {
|
|
331
|
+
await installAllTargets();
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
printUnsupportedInstallTarget(target);
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
214
338
|
console.log(pc.magenta(figlet.textSync('Takomi', { horizontalLayout: 'full' })));
|
|
215
339
|
console.log(pc.cyan(' š One install. Every IDE. Zero friction.\n'));
|
|
216
340
|
|
|
@@ -220,7 +344,7 @@ async function install() {
|
|
|
220
344
|
|
|
221
345
|
if (detected.length === 0) {
|
|
222
346
|
console.log(pc.yellow(' No AI harnesses detected on this machine.'));
|
|
223
|
-
console.log(pc.dim(' We support: Antigravity, KiloCode, Windsurf, Cursor, Gemini CLI'));
|
|
347
|
+
console.log(pc.dim(' We support: Antigravity, KiloCode, Windsurf, Codex, Cursor, Gemini CLI'));
|
|
224
348
|
console.log(pc.dim(' Run "takomi init" instead for per-project setup.\n'));
|
|
225
349
|
return;
|
|
226
350
|
}
|
|
@@ -359,7 +483,23 @@ async function install() {
|
|
|
359
483
|
// takomi sync (NEW ā Re-sync store to all harnesses)
|
|
360
484
|
// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
361
485
|
|
|
362
|
-
async function sync() {
|
|
486
|
+
async function sync(target) {
|
|
487
|
+
if (target) {
|
|
488
|
+
if (target === 'pi') {
|
|
489
|
+
await syncPiTarget();
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
if (target === 'skills') {
|
|
493
|
+
await syncSkillsTarget();
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
if (target === 'all') {
|
|
497
|
+
await syncAllTargets();
|
|
498
|
+
return;
|
|
499
|
+
}
|
|
500
|
+
printUnsupportedSyncTarget(target);
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
363
503
|
console.log(pc.magenta('š” Syncing your toolkit to all connected IDEs...\n'));
|
|
364
504
|
|
|
365
505
|
// Check if global store exists
|
|
@@ -535,7 +675,7 @@ async function harnesses() {
|
|
|
535
675
|
program
|
|
536
676
|
.name('takomi')
|
|
537
677
|
.description('Your AI team. Activated. šÆ')
|
|
538
|
-
.version('2.0.
|
|
678
|
+
.version('2.0.7');
|
|
539
679
|
|
|
540
680
|
// Per-project setup (backward compatible)
|
|
541
681
|
program
|
|
@@ -545,14 +685,14 @@ program
|
|
|
545
685
|
|
|
546
686
|
// Global installer (NEW)
|
|
547
687
|
program
|
|
548
|
-
.command('install')
|
|
549
|
-
.description('Build your global command center')
|
|
688
|
+
.command('install [target]')
|
|
689
|
+
.description('Build your global command center or run a target-specific installer')
|
|
550
690
|
.action(install);
|
|
551
691
|
|
|
552
692
|
// Re-sync (NEW)
|
|
553
693
|
program
|
|
554
|
-
.command('sync')
|
|
555
|
-
.description('Push updates to all connected IDEs')
|
|
694
|
+
.command('sync [target]')
|
|
695
|
+
.description('Push updates to all connected IDEs or sync a target-specific install')
|
|
556
696
|
.action(sync);
|
|
557
697
|
|
|
558
698
|
// Add remote skills (NEW)
|
|
@@ -567,6 +707,11 @@ program
|
|
|
567
707
|
.description('See your toolkit status and connected IDEs')
|
|
568
708
|
.action(harnesses);
|
|
569
709
|
|
|
710
|
+
program
|
|
711
|
+
.command('doctor')
|
|
712
|
+
.description('Run Pi/Takomi installation diagnostics')
|
|
713
|
+
.action(() => runDoctor({ version: program.version() }));
|
|
714
|
+
|
|
570
715
|
// Update from GitHub (EXISTING ā enhanced)
|
|
571
716
|
program
|
|
572
717
|
.command('update')
|
|
@@ -636,4 +781,9 @@ program
|
|
|
636
781
|
console.log(pc.magenta('\n⨠Your toolkit is fresh and ready to ship.'));
|
|
637
782
|
});
|
|
638
783
|
|
|
639
|
-
|
|
784
|
+
if (process.argv.length <= 2) {
|
|
785
|
+
const exitCode = await launchTakomiHarness(process.cwd());
|
|
786
|
+
process.exitCode = exitCode;
|
|
787
|
+
} else {
|
|
788
|
+
program.parse();
|
|
789
|
+
}
|