greprag 5.73.11 → 5.73.13
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/dist/codex-pretooluse.d.ts +5 -0
- package/dist/codex-pretooluse.js +131 -0
- package/dist/codex-pretooluse.js.map +1 -0
- package/dist/commands/agents.d.ts +1 -0
- package/dist/commands/agents.js +307 -0
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/codex-coordinate.d.ts +47 -0
- package/dist/commands/codex-coordinate.js +259 -0
- package/dist/commands/codex-coordinate.js.map +1 -0
- package/dist/commands/ship-through-gate.d.ts +16 -0
- package/dist/commands/ship-through-gate.js +43 -0
- package/dist/commands/ship-through-gate.js.map +1 -0
- package/dist/commands/skill.js +315 -7
- package/dist/commands/skill.js.map +1 -1
- package/dist/native-skill-adoption.d.ts +45 -0
- package/dist/native-skill-adoption.js +240 -0
- package/dist/native-skill-adoption.js.map +1 -0
- package/dist/skill-mirror-client.d.ts +25 -0
- package/dist/skill-mirror-client.js +64 -1
- package/dist/skill-mirror-client.js.map +1 -1
- package/package.json +1 -1
- package/skill/templates/codex-chip-spawn.md +13 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Adopt unmanaged native skills into the GrepRAG skill mirror. */
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.planNativeSkillAdoption = planNativeSkillAdoption;
|
|
38
|
+
exports.installAdoptedNativeSkill = installAdoptedNativeSkill;
|
|
39
|
+
const fs = __importStar(require("node:fs"));
|
|
40
|
+
const os = __importStar(require("node:os"));
|
|
41
|
+
const path = __importStar(require("node:path"));
|
|
42
|
+
const native_skill_mirror_1 = require("./native-skill-mirror");
|
|
43
|
+
const skill_mirror_files_1 = require("./skill-mirror-files");
|
|
44
|
+
const STATE_FILE = '.greprag-mirror.json';
|
|
45
|
+
const NATIVE_SKILL_NAME_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
46
|
+
function emptyState() {
|
|
47
|
+
return { version: 1, skills: {} };
|
|
48
|
+
}
|
|
49
|
+
function readState(root) {
|
|
50
|
+
try {
|
|
51
|
+
const parsed = JSON.parse(fs.readFileSync(path.join(root, STATE_FILE), 'utf8'));
|
|
52
|
+
if (parsed?.version === 1 && parsed.skills && typeof parsed.skills === 'object')
|
|
53
|
+
return parsed;
|
|
54
|
+
}
|
|
55
|
+
catch { /* first run or corrupt state: existing directories remain unmanaged */ }
|
|
56
|
+
return emptyState();
|
|
57
|
+
}
|
|
58
|
+
function writeState(root, state) {
|
|
59
|
+
fs.mkdirSync(root, { recursive: true });
|
|
60
|
+
fs.writeFileSync(path.join(root, STATE_FILE), JSON.stringify(state, null, 2) + '\n', 'utf8');
|
|
61
|
+
}
|
|
62
|
+
function targetPath(root, skillName) {
|
|
63
|
+
const target = path.resolve(root, skillName);
|
|
64
|
+
const prefix = path.resolve(root) + path.sep;
|
|
65
|
+
if (!target.startsWith(prefix))
|
|
66
|
+
throw new Error('skill target escapes native root');
|
|
67
|
+
return target;
|
|
68
|
+
}
|
|
69
|
+
function filePath(target, relative) {
|
|
70
|
+
const resolved = path.resolve(target, ...relative.split('/'));
|
|
71
|
+
const prefix = path.resolve(target) + path.sep;
|
|
72
|
+
if (!resolved.startsWith(prefix))
|
|
73
|
+
throw new Error('skill file escapes target directory');
|
|
74
|
+
return resolved;
|
|
75
|
+
}
|
|
76
|
+
function readManagedFiles(target, managed) {
|
|
77
|
+
try {
|
|
78
|
+
return managed.files.map(relative => ({
|
|
79
|
+
path: relative,
|
|
80
|
+
content: fs.readFileSync(filePath(target, relative), 'utf8'),
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function listSkillDirs(root) {
|
|
88
|
+
try {
|
|
89
|
+
return fs.readdirSync(root, { withFileTypes: true })
|
|
90
|
+
.filter(entry => entry.isDirectory() && fs.existsSync(path.join(root, entry.name, 'SKILL.md')))
|
|
91
|
+
.map(entry => entry.name)
|
|
92
|
+
.sort((a, b) => a.localeCompare(b));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function countSkillFiles(root) {
|
|
99
|
+
let count = 0;
|
|
100
|
+
const walk = (dir, depth) => {
|
|
101
|
+
if (depth > 7 || count >= 1500)
|
|
102
|
+
return;
|
|
103
|
+
let entries;
|
|
104
|
+
try {
|
|
105
|
+
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
for (const entry of entries) {
|
|
111
|
+
if (count >= 1500)
|
|
112
|
+
return;
|
|
113
|
+
const full = path.join(dir, entry.name);
|
|
114
|
+
if (entry.isDirectory())
|
|
115
|
+
walk(full, depth + 1);
|
|
116
|
+
else if (entry.isFile() && entry.name.toLowerCase() === 'skill.md')
|
|
117
|
+
count++;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
walk(root, 0);
|
|
121
|
+
return count;
|
|
122
|
+
}
|
|
123
|
+
function adoptionRoots(params) {
|
|
124
|
+
const roots = [{ root: (0, native_skill_mirror_1.nativeSkillRoot)(params.platform, params.homeDir), scope: 'global' }];
|
|
125
|
+
if (params.projectDir && params.projectId) {
|
|
126
|
+
roots.push({
|
|
127
|
+
root: (0, native_skill_mirror_1.nativeProjectSkillRoot)(params.platform, params.projectDir),
|
|
128
|
+
scope: 'project',
|
|
129
|
+
projectId: params.projectId,
|
|
130
|
+
projectName: params.projectName,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return roots;
|
|
134
|
+
}
|
|
135
|
+
function ignoredDiscoveryRoots(params) {
|
|
136
|
+
const roots = [];
|
|
137
|
+
if (params.platform === 'codex') {
|
|
138
|
+
roots.push([path.join(params.homeDir, '.agents', 'skills'), 'discovered by Codex but not writer-owned'], [path.join(params.homeDir, '.codex', 'plugins', 'cache'), 'plugin cache is read-only']);
|
|
139
|
+
if (params.projectDir)
|
|
140
|
+
roots.push([path.join(params.projectDir, '.codex', 'skills'), 'discovered by Codex but not writer-owned']);
|
|
141
|
+
}
|
|
142
|
+
const owned = new Set(adoptionRoots({
|
|
143
|
+
platform: params.platform,
|
|
144
|
+
homeDir: params.homeDir,
|
|
145
|
+
projectDir: params.projectDir,
|
|
146
|
+
projectId: '00000000-0000-4000-8000-000000000000',
|
|
147
|
+
}).map(root => path.resolve(root.root).toLowerCase()));
|
|
148
|
+
return roots
|
|
149
|
+
.filter(([root]) => !owned.has(path.resolve(root).toLowerCase()))
|
|
150
|
+
.map(([root, reason]) => ({ root, reason, skillCount: countSkillFiles(root) }))
|
|
151
|
+
.filter(root => root.skillCount > 0);
|
|
152
|
+
}
|
|
153
|
+
function planNativeSkillAdoption(params) {
|
|
154
|
+
const homeDir = params.homeDir || os.homedir();
|
|
155
|
+
const projectDir = params.projectDir ? path.resolve(params.projectDir) : undefined;
|
|
156
|
+
const plan = {
|
|
157
|
+
candidates: [],
|
|
158
|
+
managed: [],
|
|
159
|
+
blocked: [],
|
|
160
|
+
skipped: [],
|
|
161
|
+
ignoredRoots: ignoredDiscoveryRoots({ platform: params.platform, homeDir, projectDir }),
|
|
162
|
+
};
|
|
163
|
+
if (!(0, native_skill_mirror_1.nativeSkillMirrorEnabled)(params.platform))
|
|
164
|
+
return plan;
|
|
165
|
+
for (const root of adoptionRoots({
|
|
166
|
+
platform: params.platform,
|
|
167
|
+
homeDir,
|
|
168
|
+
projectDir,
|
|
169
|
+
projectId: params.projectId,
|
|
170
|
+
projectName: params.projectName,
|
|
171
|
+
})) {
|
|
172
|
+
const state = readState(root.root);
|
|
173
|
+
for (const skillName of listSkillDirs(root.root)) {
|
|
174
|
+
const target = targetPath(root.root, skillName);
|
|
175
|
+
const managed = state.skills[skillName];
|
|
176
|
+
if (managed) {
|
|
177
|
+
const currentFiles = readManagedFiles(target, managed);
|
|
178
|
+
const currentHash = currentFiles ? (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) : '';
|
|
179
|
+
const entry = { ...root, skillName, reason: currentHash === managed.hash ? 'managed/current' : 'managed/diverged' };
|
|
180
|
+
if (currentHash === managed.hash)
|
|
181
|
+
plan.managed.push(entry);
|
|
182
|
+
else
|
|
183
|
+
plan.blocked.push(entry);
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
if (!NATIVE_SKILL_NAME_RE.test(skillName)) {
|
|
187
|
+
plan.skipped.push({ ...root, skillName, reason: 'platform-invalid name' });
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const files = params.collectFiles(target);
|
|
191
|
+
if (!files) {
|
|
192
|
+
plan.skipped.push({ ...root, skillName, reason: 'invalid or oversized markdown payload' });
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
plan.candidates.push({ ...root, skillName, files, sourceHash: (0, skill_mirror_files_1.computeSkillFileHash)(files) });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const globalNames = new Set([
|
|
199
|
+
...plan.candidates.filter(candidate => candidate.scope === 'global').map(candidate => candidate.skillName.toLowerCase()),
|
|
200
|
+
...plan.managed.filter(managed => managed.scope === 'global').map(managed => managed.skillName.toLowerCase()),
|
|
201
|
+
]);
|
|
202
|
+
for (let i = plan.candidates.length - 1; i >= 0; i--) {
|
|
203
|
+
const candidate = plan.candidates[i];
|
|
204
|
+
if (candidate.scope !== 'project' || !globalNames.has(candidate.skillName.toLowerCase()))
|
|
205
|
+
continue;
|
|
206
|
+
plan.blocked.push({ ...candidate, reason: 'project/global collision requires explicit replaces metadata' });
|
|
207
|
+
plan.candidates.splice(i, 1);
|
|
208
|
+
}
|
|
209
|
+
return plan;
|
|
210
|
+
}
|
|
211
|
+
function installAdoptedNativeSkill(params) {
|
|
212
|
+
if (!(0, native_skill_mirror_1.nativeSkillMirrorEnabled)(params.platform))
|
|
213
|
+
return 'skipped';
|
|
214
|
+
if (!NATIVE_SKILL_NAME_RE.test(params.skill.skillName))
|
|
215
|
+
return 'skipped';
|
|
216
|
+
const target = targetPath(params.root, params.skill.skillName);
|
|
217
|
+
const state = readState(params.root);
|
|
218
|
+
if (state.skills[params.skill.skillName])
|
|
219
|
+
return 'blocked';
|
|
220
|
+
const currentFiles = params.collectFiles(target);
|
|
221
|
+
if (!currentFiles || (0, skill_mirror_files_1.computeSkillFileHash)(currentFiles) !== params.expectedSourceHash)
|
|
222
|
+
return 'blocked';
|
|
223
|
+
const adapterFiles = (0, native_skill_mirror_1.buildNativeSkillAdapter)(params.platform, params.skill);
|
|
224
|
+
if (!adapterFiles)
|
|
225
|
+
return 'skipped';
|
|
226
|
+
fs.rmSync(target, { recursive: true, force: true });
|
|
227
|
+
fs.mkdirSync(target, { recursive: true });
|
|
228
|
+
for (const file of adapterFiles) {
|
|
229
|
+
const destination = filePath(target, file.path);
|
|
230
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true });
|
|
231
|
+
fs.writeFileSync(destination, file.content, 'utf8');
|
|
232
|
+
}
|
|
233
|
+
state.skills[params.skill.skillName] = {
|
|
234
|
+
hash: (0, skill_mirror_files_1.computeSkillFileHash)(adapterFiles),
|
|
235
|
+
files: adapterFiles.map(file => file.path).sort(),
|
|
236
|
+
};
|
|
237
|
+
writeState(params.root, state);
|
|
238
|
+
return 'installed';
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=native-skill-adoption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-skill-adoption.js","sourceRoot":"","sources":["../src/native-skill-adoption.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* last-mirrored hash per skill so an unchanged skill costs one hash pass and
|
|
10
10
|
* ZERO network. Markdown only, v1 — SKILL.md + docs/**\/*.md; script-bearing
|
|
11
11
|
* assets stay file-bound (see the spec's named gaps). */
|
|
12
|
+
import { type NativeSkillAdoptionPlan } from './native-skill-adoption';
|
|
13
|
+
import { type NativeSkillPlatform } from './native-skill-mirror';
|
|
12
14
|
import { type SkillFile } from './skill-mirror-files';
|
|
13
15
|
export type { SkillFile } from './skill-mirror-files';
|
|
14
16
|
/** Collect the skill's markdown: SKILL.md (required) + docs/**\/*.md, capped.
|
|
@@ -16,6 +18,29 @@ export type { SkillFile } from './skill-mirror-files';
|
|
|
16
18
|
export declare function collectSkillFiles(skillDir: string): SkillFile[] | null;
|
|
17
19
|
/** Deterministic content hash over path+content pairs. PURE — unit-tested. */
|
|
18
20
|
export declare function computeMirrorHash(files: SkillFile[]): string;
|
|
21
|
+
export interface NativeSkillAdoptionSyncResult {
|
|
22
|
+
plan: NativeSkillAdoptionPlan;
|
|
23
|
+
adopted: number;
|
|
24
|
+
blocked: number;
|
|
25
|
+
skipped: number;
|
|
26
|
+
}
|
|
27
|
+
export declare function dryRunNativeSkillAdoption(params: {
|
|
28
|
+
platform: NativeSkillPlatform;
|
|
29
|
+
homeDir?: string;
|
|
30
|
+
projectDir?: string;
|
|
31
|
+
projectId?: string;
|
|
32
|
+
projectName?: string;
|
|
33
|
+
}): NativeSkillAdoptionPlan;
|
|
34
|
+
export declare function syncNativeSkillAdoptions(params: {
|
|
35
|
+
platform: NativeSkillPlatform;
|
|
36
|
+
apiUrl: string;
|
|
37
|
+
apiKey: string;
|
|
38
|
+
homeDir?: string;
|
|
39
|
+
projectDir?: string;
|
|
40
|
+
projectId?: string;
|
|
41
|
+
projectName?: string;
|
|
42
|
+
dryRun?: boolean;
|
|
43
|
+
}): Promise<NativeSkillAdoptionSyncResult>;
|
|
19
44
|
interface MirrorState {
|
|
20
45
|
skills: Record<string, {
|
|
21
46
|
hash: string;
|
|
@@ -46,12 +46,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
46
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
47
|
exports.collectSkillFiles = collectSkillFiles;
|
|
48
48
|
exports.computeMirrorHash = computeMirrorHash;
|
|
49
|
+
exports.dryRunNativeSkillAdoption = dryRunNativeSkillAdoption;
|
|
50
|
+
exports.syncNativeSkillAdoptions = syncNativeSkillAdoptions;
|
|
49
51
|
exports.readMirrorState = readMirrorState;
|
|
50
52
|
exports.writeMirrorState = writeMirrorState;
|
|
51
53
|
exports.maybeMirrorSkill = maybeMirrorSkill;
|
|
52
54
|
const fs = __importStar(require("fs"));
|
|
53
55
|
const path = __importStar(require("path"));
|
|
54
56
|
const skill_landing_1 = require("./skill-landing");
|
|
57
|
+
const native_skill_adoption_1 = require("./native-skill-adoption");
|
|
55
58
|
const native_skill_mirror_1 = require("./native-skill-mirror");
|
|
56
59
|
const skill_mirror_files_1 = require("./skill-mirror-files");
|
|
57
60
|
/** Mirrors the server's caps (SKILL_MIRROR_* in @greprag/core — the CLI is
|
|
@@ -113,6 +116,61 @@ function collectSkillFiles(skillDir) {
|
|
|
113
116
|
function computeMirrorHash(files) {
|
|
114
117
|
return (0, skill_mirror_files_1.computeSkillFileHash)(files);
|
|
115
118
|
}
|
|
119
|
+
function dryRunNativeSkillAdoption(params) {
|
|
120
|
+
return (0, native_skill_adoption_1.planNativeSkillAdoption)({ ...params, collectFiles: collectSkillFiles });
|
|
121
|
+
}
|
|
122
|
+
async function syncNativeSkillAdoptions(params) {
|
|
123
|
+
const plan = dryRunNativeSkillAdoption(params);
|
|
124
|
+
const result = {
|
|
125
|
+
plan,
|
|
126
|
+
adopted: 0,
|
|
127
|
+
blocked: plan.blocked.length,
|
|
128
|
+
skipped: plan.skipped.length,
|
|
129
|
+
};
|
|
130
|
+
if (params.dryRun)
|
|
131
|
+
return result;
|
|
132
|
+
for (const candidate of plan.candidates) {
|
|
133
|
+
const body = {
|
|
134
|
+
files: candidate.files,
|
|
135
|
+
contentHash: candidate.sourceHash,
|
|
136
|
+
scope: candidate.scope,
|
|
137
|
+
projectId: candidate.projectId,
|
|
138
|
+
projectName: candidate.projectName,
|
|
139
|
+
};
|
|
140
|
+
const response = await fetch(`${params.apiUrl}/v1/skillmirror/${encodeURIComponent(candidate.skillName)}`, {
|
|
141
|
+
method: 'POST',
|
|
142
|
+
headers: { 'Authorization': `Bearer ${params.apiKey}`, 'Content-Type': 'application/json' },
|
|
143
|
+
body: JSON.stringify(body),
|
|
144
|
+
});
|
|
145
|
+
if (!response.ok) {
|
|
146
|
+
result.blocked++;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const installed = (0, native_skill_adoption_1.installAdoptedNativeSkill)({
|
|
150
|
+
platform: params.platform,
|
|
151
|
+
root: candidate.root,
|
|
152
|
+
expectedSourceHash: candidate.sourceHash,
|
|
153
|
+
collectFiles: collectSkillFiles,
|
|
154
|
+
skill: {
|
|
155
|
+
skillName: candidate.skillName,
|
|
156
|
+
skillId: candidate.scope === 'project'
|
|
157
|
+
? `project:${candidate.projectId}:${candidate.skillName}`
|
|
158
|
+
: `global:${candidate.skillName}`,
|
|
159
|
+
scope: candidate.scope,
|
|
160
|
+
projectId: candidate.projectId,
|
|
161
|
+
projectName: candidate.projectName,
|
|
162
|
+
files: candidate.files,
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
if (installed === 'installed')
|
|
166
|
+
result.adopted++;
|
|
167
|
+
else if (installed === 'blocked')
|
|
168
|
+
result.blocked++;
|
|
169
|
+
else
|
|
170
|
+
result.skipped++;
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
116
174
|
function materializeLocally(skillName, files, cwd) {
|
|
117
175
|
for (const platform of native_skill_mirror_1.NATIVE_SKILL_ADAPTER_PLATFORMS) {
|
|
118
176
|
try {
|
|
@@ -169,7 +227,12 @@ async function maybeMirrorSkill(params) {
|
|
|
169
227
|
const res = await fetch(`${params.apiUrl}/v1/skillmirror/${encodeURIComponent(params.skill)}`, {
|
|
170
228
|
method: 'POST',
|
|
171
229
|
headers: { 'Authorization': `Bearer ${params.apiKey}`, 'Content-Type': 'application/json' },
|
|
172
|
-
body: JSON.stringify({
|
|
230
|
+
body: JSON.stringify({
|
|
231
|
+
files,
|
|
232
|
+
contentHash: hash,
|
|
233
|
+
scope: 'global',
|
|
234
|
+
expectedHash: state.skills[params.skill]?.hash,
|
|
235
|
+
}),
|
|
173
236
|
});
|
|
174
237
|
if (!res.ok)
|
|
175
238
|
return 'skipped';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-mirror-client.js","sourceRoot":"","sources":["../src/skill-mirror-client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;0DAU0D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"skill-mirror-client.js","sourceRoot":"","sources":["../src/skill-mirror-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -39,6 +39,19 @@ A dedicated `LEAD: <Mission>` creates a native top-level goal with
|
|
|
39
39
|
`create_goal`, verifies it with `get_goal`, then fans out children. No leases,
|
|
40
40
|
read-only mode, GrepRAG goal gates, nonce ACK, or delivery-proof ceremony.
|
|
41
41
|
|
|
42
|
+
## Project environment preflight
|
|
43
|
+
|
|
44
|
+
Before any `create_thread` call with `environment: { "type": "worktree" }`,
|
|
45
|
+
check the saved project/main repo for `.codex/environments/environment.toml`.
|
|
46
|
+
|
|
47
|
+
- Present: use the project worktree target.
|
|
48
|
+
- Missing for `Chip A/B/C`, `LEAD`, `FIX`, or any writable task: stop and set
|
|
49
|
+
up the repo first with the `codex-environments` skill. Do not fall back to
|
|
50
|
+
local/projectless execution; worktree isolation is the contract.
|
|
51
|
+
- Missing for `PLANNER` or `ADVISOR` consultation: local/projectless fallback
|
|
52
|
+
is allowed only when the prompt explicitly forbids writes and no child
|
|
53
|
+
worktree dispatch happens until the repo environment exists.
|
|
54
|
+
|
|
42
55
|
## Dispatch
|
|
43
56
|
|
|
44
57
|
Call `codex_app__create_thread` as a standalone tool call. Never batch it with
|