claude-dev-env 7.2.1 → 7.4.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/.agents/skills/session-continuity/continuity.mjs +1 -3
- package/.agents/skills/session-continuity/continuity.test.mjs +12 -4
- package/AGENTS.md +12 -2
- package/bin/install.agents-home.test.mjs +1 -0
- package/bin/install.codex-rules.test.mjs +2 -0
- package/bin/install.cursor-rules.test.mjs +1 -0
- package/bin/install.mjs +57 -10
- package/bin/install.prune.test.mjs +1 -0
- package/bin/install.pstack-plugin.test.mjs +1 -0
- package/bin/install.settings-defaults.test.mjs +1 -0
- package/bin/install.test.mjs +117 -4
- package/bin/install.transaction.test.mjs +6 -0
- package/bin/install.uninstall-transaction.test.mjs +2 -0
- package/bin/pstack-codex-discovery.test.mjs +79 -0
- package/bin/pstack.mjs +350 -0
- package/bin/pstack.test.mjs +289 -0
- package/package.json +2 -1
- package/scripts/pstack-adapters/common.md +17 -0
- package/scripts/pstack-adapters/create-skill.md +14 -0
- package/scripts/pstack-adapters/host-claude.md +7 -0
- package/scripts/pstack-adapters/host-codex.md +11 -0
- package/scripts/pstack-adapters/host-cursor.md +7 -0
- package/scripts/pstack.lock.json +11 -0
- package/scripts/tests/test_rules.py +25 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Pstack compatibility
|
|
2
|
+
|
|
3
|
+
Apply this mapping to the upstream workflow below. User instructions and host permissions stay in charge.
|
|
4
|
+
|
|
5
|
+
Determine the active host from the session's native tools. Read host-claude.md, host-codex.md, or host-cursor.md beside this file for the active host. Read pstack-host-mapping.md and pstack-models.md beside this file before delegation. Those files are copied from claude-dev-env's existing rules into this immutable release. Run the selectorPath recorded in release.json and supply its preferencesDirectory in the selector input. This overrides the old global selector path. Model preferences remain outside the release.
|
|
6
|
+
|
|
7
|
+
Installed skill names have a component prefix. Read the installed inventory in release.json. A pstack request for how, /how, or pstack:how means pstack-how. A cursor-team-kit request for deslop means cursor-team-kit-deslop. Resolve all other skill names through that inventory. Read each leaf skill in full when it applies. Keep each skill's scripts, references, playbooks, and agent definitions at its recorded source root.
|
|
8
|
+
|
|
9
|
+
Every delegation prompt must include this compatibility file's absolute path, the active host file's absolute path, the selected skill's absolute path, and the requested upstream agent definition's absolute path when present. Tell the child to read them before working and to put the complete findings and evidence in its final message. The child receives the same host and model mapping as the parent.
|
|
10
|
+
|
|
11
|
+
Treat upstream model identifiers as role preferences. Use only models and arguments accepted by the native tool in this session. Preserve required independence and model diversity. Report a missing capability when the session cannot supply the required independent panel. Use the native tool's supported concurrency and wait operations.
|
|
12
|
+
|
|
13
|
+
For setup-pstack, configure only the current host's model preference file described in pstack-models.md. Keep that file outside this release. The Cursor .mdc output is a Cursor rule, not a cross-host model configuration.
|
|
14
|
+
|
|
15
|
+
For create-skill, use Cursor's built-in skill on Cursor and cde-create-skill on Claude or Codex. For control-cli and control-ui, load the corresponding installed cursor-team-kit skill and use native terminal or browser tools. Check that the required CLI, browser, credentials, and permissions exist before executing its steps. State an unavailable dependency explicitly. Never claim an unattended browser or remote session ran from a filesystem check.
|
|
16
|
+
|
|
17
|
+
Updates are prepared outside the active release. Follow absolute paths into the release named in this entry point for the rest of this task. Preserve supporting files and scripts, including executable modes and licenses.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cde-create-skill
|
|
3
|
+
description: Write or update a portable SKILL.md workflow when pstack requests create-skill on a host without Cursor's built-in skill.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Create a portable skill
|
|
7
|
+
|
|
8
|
+
State the user-visible outcome and the exact trigger first. Inspect applicable repository instructions and existing skills before adding a new skill.
|
|
9
|
+
|
|
10
|
+
Create a lowercase, hyphenated skill directory under the project's .claude/skills. Give SKILL.md YAML frontmatter with a matching name and a one-line description that says when to use it. Put the workflow after the frontmatter. Keep supporting scripts and references together with the skill, and use relative links inside it. Add a Codex .agents/skills directory link where needed, preserving existing files.
|
|
11
|
+
|
|
12
|
+
Use native host tools and capability checks. Give each step a concrete input, action, and observable result. Separate human choices from facts the agent can inspect. Read referenced instructions before using them.
|
|
13
|
+
|
|
14
|
+
Verify metadata, links, and script behavior. Then invoke the installed skill in the intended host and record the actual result. Distinguish a filesystem check from a native invocation. Keep the scope to the requested workflow.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Claude Code
|
|
2
|
+
|
|
3
|
+
Use Claude Code's native Skill mechanism to load installed skills. Use Agent for Task requests, with only arguments the session exposes. For an upstream poteto-agent or another unavailable agent type, use an available general-purpose agent and include the upstream definition and compatibility files in its prompt. A file on disk does not register a native agent type.
|
|
4
|
+
|
|
5
|
+
Use AskUserQuestion for a required human choice. Use Read, Glob, Grep, Edit, Write, Bash, and the available browser tools for their corresponding work. Read native tool schemas rather than forwarding Cursor-only arguments. Use background execution only when the current tool supports it.
|
|
6
|
+
|
|
7
|
+
Choose model aliases accepted by this session. Omit the model argument for permitted parent inheritance. Keep host preferences in the profile's agents-home rules/pstack-model-preferences.claude.json. Use the current session's transcript location, or state that transcripts are unavailable.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Codex
|
|
2
|
+
|
|
3
|
+
Load SKILL.md with the native skill mechanism or read its complete file with the available file tool. Codex does not need a Claude Skill tool.
|
|
4
|
+
|
|
5
|
+
Map Task or Agent to the native spawn_agent, wait, send_input, and close_agent operations that this session exposes. Field names vary by host version. Inspect the live schema. For poteto-agent, include the upstream agent definition, skill entry, and compatibility files in the child prompt. Select an available native agent type. Do not pass subagent_type, run_in_background, or a model argument unless that tool accepts it.
|
|
6
|
+
|
|
7
|
+
Use the native shell for commands, apply_patch or the native editor for edits, and the available browser tool for UI work. Ask the user through the current session's supported interaction mechanism for a genuine preference decision.
|
|
8
|
+
|
|
9
|
+
A multi-agent feature setting in a CLI profile does not establish subagent support in a cloud session. Check available tools. Required independent or cross-model review stops with a clear capability report when that session cannot provide it. Keep configured model preferences in the profile's agents-home rules/pstack-model-preferences.codex.json. Read the current transcript location from host context, not ~/.cursor/projects.
|
|
10
|
+
|
|
11
|
+
The selector's availableModelIds contains only models selectable through this session's delegation tool. A tool without a model argument supplies an empty list and uses permitted parent inheritance. A provider's general model catalog is not proof of per-delegation model selection.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Cursor
|
|
2
|
+
|
|
3
|
+
Use Cursor's available native skill and delegation tools. The installed component-prefixed names in release.json replace upstream plugin short names. Keep project skills under .claude/skills and use the .agents/skills links for shared discovery. The installer writes no skills under .cursor.
|
|
4
|
+
|
|
5
|
+
For an upstream custom agent type absent from the live tool inventory, use an available native agent type and include that upstream agent definition, the skill entry, and compatibility files in the child prompt. Use the session's supported model identifiers and delegation fields. Preserve required panel independence and model diversity.
|
|
6
|
+
|
|
7
|
+
Use Cursor's built-in create-skill when present. Otherwise read cde-create-skill. Keep Cursor-specific preferences separate from Claude and Codex preferences. Resolve transcripts from the current workspace and session context.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"adapterVersion": 1,
|
|
4
|
+
"repository": "https://github.com/cursor/plugins.git",
|
|
5
|
+
"commit": "27e2a62ff94f9af4b5e68435e41cdceacadb840c",
|
|
6
|
+
"components": ["pstack", "cursor-team-kit"],
|
|
7
|
+
"requiredSkills": {
|
|
8
|
+
"pstack": ["poteto-mode"],
|
|
9
|
+
"cursor-team-kit": ["deslop", "control-cli", "control-ui"]
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -125,6 +125,31 @@ def _worker_policy_surfaces(package_root: Path) -> tuple[Path, ...]:
|
|
|
125
125
|
)
|
|
126
126
|
|
|
127
127
|
|
|
128
|
+
def _banned_word_real_phrases() -> tuple[str, ...]:
|
|
129
|
+
return (
|
|
130
|
+
"banned word: real",
|
|
131
|
+
"never write real, really, or real-world",
|
|
132
|
+
"this ban has no exception",
|
|
133
|
+
"swapping in actual, actually, genuine, or true is the same move",
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def _banned_word_real_surfaces(package_root: Path) -> tuple[Path, ...]:
|
|
138
|
+
return (
|
|
139
|
+
package_root.parent.parent / "AGENTS.md",
|
|
140
|
+
package_root / "AGENTS.md",
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def test_banned_word_real_reaches_installed_instruction_surfaces() -> None:
|
|
145
|
+
all_expected_phrases = _banned_word_real_phrases()
|
|
146
|
+
|
|
147
|
+
for each_surface_path in _banned_word_real_surfaces(_PACKAGE_ROOT):
|
|
148
|
+
surface_text = each_surface_path.read_text(encoding="utf-8").lower()
|
|
149
|
+
for each_phrase in all_expected_phrases:
|
|
150
|
+
assert each_phrase in surface_text, each_surface_path
|
|
151
|
+
|
|
152
|
+
|
|
128
153
|
def test_comment_guidance_reaches_installed_instruction_surfaces() -> None:
|
|
129
154
|
expected_phrases = _comment_policy_phrases()
|
|
130
155
|
all_surface_paths = _comment_policy_surfaces(_PACKAGE_ROOT)
|