greprag 5.60.2 → 5.60.4
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-chip-hooks.js +4 -10
- package/dist/codex-chip-hooks.js.map +1 -1
- package/dist/commands/codex-chip/command.js +6 -20
- package/dist/commands/codex-chip/command.js.map +1 -1
- package/dist/commands/codex-chip/git.d.ts +0 -1
- package/dist/commands/codex-chip/git.js +0 -2
- package/dist/commands/codex-chip/git.js.map +1 -1
- package/dist/commands/codex-chip/goals.d.ts +9 -0
- package/dist/commands/codex-chip/goals.js +97 -7
- package/dist/commands/codex-chip/goals.js.map +1 -1
- package/dist/commands/codex-chip/help.d.ts +1 -1
- package/dist/commands/codex-chip/help.js +6 -5
- package/dist/commands/codex-chip/help.js.map +1 -1
- package/dist/commands/codex-chip/model.d.ts +2 -4
- package/dist/commands/codex-chip/model.js +1 -1
- package/dist/commands/codex-chip/model.js.map +1 -1
- package/dist/commands/codex-chip/native.js +2 -2
- package/dist/commands/codex-chip/native.js.map +1 -1
- package/dist/commands/codex-chip/prompt.js +5 -7
- package/dist/commands/codex-chip/prompt.js.map +1 -1
- package/dist/commands/codex-chip/selection.d.ts +1 -1
- package/dist/commands/codex-chip/selection.js +1 -4
- package/dist/commands/codex-chip/selection.js.map +1 -1
- package/dist/commands/codex-chip/worker.js +33 -105
- package/dist/commands/codex-chip/worker.js.map +1 -1
- package/dist/commands/opencode-chip-client.d.ts +8 -0
- package/dist/commands/opencode-chip-client.js +45 -0
- package/dist/commands/opencode-chip-client.js.map +1 -0
- package/dist/commands/opencode-chip-mission.d.ts +22 -0
- package/dist/commands/opencode-chip-mission.js +86 -0
- package/dist/commands/opencode-chip-mission.js.map +1 -0
- package/dist/commands/opencode-chip-store.d.ts +54 -0
- package/dist/commands/opencode-chip-store.js +141 -0
- package/dist/commands/opencode-chip-store.js.map +1 -0
- package/dist/commands/opencode-chip.d.ts +3 -0
- package/dist/commands/opencode-chip.js +471 -0
- package/dist/commands/opencode-chip.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skill/greprag/docs/codex-chip.md +10 -5
- package/skill/templates/chip-bootloader.md +28 -91
- package/skill/templates/chip-leader-opencode.md +80 -79
- package/skill/templates/codex-chip-spawn.md +6 -5
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode chip titles, mission body, flag helpers.
|
|
3
|
+
*/
|
|
4
|
+
import type { ChipRole } from './codex-chip/model';
|
|
5
|
+
export declare function flag(args: string[], name: string): string | undefined;
|
|
6
|
+
export declare function flags(args: string[], name: string): string[];
|
|
7
|
+
export declare function parseRole(args: string[]): ChipRole;
|
|
8
|
+
/** Workers always Chip A/B/… — never bare "Chip:". */
|
|
9
|
+
export declare function roleTitle(role: ChipRole, displayName: string, label?: string): string;
|
|
10
|
+
export declare function parseModel(spec: string): {
|
|
11
|
+
providerID: string;
|
|
12
|
+
modelID: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function slugify(value: string): string;
|
|
15
|
+
export declare function buildMission(input: {
|
|
16
|
+
title: string;
|
|
17
|
+
role: ChipRole;
|
|
18
|
+
task: string;
|
|
19
|
+
parentGreprag: string;
|
|
20
|
+
goalId: string;
|
|
21
|
+
covers: string[];
|
|
22
|
+
}): string;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flag = flag;
|
|
4
|
+
exports.flags = flags;
|
|
5
|
+
exports.parseRole = parseRole;
|
|
6
|
+
exports.roleTitle = roleTitle;
|
|
7
|
+
exports.parseModel = parseModel;
|
|
8
|
+
exports.slugify = slugify;
|
|
9
|
+
exports.buildMission = buildMission;
|
|
10
|
+
function flag(args, name) {
|
|
11
|
+
const i = args.indexOf(name);
|
|
12
|
+
return i >= 0 ? args[i + 1] : undefined;
|
|
13
|
+
}
|
|
14
|
+
function flags(args, name) {
|
|
15
|
+
const out = [];
|
|
16
|
+
for (let i = 0; i < args.length; i++)
|
|
17
|
+
if (args[i] === name && args[i + 1])
|
|
18
|
+
out.push(args[++i]);
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
function parseRole(args) {
|
|
22
|
+
const requested = flag(args, '--role');
|
|
23
|
+
if (requested && !['planner', 'leader', 'worker', 'advisor', 'mechanic'].includes(requested)) {
|
|
24
|
+
throw new Error('--role must be planner, leader, worker, advisor, or mechanic.');
|
|
25
|
+
}
|
|
26
|
+
return requested || 'worker';
|
|
27
|
+
}
|
|
28
|
+
/** Workers always Chip A/B/… — never bare "Chip:". */
|
|
29
|
+
function roleTitle(role, displayName, label) {
|
|
30
|
+
if (role === 'planner')
|
|
31
|
+
return `PLANNER: ${displayName}`;
|
|
32
|
+
if (role === 'leader')
|
|
33
|
+
return `LEAD: ${displayName}`;
|
|
34
|
+
if (role === 'advisor')
|
|
35
|
+
return `ADVISOR: ${displayName}`;
|
|
36
|
+
if (role === 'mechanic')
|
|
37
|
+
return `MECHANIC: ${displayName}`;
|
|
38
|
+
if (!label || !/^[A-Z]$/.test(label)) {
|
|
39
|
+
throw new Error('Worker titles require --label A|B|C… (solo chips use --label A → "Chip A: <purview>").');
|
|
40
|
+
}
|
|
41
|
+
return `Chip ${label}: ${displayName}`;
|
|
42
|
+
}
|
|
43
|
+
function parseModel(spec) {
|
|
44
|
+
const i = spec.indexOf('/');
|
|
45
|
+
if (i <= 0 || i === spec.length - 1) {
|
|
46
|
+
throw new Error('--model must be provider/model (e.g. deepseek/deepseek-chat). Required — OpenCode defaults can 401.');
|
|
47
|
+
}
|
|
48
|
+
return { providerID: spec.slice(0, i), modelID: spec.slice(i + 1) };
|
|
49
|
+
}
|
|
50
|
+
function slugify(value) {
|
|
51
|
+
return value
|
|
52
|
+
.toLowerCase()
|
|
53
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
54
|
+
.replace(/^-+|-+$/g, '')
|
|
55
|
+
.slice(0, 48) || 'chip';
|
|
56
|
+
}
|
|
57
|
+
function buildMission(input) {
|
|
58
|
+
const { title, role, task, parentGreprag, goalId, covers } = input;
|
|
59
|
+
return [
|
|
60
|
+
`# ${title}`,
|
|
61
|
+
'',
|
|
62
|
+
`You are a greprag OpenCode chip. Role: **${role.toUpperCase()}**.`,
|
|
63
|
+
`Mission goal: \`${goalId}\`. Covers: ${covers.map((c) => `\`${c}\``).join(', ')}.`,
|
|
64
|
+
'',
|
|
65
|
+
'## Block 1 — Setup (do this first)',
|
|
66
|
+
'1. Resolve your greprag session id: `greprag status` (8-hex).',
|
|
67
|
+
'2. Immediately ping the parent (mandatory — without it the parent assumes you never launched):',
|
|
68
|
+
'```bash',
|
|
69
|
+
`greprag send "IN-FLIGHT: ${title}" --to travis@greprag.com/${parentGreprag}`,
|
|
70
|
+
'```',
|
|
71
|
+
'3. Stay on an isolated branch for this purview (create `chip/<slug>` if missing).',
|
|
72
|
+
'4. At the start of each turn: `greprag inbox --peek`.',
|
|
73
|
+
'',
|
|
74
|
+
'## Task',
|
|
75
|
+
task,
|
|
76
|
+
'',
|
|
77
|
+
'## Block 2 — Report back (when done)',
|
|
78
|
+
'Send one of:',
|
|
79
|
+
'```bash',
|
|
80
|
+
`greprag send "DONE: <summary> | commit=<sha> | checks=<list>" --to travis@greprag.com/${parentGreprag}`,
|
|
81
|
+
`greprag send "BLOCKED: <reason>" --to travis@greprag.com/${parentGreprag}`,
|
|
82
|
+
'```',
|
|
83
|
+
'Do not end without DONE or BLOCKED. Parent greprag session: `' + parentGreprag + '`.',
|
|
84
|
+
].join('\n');
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=opencode-chip-mission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-chip-mission.js","sourceRoot":"","sources":["../../src/commands/opencode-chip-mission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ChipRole } from './codex-chip/model';
|
|
2
|
+
export type OpencodeChipState = 'prepared' | 'dispatched' | 'failed' | 'closed' | 'archived';
|
|
3
|
+
export interface OpencodeChipRecord {
|
|
4
|
+
version: 1;
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
title: string;
|
|
8
|
+
role: ChipRole;
|
|
9
|
+
label?: string;
|
|
10
|
+
goalId: string;
|
|
11
|
+
covers: string[];
|
|
12
|
+
task: string;
|
|
13
|
+
projectId: string;
|
|
14
|
+
directory: string;
|
|
15
|
+
parent: {
|
|
16
|
+
opencodeSessionId: string;
|
|
17
|
+
grepragSessionId: string;
|
|
18
|
+
};
|
|
19
|
+
child: {
|
|
20
|
+
opencodeSessionId: string;
|
|
21
|
+
grepragSessionId?: string;
|
|
22
|
+
};
|
|
23
|
+
model: {
|
|
24
|
+
providerID: string;
|
|
25
|
+
modelID: string;
|
|
26
|
+
};
|
|
27
|
+
state: OpencodeChipState;
|
|
28
|
+
multiChip: boolean;
|
|
29
|
+
/** Nested worker goal adopted by a LEAD (canonical for child dispatch). */
|
|
30
|
+
missionGoalId?: string;
|
|
31
|
+
createdAt: string;
|
|
32
|
+
dispatchedAt?: string;
|
|
33
|
+
closedAt?: string;
|
|
34
|
+
closeSummary?: string;
|
|
35
|
+
sessionDeleted?: boolean;
|
|
36
|
+
report?: {
|
|
37
|
+
summary: string;
|
|
38
|
+
evidence: Record<string, string>;
|
|
39
|
+
checks: string[];
|
|
40
|
+
at: string;
|
|
41
|
+
};
|
|
42
|
+
error?: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function grepragHome(): string;
|
|
45
|
+
export declare function storeRoot(): string;
|
|
46
|
+
export declare function recordPath(id: string): string;
|
|
47
|
+
export declare function writeRecord(record: OpencodeChipRecord): void;
|
|
48
|
+
export declare function readRecord(id: string): OpencodeChipRecord | null;
|
|
49
|
+
export declare function listRecords(): OpencodeChipRecord[];
|
|
50
|
+
export declare function activeRecords(projectId?: string): OpencodeChipRecord[];
|
|
51
|
+
export declare function findRecord(ref: string): OpencodeChipRecord | null;
|
|
52
|
+
export declare function assertNoActiveNamingConflicts(next: OpencodeChipRecord): void;
|
|
53
|
+
/** True when an active OpenCode LEAD is bound to parentGoalId (nested-goal gate). */
|
|
54
|
+
export declare function isActiveOpencodeLeadForGoal(parentGoalId: string, ownerSessionId: string): boolean;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.grepragHome = grepragHome;
|
|
37
|
+
exports.storeRoot = storeRoot;
|
|
38
|
+
exports.recordPath = recordPath;
|
|
39
|
+
exports.writeRecord = writeRecord;
|
|
40
|
+
exports.readRecord = readRecord;
|
|
41
|
+
exports.listRecords = listRecords;
|
|
42
|
+
exports.activeRecords = activeRecords;
|
|
43
|
+
exports.findRecord = findRecord;
|
|
44
|
+
exports.assertNoActiveNamingConflicts = assertNoActiveNamingConflicts;
|
|
45
|
+
exports.isActiveOpencodeLeadForGoal = isActiveOpencodeLeadForGoal;
|
|
46
|
+
/**
|
|
47
|
+
* OpenCode chip local records (~/.greprag/opencode-chips).
|
|
48
|
+
*/
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const os = __importStar(require("os"));
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
function grepragHome() {
|
|
53
|
+
return path.join(process.env.HOME || process.env.USERPROFILE || os.homedir(), '.greprag');
|
|
54
|
+
}
|
|
55
|
+
function storeRoot() {
|
|
56
|
+
return path.join(grepragHome(), 'opencode-chips');
|
|
57
|
+
}
|
|
58
|
+
function recordPath(id) {
|
|
59
|
+
return path.join(storeRoot(), `${id}.json`);
|
|
60
|
+
}
|
|
61
|
+
function writeRecord(record) {
|
|
62
|
+
fs.mkdirSync(storeRoot(), { recursive: true });
|
|
63
|
+
const file = recordPath(record.id);
|
|
64
|
+
const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
|
|
65
|
+
fs.writeFileSync(tmp, JSON.stringify(record, null, 2) + '\n', 'utf-8');
|
|
66
|
+
fs.renameSync(tmp, file);
|
|
67
|
+
}
|
|
68
|
+
function readRecord(id) {
|
|
69
|
+
try {
|
|
70
|
+
return JSON.parse(fs.readFileSync(recordPath(id), 'utf-8'));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function listRecords() {
|
|
77
|
+
try {
|
|
78
|
+
return fs
|
|
79
|
+
.readdirSync(storeRoot())
|
|
80
|
+
.filter((f) => f.endsWith('.json'))
|
|
81
|
+
.map((f) => readRecord(f.slice(0, -5)))
|
|
82
|
+
.filter((r) => Boolean(r));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function activeRecords(projectId) {
|
|
89
|
+
return listRecords().filter((r) => (r.state === 'prepared' || r.state === 'dispatched') &&
|
|
90
|
+
(!projectId || r.projectId === projectId));
|
|
91
|
+
}
|
|
92
|
+
function findRecord(ref) {
|
|
93
|
+
const exact = readRecord(ref);
|
|
94
|
+
if (exact)
|
|
95
|
+
return exact;
|
|
96
|
+
const matches = listRecords().filter((r) => r.id === ref ||
|
|
97
|
+
r.id.startsWith(ref) ||
|
|
98
|
+
r.child.opencodeSessionId === ref ||
|
|
99
|
+
r.child.opencodeSessionId.startsWith(ref) ||
|
|
100
|
+
r.title === ref);
|
|
101
|
+
if (matches.length === 1)
|
|
102
|
+
return matches[0];
|
|
103
|
+
if (matches.length > 1)
|
|
104
|
+
throw new Error(`Ambiguous chip ref: ${ref}`);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function assertNoActiveNamingConflicts(next) {
|
|
108
|
+
const peers = activeRecords(next.projectId).filter((r) => r.parent.opencodeSessionId === next.parent.opencodeSessionId && r.id !== next.id);
|
|
109
|
+
if (peers.some((r) => r.name === next.name)) {
|
|
110
|
+
throw new Error(`Active chip name is already in use: ${next.name}.`);
|
|
111
|
+
}
|
|
112
|
+
if (peers.some((r) => r.title === next.title)) {
|
|
113
|
+
throw new Error(`Active chip title is already in use: ${next.title}.`);
|
|
114
|
+
}
|
|
115
|
+
if (next.label && peers.some((r) => r.label === next.label)) {
|
|
116
|
+
throw new Error(`Active chip label is already in use: Chip ${next.label}.`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** True when an active OpenCode LEAD is bound to parentGoalId (nested-goal gate). */
|
|
120
|
+
function isActiveOpencodeLeadForGoal(parentGoalId, ownerSessionId) {
|
|
121
|
+
return listRecords().some((chip) => {
|
|
122
|
+
if (chip.role !== 'leader')
|
|
123
|
+
return false;
|
|
124
|
+
if (chip.goalId !== parentGoalId)
|
|
125
|
+
return false;
|
|
126
|
+
if (chip.state !== 'prepared' && chip.state !== 'dispatched')
|
|
127
|
+
return false;
|
|
128
|
+
const keys = [
|
|
129
|
+
chip.child.grepragSessionId,
|
|
130
|
+
chip.child.opencodeSessionId,
|
|
131
|
+
chip.child.opencodeSessionId?.slice(0, 8),
|
|
132
|
+
chip.id,
|
|
133
|
+
chip.id.slice(0, 8),
|
|
134
|
+
chip.parent.grepragSessionId,
|
|
135
|
+
].filter(Boolean);
|
|
136
|
+
return keys.some((k) => k.toLowerCase() === ownerSessionId.toLowerCase()
|
|
137
|
+
|| k.toLowerCase().startsWith(ownerSessionId.toLowerCase())
|
|
138
|
+
|| ownerSessionId.toLowerCase().startsWith(k.toLowerCase().slice(0, 8)));
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=opencode-chip-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-chip-store.js","sourceRoot":"","sources":["../../src/commands/opencode-chip-store.ts"],"names":[],"mappings":"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"}
|