claude-dev-env 8.85.0 → 8.85.2
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/efficient-review/SKILL.md +79 -0
- package/.agents/skills/efficient-review/defaults.json +12 -0
- package/.agents/skills/efficient-review/reference/cloud-session.md +13 -0
- package/bin/codex-skill-load-block.mjs +27 -28
- package/bin/codex-skill-load-block.test.mjs +62 -30
- package/bin/codex-trimmed-sol.test.mjs +1 -0
- package/bin/ever-shipped-skills.mjs +1 -0
- package/bin/install-deepstack-plugin.mjs +300 -0
- package/bin/install-deepstack-plugin.test.mjs +98 -0
- package/bin/install-pstack-plugin.mjs +3 -5
- package/bin/install-pstack-plugin.test.mjs +28 -0
- 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 +27 -3
- package/bin/install.profile-settings.test.mjs +1 -0
- package/bin/install.prune.test.mjs +20 -0
- package/bin/install.question-presentation.test.mjs +7 -3
- package/bin/install.settings-defaults.test.mjs +1 -0
- package/bin/install.shared-settings.test.mjs +1 -0
- package/bin/install.test.mjs +79 -10
- package/bin/install.transaction.test.mjs +8 -0
- package/bin/install.uninstall-transaction.test.mjs +2 -0
- package/bin/install.update-keeps-hooks.test.mjs +1 -0
- package/docs/decisions/deepstack-install.md +9 -0
- package/docs/rule-guides/deepstack-wording.md +23 -0
- package/package.json +1 -1
- package/rules/deepstack-wording.md +15 -0
- package/scripts/deepstack_inventory.py +348 -0
- package/scripts/dev_env_scripts_constants/deepstack_inventory_constants.py +42 -0
- package/scripts/test_deepstack_inventory.py +137 -0
- package/scripts/test_deepstack_wording_rule.py +20 -0
|
@@ -63,6 +63,7 @@ function runInstallerInSandbox(sandboxHome, installerArguments = []) {
|
|
|
63
63
|
CLAUDE_CONFIG_DIR: undefined,
|
|
64
64
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
65
65
|
CDE_INSTALL_PSTACK: '0',
|
|
66
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
66
67
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
67
68
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
68
69
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -31,6 +31,7 @@ function installEnvironment(homeDirectory) {
|
|
|
31
31
|
CLAUDE_CONFIG_DIR: '',
|
|
32
32
|
GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
|
|
33
33
|
CDE_INSTALL_PSTACK: '0',
|
|
34
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
34
35
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
35
36
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
36
37
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
package/bin/install.test.mjs
CHANGED
|
@@ -57,12 +57,12 @@ import {
|
|
|
57
57
|
} from './install.mjs';
|
|
58
58
|
import { EVER_SHIPPED_SKILL_NAMES } from './ever-shipped-skills.mjs';
|
|
59
59
|
import {
|
|
60
|
+
DEEPEN_GUIDANCE_BLOCK_START,
|
|
60
61
|
PACKAGE_GUIDANCE_BLOCK_END,
|
|
61
62
|
PACKAGE_GUIDANCE_BLOCK_START,
|
|
62
|
-
SKILL_LOAD_BLOCK_START,
|
|
63
|
-
SKILL_LOAD_INSTRUCTION,
|
|
64
63
|
QUESTION_PRESENTATION_BLOCK_START,
|
|
65
|
-
|
|
64
|
+
SKILL_LOAD_BLOCK_END,
|
|
65
|
+
SKILL_LOAD_BLOCK_START,
|
|
66
66
|
} from './codex-skill-load-block.mjs';
|
|
67
67
|
|
|
68
68
|
|
|
@@ -262,6 +262,11 @@ test('CORE_SKILLS ships deepen so the first-task skill installs with core', () =
|
|
|
262
262
|
assert.equal(INSTALL_GROUPS.core.skills.includes('deepen'), true);
|
|
263
263
|
});
|
|
264
264
|
|
|
265
|
+
test('CORE_SKILLS ships efficient-review so a core install includes the skill', () => {
|
|
266
|
+
assert.ok(CORE_SKILLS.includes('efficient-review'), 'efficient-review must be in CORE_SKILLS');
|
|
267
|
+
assert.equal(INSTALL_GROUPS.core.skills.includes('efficient-review'), true);
|
|
268
|
+
});
|
|
269
|
+
|
|
265
270
|
test('CORE_SKILLS ships test-runner for explicit Django and Playwright readiness checks', () => {
|
|
266
271
|
assert.ok(CORE_SKILLS.includes('test-runner'));
|
|
267
272
|
assert.equal(INSTALL_GROUPS.core.skills.includes('test-runner'), true);
|
|
@@ -3040,6 +3045,7 @@ test('a failed update preserves an existing skills lookup pointer', () => {
|
|
|
3040
3045
|
CLAUDE_CONFIG_DIR: '',
|
|
3041
3046
|
GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
|
|
3042
3047
|
CDE_INSTALL_PSTACK: '0',
|
|
3048
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
3043
3049
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
3044
3050
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
3045
3051
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -3094,6 +3100,7 @@ function runPstackInstaller(homeDirectory, extraArguments, environmentOverrides
|
|
|
3094
3100
|
CLAUDE_CONFIG_DIR: join(homeDirectory, '.claude'),
|
|
3095
3101
|
GIT_CONFIG_GLOBAL: join(homeDirectory, '.gitconfig'),
|
|
3096
3102
|
CDE_INSTALL_PSTACK: '1',
|
|
3103
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
3097
3104
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
3098
3105
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
3099
3106
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -3124,6 +3131,17 @@ function pstackPluginSandbox(t) {
|
|
|
3124
3131
|
};
|
|
3125
3132
|
}
|
|
3126
3133
|
|
|
3134
|
+
const STALE_SKILL_LOAD_SENTENCE = 'Load the pstack:poteto-mode skill before your first tool call or reply: '
|
|
3135
|
+
+ 'open its SKILL.md from your skills list and follow it. This binds every Codex agent, '
|
|
3136
|
+
+ 'including a helper started with spawn_agent, whatever its task message says.';
|
|
3137
|
+
|
|
3138
|
+
function assertOmitsSkillLoadSentence(codexGuidance) {
|
|
3139
|
+
assert.equal(codexGuidance.includes(SKILL_LOAD_BLOCK_START), false);
|
|
3140
|
+
assert.equal(codexGuidance.includes(SKILL_LOAD_BLOCK_END), false);
|
|
3141
|
+
assert.equal(codexGuidance.includes('pstack:poteto-mode'), false);
|
|
3142
|
+
assert.equal(codexGuidance.includes(STALE_SKILL_LOAD_SENTENCE), false);
|
|
3143
|
+
}
|
|
3144
|
+
|
|
3127
3145
|
test('a full install adds the pstack marketplace and plugin on both hosts', t => {
|
|
3128
3146
|
const sandbox = pstackPluginSandbox(t);
|
|
3129
3147
|
|
|
@@ -3145,9 +3163,10 @@ test('a full install adds the pstack marketplace and plugin on both hosts', t =>
|
|
|
3145
3163
|
const sheet = readFileSync(join(codexHome, 'pstack-models.md'), 'utf8');
|
|
3146
3164
|
const agents = readFileSync(join(codexHome, 'AGENTS.md'), 'utf8');
|
|
3147
3165
|
assert.match(sheet, /^session hook: on$/m);
|
|
3166
|
+
assert.match(agents, /^# pstack model configuration\n/);
|
|
3148
3167
|
assert.match(agents, /^feature, refactoring: gpt-6-sol$/m);
|
|
3149
3168
|
assert.doesNotMatch(agents, /^session hook:/m);
|
|
3150
|
-
|
|
3169
|
+
assertOmitsSkillLoadSentence(agents);
|
|
3151
3170
|
assert.equal(existsSync(join(sandbox.homeDirectory, '.claude', 'pstack-models.md')), false);
|
|
3152
3171
|
const manifestPath = join(sandbox.homeDirectory, '.claude', '.claude-dev-env-manifest.json');
|
|
3153
3172
|
const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
|
|
@@ -3155,18 +3174,66 @@ test('a full install adds the pstack marketplace and plugin on both hosts', t =>
|
|
|
3155
3174
|
assert.equal(manifest.files.includes(join(codexHome, 'AGENTS.md')), false);
|
|
3156
3175
|
});
|
|
3157
3176
|
|
|
3177
|
+
test('a full install adds DeepStack for Claude, Codex, and Cursor', t => {
|
|
3178
|
+
const sandbox = pstackPluginSandbox(t);
|
|
3179
|
+
const sourceDirectory = join(sandbox.homeDirectory, 'deepstack-source');
|
|
3180
|
+
mkdirSync(join(sourceDirectory, 'skills', 'deepstack-mode'), { recursive: true });
|
|
3181
|
+
mkdirSync(join(sourceDirectory, 'hooks'), { recursive: true });
|
|
3182
|
+
writeFileSync(join(sourceDirectory, 'skills', 'deepstack-mode', 'SKILL.md'), 'DeepStack intake\n');
|
|
3183
|
+
writeFileSync(join(sourceDirectory, 'hooks', 'session-start.sh'), '#!/bin/sh\n', { mode: 0o755 });
|
|
3184
|
+
|
|
3185
|
+
const installerOutput = runPstackInstaller(sandbox.homeDirectory, [], {
|
|
3186
|
+
...sandbox.environment,
|
|
3187
|
+
CDE_INSTALL_PSTACK: '0',
|
|
3188
|
+
CDE_INSTALL_DEEPSTACK: '1',
|
|
3189
|
+
CDE_DEEPSTACK_SOURCE: sourceDirectory,
|
|
3190
|
+
});
|
|
3191
|
+
|
|
3192
|
+
assert.deepEqual(sandbox.recordedCommands(), [
|
|
3193
|
+
'claude plugin uninstall deepstack@DeepStack',
|
|
3194
|
+
'claude plugin marketplace remove DeepStack',
|
|
3195
|
+
'claude plugin marketplace add jl-cmd-projects/DeepStack',
|
|
3196
|
+
'claude plugin install deepstack@DeepStack',
|
|
3197
|
+
'codex plugin remove deepstack@DeepStack',
|
|
3198
|
+
'codex plugin marketplace remove DeepStack',
|
|
3199
|
+
'codex plugin marketplace add jl-cmd-projects/DeepStack',
|
|
3200
|
+
'codex plugin add deepstack@DeepStack',
|
|
3201
|
+
]);
|
|
3202
|
+
assert.match(installerOutput, /DeepStack \(claude\): installed/);
|
|
3203
|
+
assert.match(installerOutput, /DeepStack \(codex\): installed/);
|
|
3204
|
+
assert.match(installerOutput, /DeepStack \(cursor\): installed/);
|
|
3205
|
+
const cursorPlugin = join(sandbox.homeDirectory, '.cursor', 'plugins', 'deepstack');
|
|
3206
|
+
assert.equal(
|
|
3207
|
+
readFileSync(join(cursorPlugin, 'skills', 'deepstack-mode', 'SKILL.md'), 'utf8'),
|
|
3208
|
+
'DeepStack intake\n',
|
|
3209
|
+
);
|
|
3210
|
+
const hooks = JSON.parse(readFileSync(join(sandbox.homeDirectory, '.cursor', 'hooks.json'), 'utf8'));
|
|
3211
|
+
const hookText = JSON.stringify(hooks);
|
|
3212
|
+
assert.match(hookText, /session-start\.sh/);
|
|
3213
|
+
assert.match(hookText, /SessionStart/);
|
|
3214
|
+
assert.match(hookText, /deepen_first_prompt\.py/);
|
|
3215
|
+
assert.match(hookText, /UserPromptSubmit/);
|
|
3216
|
+
const sheet = readFileSync(join(sandbox.homeDirectory, '.codex', 'deepstack-models.md'), 'utf8');
|
|
3217
|
+
assert.match(sheet, /^session hook: on$/m);
|
|
3218
|
+
});
|
|
3219
|
+
|
|
3158
3220
|
test('a repeat install preserves Codex pstack configuration', t => {
|
|
3159
3221
|
const sandbox = pstackPluginSandbox(t);
|
|
3160
3222
|
const codexHome = join(sandbox.homeDirectory, '.codex');
|
|
3161
3223
|
runPstackInstaller(sandbox.homeDirectory, [], sandbox.environment);
|
|
3162
|
-
writeFileSync(
|
|
3224
|
+
writeFileSync(
|
|
3225
|
+
join(codexHome, 'AGENTS.md'),
|
|
3226
|
+
`${SKILL_LOAD_BLOCK_START}\n${STALE_SKILL_LOAD_SENTENCE}\n${SKILL_LOAD_BLOCK_END}\nCustom Codex guidance\n`,
|
|
3227
|
+
);
|
|
3163
3228
|
writeFileSync(join(codexHome, 'pstack-models.md'), 'session hook: off\n');
|
|
3164
3229
|
|
|
3165
3230
|
runPstackInstaller(sandbox.homeDirectory, [], sandbox.environment);
|
|
3166
3231
|
|
|
3167
3232
|
const codexGuidance = readFileSync(join(codexHome, 'AGENTS.md'), 'utf8');
|
|
3168
|
-
assert.ok(codexGuidance.startsWith(
|
|
3233
|
+
assert.ok(codexGuidance.startsWith('Custom Codex guidance\n'));
|
|
3234
|
+
assertOmitsSkillLoadSentence(codexGuidance);
|
|
3169
3235
|
assert.ok(codexGuidance.includes(QUESTION_PRESENTATION_BLOCK_START));
|
|
3236
|
+
assert.ok(codexGuidance.includes(DEEPEN_GUIDANCE_BLOCK_START));
|
|
3170
3237
|
assert.equal(readFileSync(join(codexHome, 'pstack-models.md'), 'utf8'), 'session hook: off\n');
|
|
3171
3238
|
});
|
|
3172
3239
|
|
|
@@ -3185,7 +3252,7 @@ test('a Codex guidance link to the retired Claude copy becomes a file Codex can
|
|
|
3185
3252
|
);
|
|
3186
3253
|
assert.equal(lstatSync(codexAgentsPath).isSymbolicLink(), false);
|
|
3187
3254
|
const codexGuidance = readFileSync(codexAgentsPath, 'utf8');
|
|
3188
|
-
|
|
3255
|
+
assertOmitsSkillLoadSentence(codexGuidance);
|
|
3189
3256
|
assert.ok(codexGuidance.includes(packageGuidance));
|
|
3190
3257
|
});
|
|
3191
3258
|
|
|
@@ -3248,8 +3315,9 @@ test('a fresh full install writes the package guidance into Codex AGENTS.md', t
|
|
|
3248
3315
|
|
|
3249
3316
|
const codexGuidance = readFileSync(join(sandbox.homeDirectory, '.codex', 'AGENTS.md'), 'utf8');
|
|
3250
3317
|
assertHoldsPackageGuidance(codexGuidance);
|
|
3251
|
-
|
|
3318
|
+
assertOmitsSkillLoadSentence(codexGuidance);
|
|
3252
3319
|
assert.ok(codexGuidance.includes(QUESTION_PRESENTATION_BLOCK_START));
|
|
3320
|
+
assert.ok(codexGuidance.includes(DEEPEN_GUIDANCE_BLOCK_START));
|
|
3253
3321
|
});
|
|
3254
3322
|
|
|
3255
3323
|
test('--no-pstack writes package and question guidance without the skill-load block', t => {
|
|
@@ -3329,9 +3397,10 @@ test('a pstack install after a --no-pstack install seeds the Codex model sheet',
|
|
|
3329
3397
|
assert.match(readFileSync(join(codexHome, 'pstack-models.md'), 'utf8'), /^session hook: on$/m);
|
|
3330
3398
|
const codexGuidance = readFileSync(join(codexHome, 'AGENTS.md'), 'utf8');
|
|
3331
3399
|
assert.match(codexGuidance, /^feature, refactoring: gpt-6-sol$/m);
|
|
3332
|
-
|
|
3400
|
+
assertOmitsSkillLoadSentence(codexGuidance);
|
|
3333
3401
|
assertHoldsPackageGuidance(codexGuidance);
|
|
3334
3402
|
assert.ok(codexGuidance.includes(QUESTION_PRESENTATION_BLOCK_START));
|
|
3403
|
+
assert.ok(codexGuidance.includes(DEEPEN_GUIDANCE_BLOCK_START));
|
|
3335
3404
|
});
|
|
3336
3405
|
|
|
3337
3406
|
const USAGE_WRAPUP_CLAUDE_COMMANDS = Object.freeze([
|
|
@@ -3408,7 +3477,7 @@ test('the help output names the usage-wrapup opt-out beside the pstack one', ()
|
|
|
3408
3477
|
});
|
|
3409
3478
|
|
|
3410
3479
|
assert.equal(helpRun.status, 0, helpRun.stderr);
|
|
3411
|
-
assert.match(helpRun.stdout, /--no-pstack .*\n.*--no-usage-wrapup .*CDE_INSTALL_USAGE_WRAPUP=0/);
|
|
3480
|
+
assert.match(helpRun.stdout, /--no-pstack .*\n.*--no-deepstack .*CDE_INSTALL_DEEPSTACK=0.*\n.*--no-usage-wrapup .*CDE_INSTALL_USAGE_WRAPUP=0/);
|
|
3412
3481
|
assert.match(helpRun.stdout, /--no-deepen-first-prompt .*CDE_INSTALL_DEEPEN_FIRST_PROMPT=0/);
|
|
3413
3482
|
});
|
|
3414
3483
|
|
|
@@ -88,6 +88,7 @@ test('capture and restore recover settings, manifest, files, and hooksPath', ()
|
|
|
88
88
|
CLAUDE_CONFIG_DIR: undefined,
|
|
89
89
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
90
90
|
CDE_INSTALL_PSTACK: '0',
|
|
91
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
91
92
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
92
93
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
93
94
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -154,6 +155,7 @@ test('capture and restore recover an additional host settings file', () => {
|
|
|
154
155
|
CLAUDE_CONFIG_DIR: undefined,
|
|
155
156
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
156
157
|
CDE_INSTALL_PSTACK: '0',
|
|
158
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
157
159
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
158
160
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
159
161
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -193,6 +195,7 @@ test('runWithInstallTransaction restores prior state on injected fault', () => {
|
|
|
193
195
|
CLAUDE_CONFIG_DIR: undefined,
|
|
194
196
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
195
197
|
CDE_INSTALL_PSTACK: '0',
|
|
198
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
196
199
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
197
200
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
198
201
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -251,6 +254,7 @@ test('runWithInstallTransaction commits and discards journal on success', () =>
|
|
|
251
254
|
CLAUDE_CONFIG_DIR: undefined,
|
|
252
255
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
253
256
|
CDE_INSTALL_PSTACK: '0',
|
|
257
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
254
258
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
255
259
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
256
260
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -298,6 +302,7 @@ function runInstaller(homeDirectory, extraArguments, options = {}) {
|
|
|
298
302
|
CLAUDE_CONFIG_DIR: undefined,
|
|
299
303
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
300
304
|
CDE_INSTALL_PSTACK: '0',
|
|
305
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
301
306
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
302
307
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
303
308
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -335,6 +340,7 @@ test('a later install fault removes newly seeded Codex pstack files', () => {
|
|
|
335
340
|
faultPhase: FAULT_PHASES.AFTER_MANIFEST_WRITE,
|
|
336
341
|
environment: {
|
|
337
342
|
CDE_INSTALL_PSTACK: '1',
|
|
343
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
338
344
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
339
345
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
340
346
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -482,6 +488,7 @@ test('installer fault after_git_config restores prior core.hooksPath', () => {
|
|
|
482
488
|
CLAUDE_CONFIG_DIR: undefined,
|
|
483
489
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
484
490
|
CDE_INSTALL_PSTACK: '0',
|
|
491
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
485
492
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
486
493
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
487
494
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -503,6 +510,7 @@ test('installer fault after_git_config restores prior core.hooksPath', () => {
|
|
|
503
510
|
CLAUDE_CONFIG_DIR: undefined,
|
|
504
511
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
505
512
|
CDE_INSTALL_PSTACK: '0',
|
|
513
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
506
514
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
507
515
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
508
516
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -74,6 +74,7 @@ function runInstaller(homeDirectory, extraArguments, options = {}) {
|
|
|
74
74
|
CLAUDE_CONFIG_DIR: undefined,
|
|
75
75
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
76
76
|
CDE_INSTALL_PSTACK: '0',
|
|
77
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
77
78
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
78
79
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
79
80
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -312,6 +313,7 @@ test('uninstall fault after_git_config restores prior core.hooksPath', () => {
|
|
|
312
313
|
CLAUDE_CONFIG_DIR: undefined,
|
|
313
314
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
314
315
|
CDE_INSTALL_PSTACK: '0',
|
|
316
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
315
317
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
316
318
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
317
319
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -25,6 +25,7 @@ function installerEnvironment(homeDirectory) {
|
|
|
25
25
|
CLAUDE_CONFIG_DIR: undefined,
|
|
26
26
|
LLM_SETTINGS_PROFILES_ROOT: undefined,
|
|
27
27
|
CDE_INSTALL_PSTACK: '0',
|
|
28
|
+
CDE_INSTALL_DEEPSTACK: '0',
|
|
28
29
|
CDE_INSTALL_USAGE_WRAPUP: '0',
|
|
29
30
|
CDE_INSTALL_SUBAGENT_MODELS: '0',
|
|
30
31
|
CDE_INSTALL_DEEPEN_FIRST_PROMPT: '0',
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# DeepStack install
|
|
2
|
+
|
|
3
|
+
The plugin lives in `jl-cmd-projects/DeepStack`. `npx claude-dev-env` installs plugin id `deepstack@DeepStack` for Claude Code and Codex, and copies it to `~/.cursor/plugins/deepstack` with the SessionStart hook and the first-task gate.
|
|
4
|
+
|
|
5
|
+
The entry skill in that repository names these triggers:
|
|
6
|
+
|
|
7
|
+
- DeepStack intake
|
|
8
|
+
- DeepStack search leaf
|
|
9
|
+
- DeepStack reproducible-check leaf
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Back to the [rules index](../../rules/index.md).
|
|
2
|
+
|
|
3
|
+
# DeepStack wording
|
|
4
|
+
|
|
5
|
+
## In brief
|
|
6
|
+
|
|
7
|
+
A deepened task uses the three DeepStack labels and puts `CDE_DEEPEN:v1` on line 1. The gate in `hooks/session/deepen_first_prompt.py` is the check. This guide cites that gate.
|
|
8
|
+
|
|
9
|
+
**When this applies:** Writing a deepened task, a worker prompt, or a sentence that names the three DeepStack lines.
|
|
10
|
+
|
|
11
|
+
## Labels
|
|
12
|
+
|
|
13
|
+
- `SCOPE (role):` names the standing job in one sentence.
|
|
14
|
+
- `EXAMPLES (illustration only):` lists each example, or `none`.
|
|
15
|
+
- `ZOOM-IN BLOCKER:` names why the standing job cannot proceed, or `none`.
|
|
16
|
+
|
|
17
|
+
Say "the user" in public text.
|
|
18
|
+
|
|
19
|
+
## Where it is enforced
|
|
20
|
+
|
|
21
|
+
| Surface | What runs |
|
|
22
|
+
|---|---|
|
|
23
|
+
| A first-task rewrite | `hooks/session/deepen_first_prompt.py` |
|
package/package.json
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- "**/*.md"
|
|
4
|
+
- "**/commands/**"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# DeepStack wording
|
|
8
|
+
|
|
9
|
+
**When:** Writing a deepened task, a worker prompt, or a line that names the three DeepStack lines.
|
|
10
|
+
|
|
11
|
+
Use these labels: `SCOPE (role):`, `EXAMPLES (illustration only):`, and `ZOOM-IN BLOCKER:`. Put `CDE_DEEPEN:v1` on line 1. Say "the user".
|
|
12
|
+
|
|
13
|
+
**Enforcement:** `hooks/session/deepen_first_prompt.py` is the gate. This rule cites that gate.
|
|
14
|
+
|
|
15
|
+
**Full text:** [guide](../docs/rule-guides/deepstack-wording.md). Read it when you write the three lines.
|