@a5c-ai/babysitter-sdk 0.0.184 → 0.0.185
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/cli/commands/instructions.d.ts.map +1 -1
- package/dist/cli/commands/instructions.js +41 -0
- package/dist/cli/main.js +2 -2
- package/dist/config/defaults.d.ts +11 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +55 -0
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -1
- package/dist/harness/claudeCode.d.ts +2 -2
- package/dist/harness/claudeCode.d.ts.map +1 -1
- package/dist/harness/claudeCode.js +47 -72
- package/dist/harness/codex.d.ts.map +1 -1
- package/dist/harness/codex.js +10 -49
- package/dist/harness/cursor.d.ts.map +1 -1
- package/dist/harness/cursor.js +23 -34
- package/dist/harness/customAdapter.d.ts.map +1 -1
- package/dist/harness/customAdapter.js +8 -3
- package/dist/harness/discovery.js +7 -7
- package/dist/harness/geminiCli.d.ts.map +1 -1
- package/dist/harness/geminiCli.js +20 -27
- package/dist/harness/githubCopilot.d.ts.map +1 -1
- package/dist/harness/githubCopilot.js +17 -40
- package/dist/harness/index.d.ts +1 -0
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +3 -1
- package/dist/harness/installSupport.d.ts +1 -0
- package/dist/harness/installSupport.d.ts.map +1 -1
- package/dist/harness/installSupport.js +7 -3
- package/dist/harness/invoker.js +1 -1
- package/dist/harness/ohMyPi.d.ts +0 -14
- package/dist/harness/ohMyPi.d.ts.map +1 -1
- package/dist/harness/ohMyPi.js +163 -24
- package/dist/harness/opencode.d.ts +28 -0
- package/dist/harness/opencode.d.ts.map +1 -0
- package/dist/harness/opencode.js +578 -0
- package/dist/harness/pi.d.ts +1 -11
- package/dist/harness/pi.d.ts.map +1 -1
- package/dist/harness/pi.js +81 -105
- package/dist/harness/registry.d.ts.map +1 -1
- package/dist/harness/registry.js +2 -0
- package/dist/prompts/context.d.ts +9 -0
- package/dist/prompts/context.d.ts.map +1 -1
- package/dist/prompts/context.js +128 -20
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +2 -1
- package/dist/prompts/templates/completion-proof.md +8 -0
- package/dist/prompts/templates/critical-rules.md +5 -5
- package/dist/prompts/types.d.ts +4 -5
- package/dist/prompts/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/harness/pi.js
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Oh-My-Pi harness adapter.
|
|
4
|
-
*
|
|
5
|
-
* Extends the SDK harness layer with "pi" support while reusing the
|
|
6
|
-
* mature Claude stop/session-start hook handlers. The Pi adapter maps
|
|
7
|
-
* Oh-My-Pi-specific environment conventions to the generic adapter interface.
|
|
8
|
-
*/
|
|
9
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
3
|
if (k2 === undefined) k2 = k;
|
|
11
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -40,72 +33,77 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
40
33
|
};
|
|
41
34
|
})();
|
|
42
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
-
exports.
|
|
36
|
+
exports.installPiPlugin = installPiPlugin;
|
|
44
37
|
exports.createPiAdapter = createPiAdapter;
|
|
45
38
|
const path = __importStar(require("node:path"));
|
|
46
|
-
const node_fs_1 = require("node:fs");
|
|
47
|
-
const os = __importStar(require("node:os"));
|
|
48
|
-
const claudeCode_1 = require("./claudeCode");
|
|
49
39
|
const types_1 = require("./types");
|
|
50
40
|
const context_1 = require("../prompts/context");
|
|
41
|
+
const config_1 = require("../config");
|
|
42
|
+
const session_1 = require("../session");
|
|
51
43
|
const installSupport_1 = require("./installSupport");
|
|
52
44
|
function resolvePiPluginRoot(args = {}) {
|
|
53
|
-
const root = args.pluginRoot || process.env.
|
|
45
|
+
const root = args.pluginRoot || process.env.PI_PLUGIN_ROOT;
|
|
54
46
|
return root ? path.resolve(root) : undefined;
|
|
55
47
|
}
|
|
56
48
|
function resolvePiStateDir(args) {
|
|
57
49
|
if (args.stateDir)
|
|
58
50
|
return path.resolve(args.stateDir);
|
|
59
|
-
|
|
60
|
-
return path.resolve(process.env.BABYSITTER_STATE_DIR);
|
|
61
|
-
}
|
|
62
|
-
const pluginRoot = resolvePiPluginRoot(args);
|
|
63
|
-
if (pluginRoot) {
|
|
64
|
-
// PI-family plugins keep shared Babysitter session state adjacent to the
|
|
65
|
-
// plugin install root so the harness and plugin resolve the same files.
|
|
66
|
-
return path.resolve(pluginRoot, "..", ".a5c");
|
|
67
|
-
}
|
|
68
|
-
return path.resolve(".a5c");
|
|
51
|
+
return (0, config_1.getGlobalStateDir)();
|
|
69
52
|
}
|
|
70
53
|
function resolvePiSessionId(parsed) {
|
|
71
54
|
if (parsed.sessionId)
|
|
72
55
|
return parsed.sessionId;
|
|
73
|
-
if (process.env.
|
|
74
|
-
return process.env.
|
|
56
|
+
if (process.env.BABYSITTER_SESSION_ID)
|
|
57
|
+
return process.env.BABYSITTER_SESSION_ID;
|
|
75
58
|
if (process.env.PI_SESSION_ID)
|
|
76
59
|
return process.env.PI_SESSION_ID;
|
|
77
60
|
return undefined;
|
|
78
61
|
}
|
|
79
|
-
async function
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
packageName: args.packageName,
|
|
84
|
-
summary: `Install the ${args.harness} CLI globally via npm.`,
|
|
85
|
-
options: args.options,
|
|
62
|
+
async function bindPiSession(opts) {
|
|
63
|
+
const stateDir = resolvePiStateDir({
|
|
64
|
+
stateDir: opts.stateDir,
|
|
65
|
+
pluginRoot: opts.pluginRoot,
|
|
86
66
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
workspace: args.options.workspace,
|
|
100
|
-
});
|
|
101
|
-
if ((0, node_fs_1.existsSync)(targetDir)) {
|
|
67
|
+
const stateFile = (0, session_1.getSessionFilePath)(stateDir, opts.sessionId);
|
|
68
|
+
if (await (0, session_1.sessionFileExists)(stateFile)) {
|
|
69
|
+
const existing = await (0, session_1.readSessionFile)(stateFile);
|
|
70
|
+
if (existing.state.runId && existing.state.runId !== opts.runId) {
|
|
71
|
+
return {
|
|
72
|
+
harness: "pi",
|
|
73
|
+
sessionId: opts.sessionId,
|
|
74
|
+
stateFile,
|
|
75
|
+
error: `Session already associated with run ${existing.state.runId}`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
await (0, session_1.updateSessionState)(stateFile, { active: true, runId: opts.runId }, existing);
|
|
102
79
|
return {
|
|
103
|
-
harness:
|
|
104
|
-
|
|
105
|
-
|
|
80
|
+
harness: "pi",
|
|
81
|
+
sessionId: opts.sessionId,
|
|
82
|
+
stateFile,
|
|
106
83
|
};
|
|
107
84
|
}
|
|
108
|
-
const
|
|
85
|
+
const now = (0, session_1.getCurrentTimestamp)();
|
|
86
|
+
const state = {
|
|
87
|
+
active: true,
|
|
88
|
+
iteration: 1,
|
|
89
|
+
maxIterations: opts.maxIterations ?? 256,
|
|
90
|
+
runId: opts.runId,
|
|
91
|
+
startedAt: now,
|
|
92
|
+
lastIterationAt: now,
|
|
93
|
+
iterationTimes: [],
|
|
94
|
+
};
|
|
95
|
+
await (0, session_1.writeSessionFile)(stateFile, state, opts.prompt);
|
|
96
|
+
return {
|
|
97
|
+
harness: "pi",
|
|
98
|
+
sessionId: opts.sessionId,
|
|
99
|
+
stateFile,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function writeNoopHookResult() {
|
|
103
|
+
process.stdout.write("{}\n");
|
|
104
|
+
}
|
|
105
|
+
async function installPiFamilyPlugin(args) {
|
|
106
|
+
const packageArgs = ["install"];
|
|
109
107
|
if (args.options.workspace) {
|
|
110
108
|
packageArgs.push("--workspace", path.resolve(args.options.workspace));
|
|
111
109
|
}
|
|
@@ -114,29 +112,42 @@ async function installPiFamilyPlugin(args) {
|
|
|
114
112
|
}
|
|
115
113
|
return (0, installSupport_1.runPackageBinaryViaNpx)({
|
|
116
114
|
harness: args.harness,
|
|
117
|
-
packageName:
|
|
115
|
+
packageName: args.packageName,
|
|
118
116
|
packageArgs,
|
|
119
117
|
summary: args.options.workspace
|
|
120
|
-
? `Install the published Babysitter
|
|
121
|
-
: `Install the published Babysitter
|
|
118
|
+
? `Install the published Babysitter ${args.harness} package for the target workspace.`
|
|
119
|
+
: `Install the published Babysitter ${args.harness} package into the user profile.`,
|
|
122
120
|
options: args.options,
|
|
123
121
|
env: process.env,
|
|
124
|
-
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
async function installPiPlugin(options) {
|
|
125
|
+
return installPiFamilyPlugin({
|
|
126
|
+
harness: "pi",
|
|
127
|
+
packageName: "@a5c-ai/babysitter-pi",
|
|
128
|
+
options,
|
|
125
129
|
});
|
|
126
130
|
}
|
|
127
131
|
function createPiAdapter() {
|
|
128
|
-
const claude = (0, claudeCode_1.createClaudeCodeAdapter)();
|
|
129
132
|
return {
|
|
130
133
|
name: "pi",
|
|
131
134
|
isActive() {
|
|
132
|
-
return !!(process.env.
|
|
135
|
+
return !!(process.env.BABYSITTER_SESSION_ID ||
|
|
133
136
|
process.env.PI_SESSION_ID ||
|
|
134
|
-
process.env.OMP_PLUGIN_ROOT ||
|
|
135
137
|
process.env.PI_PLUGIN_ROOT);
|
|
136
138
|
},
|
|
137
139
|
autoResolvesSessionId() {
|
|
138
140
|
return true;
|
|
139
141
|
},
|
|
142
|
+
getMissingSessionIdHint() {
|
|
143
|
+
return "Pi should provide PI_SESSION_ID when the Babysitter package is active.";
|
|
144
|
+
},
|
|
145
|
+
supportsHookType(_hookType) {
|
|
146
|
+
return false;
|
|
147
|
+
},
|
|
148
|
+
getUnsupportedHookMessage(hookType) {
|
|
149
|
+
return `Pi does not use babysitter hook:run for "${hookType}". Use the Pi package skills and extension bridge instead.`;
|
|
150
|
+
},
|
|
140
151
|
resolveSessionId(parsed) {
|
|
141
152
|
return resolvePiSessionId(parsed);
|
|
142
153
|
},
|
|
@@ -146,69 +157,34 @@ function createPiAdapter() {
|
|
|
146
157
|
resolvePluginRoot(args) {
|
|
147
158
|
return resolvePiPluginRoot(args);
|
|
148
159
|
},
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
stateDir: opts.stateDir,
|
|
152
|
-
pluginRoot: opts.pluginRoot,
|
|
153
|
-
});
|
|
154
|
-
const result = await claude.bindSession({
|
|
155
|
-
...opts,
|
|
156
|
-
stateDir,
|
|
157
|
-
});
|
|
158
|
-
return { ...result, harness: "pi" };
|
|
160
|
+
bindSession(opts) {
|
|
161
|
+
return bindPiSession(opts);
|
|
159
162
|
},
|
|
160
|
-
handleStopHook(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
stateDir: args.stateDir,
|
|
164
|
-
pluginRoot,
|
|
165
|
-
});
|
|
166
|
-
return claude.handleStopHook({
|
|
167
|
-
...args,
|
|
168
|
-
pluginRoot,
|
|
169
|
-
stateDir,
|
|
170
|
-
});
|
|
163
|
+
handleStopHook(_args) {
|
|
164
|
+
writeNoopHookResult();
|
|
165
|
+
return Promise.resolve(0);
|
|
171
166
|
},
|
|
172
|
-
handleSessionStartHook(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
stateDir: args.stateDir,
|
|
176
|
-
pluginRoot,
|
|
177
|
-
});
|
|
178
|
-
return claude.handleSessionStartHook({
|
|
179
|
-
...args,
|
|
180
|
-
pluginRoot,
|
|
181
|
-
stateDir,
|
|
182
|
-
});
|
|
167
|
+
handleSessionStartHook(_args) {
|
|
168
|
+
writeNoopHookResult();
|
|
169
|
+
return Promise.resolve(0);
|
|
183
170
|
},
|
|
184
|
-
findHookDispatcherPath(
|
|
185
|
-
const pluginRoot = resolvePiPluginRoot();
|
|
186
|
-
if (pluginRoot) {
|
|
187
|
-
const candidate = path.join(pluginRoot, "hooks", "hook-dispatcher.sh");
|
|
188
|
-
if ((0, node_fs_1.existsSync)(candidate))
|
|
189
|
-
return candidate;
|
|
190
|
-
}
|
|
191
|
-
const local = path.join(path.resolve(startCwd), ".omp", "hooks", "hook-dispatcher.sh");
|
|
192
|
-
if ((0, node_fs_1.existsSync)(local))
|
|
193
|
-
return local;
|
|
171
|
+
findHookDispatcherPath(_startCwd) {
|
|
194
172
|
return null;
|
|
195
173
|
},
|
|
196
174
|
installHarness(options) {
|
|
197
|
-
return
|
|
175
|
+
return (0, installSupport_1.installCliViaNpm)({
|
|
198
176
|
harness: "pi",
|
|
199
177
|
cliCommand: "pi",
|
|
200
178
|
packageName: "@mariozechner/pi-coding-agent",
|
|
179
|
+
summary: "Install the Pi Coding Agent CLI globally via npm.",
|
|
201
180
|
options,
|
|
202
181
|
});
|
|
203
182
|
},
|
|
204
183
|
installPlugin(options) {
|
|
205
|
-
return
|
|
206
|
-
harness: "pi",
|
|
207
|
-
options,
|
|
208
|
-
});
|
|
184
|
+
return installPiPlugin(options);
|
|
209
185
|
},
|
|
210
186
|
getCapabilities() {
|
|
211
|
-
return [types_1.HarnessCapability.
|
|
187
|
+
return [types_1.HarnessCapability.Programmatic, types_1.HarnessCapability.SessionBinding, types_1.HarnessCapability.HeadlessPrompt];
|
|
212
188
|
},
|
|
213
189
|
getPromptContext(opts) {
|
|
214
190
|
return (0, context_1.createPiContext)(opts);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/harness/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/harness/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAiC9C;;;GAGG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAK9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAKpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD;AAQD;;GAEG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAK3C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAExD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
|
package/dist/harness/registry.js
CHANGED
|
@@ -21,6 +21,7 @@ const ohMyPi_1 = require("./ohMyPi");
|
|
|
21
21
|
const internal_1 = require("./internal");
|
|
22
22
|
const cursor_1 = require("./cursor");
|
|
23
23
|
const githubCopilot_1 = require("./githubCopilot");
|
|
24
|
+
const opencode_1 = require("./opencode");
|
|
24
25
|
const customAdapter_1 = require("./customAdapter");
|
|
25
26
|
// ---------------------------------------------------------------------------
|
|
26
27
|
// Registry of known adapters (ordered by priority)
|
|
@@ -30,6 +31,7 @@ const knownAdapters = [
|
|
|
30
31
|
(0, ohMyPi_1.createOhMyPiAdapter)(),
|
|
31
32
|
(0, internal_1.createInternalAdapter)(),
|
|
32
33
|
(0, pi_1.createPiAdapter)(),
|
|
34
|
+
(0, opencode_1.createOpenCodeAdapter)(),
|
|
33
35
|
(0, claudeCode_1.createClaudeCodeAdapter)(),
|
|
34
36
|
(0, geminiCli_1.createGeminiCliAdapter)(),
|
|
35
37
|
(0, cursor_1.createCursorAdapter)(),
|
|
@@ -20,8 +20,17 @@ export declare function createGithubCopilotContext(overrides?: Partial<PromptCon
|
|
|
20
20
|
* Create a PromptContext pre-configured for Cursor IDE/CLI.
|
|
21
21
|
*/
|
|
22
22
|
export declare function createCursorContext(overrides?: Partial<PromptContext>): PromptContext;
|
|
23
|
+
/**
|
|
24
|
+
* Create a PromptContext pre-configured for Gemini CLI.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createGeminiCliContext(overrides?: Partial<PromptContext>): PromptContext;
|
|
27
|
+
/**
|
|
28
|
+
* Create a PromptContext pre-configured for OpenCode.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createOpenCodeContext(overrides?: Partial<PromptContext>): PromptContext;
|
|
23
31
|
/**
|
|
24
32
|
* Create a PromptContext pre-configured for PI.
|
|
25
33
|
*/
|
|
26
34
|
export declare function createPiContext(overrides?: Partial<PromptContext>): PromptContext;
|
|
35
|
+
export declare function createOhMyPiContext(overrides?: Partial<PromptContext>): PromptContext;
|
|
27
36
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/prompts/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAUxC;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/prompts/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAUxC;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CA+Bf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CAgCf;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CAiCf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CAiCf;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CA+Bf;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CAkCf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CA+Bf;AAED,wBAAgB,mBAAmB,CACjC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GACjC,aAAa,CA+Bf"}
|
package/dist/prompts/context.js
CHANGED
|
@@ -9,7 +9,10 @@ exports.createClaudeCodeContext = createClaudeCodeContext;
|
|
|
9
9
|
exports.createCodexContext = createCodexContext;
|
|
10
10
|
exports.createGithubCopilotContext = createGithubCopilotContext;
|
|
11
11
|
exports.createCursorContext = createCursorContext;
|
|
12
|
+
exports.createGeminiCliContext = createGeminiCliContext;
|
|
13
|
+
exports.createOpenCodeContext = createOpenCodeContext;
|
|
12
14
|
exports.createPiContext = createPiContext;
|
|
15
|
+
exports.createOhMyPiContext = createOhMyPiContext;
|
|
13
16
|
const COMMON_DEFAULTS = {
|
|
14
17
|
interactive: true,
|
|
15
18
|
platform: typeof process !== 'undefined' ? process.platform : 'linux',
|
|
@@ -28,11 +31,11 @@ function createClaudeCodeContext(overrides) {
|
|
|
28
31
|
capabilities: ['hooks', 'stop-hook', 'ask-user-question', 'task-tool', 'breakpoint-routing'],
|
|
29
32
|
pluginRootVar: '${CLAUDE_PLUGIN_ROOT}',
|
|
30
33
|
loopControlTerm: 'stop-hook',
|
|
31
|
-
sessionBindingFlags: '
|
|
34
|
+
sessionBindingFlags: '',
|
|
32
35
|
hookDriven: true,
|
|
33
36
|
interactiveToolName: 'AskUserQuestion tool',
|
|
34
|
-
sessionEnvVars: '
|
|
35
|
-
resumeFlags: '
|
|
37
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID (via CLAUDE_ENV_FILE)',
|
|
38
|
+
resumeFlags: '',
|
|
36
39
|
cliSetupSnippet: [
|
|
37
40
|
'Read the SDK version from `versions.json` to ensure version compatibility:',
|
|
38
41
|
'',
|
|
@@ -46,7 +49,7 @@ function createClaudeCodeContext(overrides) {
|
|
|
46
49
|
'**Alternatively:** `CLI="npx -y @a5c-ai/babysitter-sdk@$SDK_VERSION"`',
|
|
47
50
|
].join('\n'),
|
|
48
51
|
sdkVersionExpr: '$SDK_VERSION',
|
|
49
|
-
iterateFlags: '
|
|
52
|
+
iterateFlags: '',
|
|
50
53
|
hasIntentFidelityChecks: false,
|
|
51
54
|
hasNonNegotiables: false,
|
|
52
55
|
...overrides,
|
|
@@ -63,11 +66,11 @@ function createCodexContext(overrides) {
|
|
|
63
66
|
capabilities: ['hooks', 'stop-hook', 'ask-user-question', 'task-tool', 'breakpoint-routing'],
|
|
64
67
|
pluginRootVar: '${CODEX_PLUGIN_ROOT}',
|
|
65
68
|
loopControlTerm: 'stop-hook',
|
|
66
|
-
sessionBindingFlags: '
|
|
67
|
-
hookDriven:
|
|
69
|
+
sessionBindingFlags: '',
|
|
70
|
+
hookDriven: true, // overridden at instruction-generation time if session-start hook hasn't run
|
|
68
71
|
interactiveToolName: 'AskUserQuestion tool',
|
|
69
|
-
sessionEnvVars: '
|
|
70
|
-
resumeFlags: '
|
|
72
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID, CODEX_THREAD_ID (auto-injected)',
|
|
73
|
+
resumeFlags: '',
|
|
71
74
|
cliSetupSnippet: [
|
|
72
75
|
'Use the installed CLI alias:',
|
|
73
76
|
'',
|
|
@@ -81,7 +84,7 @@ function createCodexContext(overrides) {
|
|
|
81
84
|
'CLI="npx -y @a5c-ai/babysitter-sdk"',
|
|
82
85
|
'```',
|
|
83
86
|
].join('\n'),
|
|
84
|
-
iterateFlags: '
|
|
87
|
+
iterateFlags: '',
|
|
85
88
|
hasIntentFidelityChecks: true,
|
|
86
89
|
hasNonNegotiables: true,
|
|
87
90
|
...overrides,
|
|
@@ -100,11 +103,11 @@ function createGithubCopilotContext(overrides) {
|
|
|
100
103
|
// In-turn model: agent drives orchestration loop within a single session.
|
|
101
104
|
// No stop-hook available — Copilot CLI sessionEnd output is ignored.
|
|
102
105
|
loopControlTerm: 'in-turn',
|
|
103
|
-
sessionBindingFlags: '
|
|
106
|
+
sessionBindingFlags: '',
|
|
104
107
|
hookDriven: false,
|
|
105
108
|
interactiveToolName: 'AskUserQuestion tool',
|
|
106
|
-
sessionEnvVars: '
|
|
107
|
-
resumeFlags: '
|
|
109
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID (via COPILOT_ENV_FILE or CLAUDE_ENV_FILE)',
|
|
110
|
+
resumeFlags: '',
|
|
108
111
|
cliSetupSnippet: [
|
|
109
112
|
'Use the installed CLI alias:',
|
|
110
113
|
'',
|
|
@@ -137,11 +140,84 @@ function createCursorContext(overrides) {
|
|
|
137
140
|
// Stop-hook model: Cursor's stop hook returns {followup_message: "..."}
|
|
138
141
|
// to auto-continue (controlled by loop_limit in hooks.json).
|
|
139
142
|
loopControlTerm: 'stop-hook',
|
|
140
|
-
sessionBindingFlags: '
|
|
143
|
+
sessionBindingFlags: '',
|
|
144
|
+
hookDriven: true,
|
|
145
|
+
interactiveToolName: 'AskUserQuestion tool',
|
|
146
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID or conversation_id (via hook stdin JSON)',
|
|
147
|
+
resumeFlags: '',
|
|
148
|
+
cliSetupSnippet: [
|
|
149
|
+
'Use the installed CLI alias:',
|
|
150
|
+
'',
|
|
151
|
+
'```bash',
|
|
152
|
+
'CLI="babysitter"',
|
|
153
|
+
'```',
|
|
154
|
+
'',
|
|
155
|
+
'If it is not available on the path, use:',
|
|
156
|
+
'',
|
|
157
|
+
'```bash',
|
|
158
|
+
'CLI="npx -y @a5c-ai/babysitter-sdk"',
|
|
159
|
+
'```',
|
|
160
|
+
].join('\n'),
|
|
161
|
+
iterateFlags: '',
|
|
162
|
+
hasIntentFidelityChecks: false,
|
|
163
|
+
hasNonNegotiables: false,
|
|
164
|
+
...overrides,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a PromptContext pre-configured for Gemini CLI.
|
|
169
|
+
*/
|
|
170
|
+
function createGeminiCliContext(overrides) {
|
|
171
|
+
return {
|
|
172
|
+
...COMMON_DEFAULTS,
|
|
173
|
+
harness: 'gemini-cli',
|
|
174
|
+
harnessLabel: 'Gemini CLI',
|
|
175
|
+
capabilities: ['hooks', 'stop-hook', 'task-tool', 'breakpoint-routing'],
|
|
176
|
+
pluginRootVar: '${GEMINI_EXTENSION_PATH}',
|
|
177
|
+
loopControlTerm: 'stop-hook',
|
|
178
|
+
sessionBindingFlags: '',
|
|
141
179
|
hookDriven: true,
|
|
142
180
|
interactiveToolName: 'AskUserQuestion tool',
|
|
143
|
-
sessionEnvVars: '
|
|
144
|
-
resumeFlags: '
|
|
181
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID, GEMINI_SESSION_ID (auto-injected)',
|
|
182
|
+
resumeFlags: '',
|
|
183
|
+
cliSetupSnippet: [
|
|
184
|
+
'Use the installed CLI alias:',
|
|
185
|
+
'',
|
|
186
|
+
'```bash',
|
|
187
|
+
'CLI="babysitter"',
|
|
188
|
+
'```',
|
|
189
|
+
'',
|
|
190
|
+
'If it is not available on the path, use:',
|
|
191
|
+
'',
|
|
192
|
+
'```bash',
|
|
193
|
+
'CLI="npx -y @a5c-ai/babysitter-sdk"',
|
|
194
|
+
'```',
|
|
195
|
+
].join('\n'),
|
|
196
|
+
iterateFlags: '',
|
|
197
|
+
hasIntentFidelityChecks: false,
|
|
198
|
+
hasNonNegotiables: false,
|
|
199
|
+
...overrides,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create a PromptContext pre-configured for OpenCode.
|
|
204
|
+
*/
|
|
205
|
+
function createOpenCodeContext(overrides) {
|
|
206
|
+
return {
|
|
207
|
+
...COMMON_DEFAULTS,
|
|
208
|
+
harness: 'opencode',
|
|
209
|
+
harnessLabel: 'OpenCode',
|
|
210
|
+
capabilities: ['task-tool', 'breakpoint-routing'],
|
|
211
|
+
pluginRootVar: '',
|
|
212
|
+
// In-turn model: OpenCode has no blocking stop hook.
|
|
213
|
+
// session.idle is fire-and-forget. Orchestration is driven in-turn
|
|
214
|
+
// by the agent itself or via the SDK loop driver.
|
|
215
|
+
loopControlTerm: 'in-turn',
|
|
216
|
+
sessionBindingFlags: '',
|
|
217
|
+
hookDriven: false,
|
|
218
|
+
interactiveToolName: '',
|
|
219
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID (self-injected via shell.env hook)',
|
|
220
|
+
resumeFlags: '',
|
|
145
221
|
cliSetupSnippet: [
|
|
146
222
|
'Use the installed CLI alias:',
|
|
147
223
|
'',
|
|
@@ -168,14 +244,46 @@ function createPiContext(overrides) {
|
|
|
168
244
|
return {
|
|
169
245
|
...COMMON_DEFAULTS,
|
|
170
246
|
harness: 'pi',
|
|
171
|
-
harnessLabel: '
|
|
172
|
-
capabilities: ['
|
|
173
|
-
pluginRootVar: '',
|
|
174
|
-
loopControlTerm: '
|
|
247
|
+
harnessLabel: 'Pi Coding Agent',
|
|
248
|
+
capabilities: ['skills', 'slash-commands', 'task-tool', 'harness-routing', 'programmatic-session'],
|
|
249
|
+
pluginRootVar: '${PI_PLUGIN_ROOT}',
|
|
250
|
+
loopControlTerm: 'skill-driven',
|
|
251
|
+
sessionBindingFlags: '',
|
|
252
|
+
hookDriven: false,
|
|
253
|
+
interactiveToolName: 'AskUserQuestion',
|
|
254
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID, PI_SESSION_ID, PI_PLUGIN_ROOT',
|
|
255
|
+
resumeFlags: '',
|
|
256
|
+
cliSetupSnippet: [
|
|
257
|
+
'Use the installed CLI alias:',
|
|
258
|
+
'',
|
|
259
|
+
'```bash',
|
|
260
|
+
'CLI="babysitter"',
|
|
261
|
+
'```',
|
|
262
|
+
'',
|
|
263
|
+
'If it is not available on the path, use:',
|
|
264
|
+
'',
|
|
265
|
+
'```bash',
|
|
266
|
+
'CLI="npx -y @a5c-ai/babysitter-sdk"',
|
|
267
|
+
'```',
|
|
268
|
+
].join('\n'),
|
|
269
|
+
iterateFlags: '',
|
|
270
|
+
hasIntentFidelityChecks: false,
|
|
271
|
+
hasNonNegotiables: false,
|
|
272
|
+
...overrides,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
function createOhMyPiContext(overrides) {
|
|
276
|
+
return {
|
|
277
|
+
...COMMON_DEFAULTS,
|
|
278
|
+
harness: 'oh-my-pi',
|
|
279
|
+
harnessLabel: 'oh-my-pi',
|
|
280
|
+
capabilities: ['skills', 'slash-commands', 'task-tool', 'harness-routing', 'programmatic-session', 'mcp'],
|
|
281
|
+
pluginRootVar: '${OMP_PLUGIN_ROOT}',
|
|
282
|
+
loopControlTerm: 'skill-driven',
|
|
175
283
|
sessionBindingFlags: '',
|
|
176
284
|
hookDriven: false,
|
|
177
285
|
interactiveToolName: 'AskUserQuestion',
|
|
178
|
-
sessionEnvVars: '
|
|
286
|
+
sessionEnvVars: 'BABYSITTER_SESSION_ID, OMP_SESSION_ID, OMP_PLUGIN_ROOT',
|
|
179
287
|
resumeFlags: '',
|
|
180
288
|
cliSetupSnippet: [
|
|
181
289
|
'Use the installed CLI alias:',
|
package/dist/prompts/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module prompts
|
|
5
5
|
*/
|
|
6
6
|
export type { PromptContext, PromptPart } from './types';
|
|
7
|
-
export { createClaudeCodeContext, createCodexContext, createPiContext, } from './context';
|
|
7
|
+
export { createClaudeCodeContext, createCodexContext, createGeminiCliContext, createPiContext, } from './context';
|
|
8
8
|
export { renderTemplate, renderTemplateString, resolveTemplatePath, } from './templateRenderer';
|
|
9
9
|
export { renderCommandTemplate, resolveCommandTemplatePath, } from './commandTemplates';
|
|
10
10
|
export { composeBabysitSkillPrompt, composeProcessCreatePrompt, composeOrchestrationPrompt, composeBreakpointPrompt, joinNonEmpty, } from './compose';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,YAAY,GACb,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,YAAY,GACb,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
|
package/dist/prompts/index.js
CHANGED
|
@@ -5,11 +5,12 @@
|
|
|
5
5
|
* @module prompts
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.renderNonNegotiables = exports.renderSeeAlso = exports.renderCriticalRules = exports.renderProcessGuidelines = exports.renderRecovery = exports.renderQuickReference = exports.renderTaskExamples = exports.renderTaskKinds = exports.renderCompletionProof = exports.renderLoopControl = exports.renderResultsPosting = exports.renderBreakpointHandling = exports.renderEffects = exports.renderIteration = exports.renderRunCreation = exports.renderIntentFidelityChecks = exports.renderProcessCreation = exports.renderUserProfile = exports.renderInterview = exports.renderDependencies = exports.joinNonEmpty = exports.composeBreakpointPrompt = exports.composeOrchestrationPrompt = exports.composeProcessCreatePrompt = exports.composeBabysitSkillPrompt = exports.resolveCommandTemplatePath = exports.renderCommandTemplate = exports.resolveTemplatePath = exports.renderTemplateString = exports.renderTemplate = exports.createPiContext = exports.createCodexContext = exports.createClaudeCodeContext = void 0;
|
|
8
|
+
exports.renderNonNegotiables = exports.renderSeeAlso = exports.renderCriticalRules = exports.renderProcessGuidelines = exports.renderRecovery = exports.renderQuickReference = exports.renderTaskExamples = exports.renderTaskKinds = exports.renderCompletionProof = exports.renderLoopControl = exports.renderResultsPosting = exports.renderBreakpointHandling = exports.renderEffects = exports.renderIteration = exports.renderRunCreation = exports.renderIntentFidelityChecks = exports.renderProcessCreation = exports.renderUserProfile = exports.renderInterview = exports.renderDependencies = exports.joinNonEmpty = exports.composeBreakpointPrompt = exports.composeOrchestrationPrompt = exports.composeProcessCreatePrompt = exports.composeBabysitSkillPrompt = exports.resolveCommandTemplatePath = exports.renderCommandTemplate = exports.resolveTemplatePath = exports.renderTemplateString = exports.renderTemplate = exports.createPiContext = exports.createGeminiCliContext = exports.createCodexContext = exports.createClaudeCodeContext = void 0;
|
|
9
9
|
// Context factories
|
|
10
10
|
var context_1 = require("./context");
|
|
11
11
|
Object.defineProperty(exports, "createClaudeCodeContext", { enumerable: true, get: function () { return context_1.createClaudeCodeContext; } });
|
|
12
12
|
Object.defineProperty(exports, "createCodexContext", { enumerable: true, get: function () { return context_1.createCodexContext; } });
|
|
13
|
+
Object.defineProperty(exports, "createGeminiCliContext", { enumerable: true, get: function () { return context_1.createGeminiCliContext; } });
|
|
13
14
|
Object.defineProperty(exports, "createPiContext", { enumerable: true, get: function () { return context_1.createPiContext; } });
|
|
14
15
|
// Template renderer
|
|
15
16
|
var templateRenderer_1 = require("./templateRenderer");
|
|
@@ -7,7 +7,15 @@ loop.
|
|
|
7
7
|
|
|
8
8
|
### Progressing Between The Phases
|
|
9
9
|
|
|
10
|
+
{{#hookDriven}}
|
|
10
11
|
After you run `run:create`, progress through the phases above by stopping the
|
|
11
12
|
session, which will trigger the {{loopControlTerm}} and call you with the next phase.
|
|
12
13
|
After you finish each phase after `run:create`, stop the session and return
|
|
13
14
|
control to the user until you are called again by the hook.
|
|
15
|
+
{{/hookDriven}}
|
|
16
|
+
{{^hookDriven}}
|
|
17
|
+
After you run `run:create`, progress through the phases above by continuing
|
|
18
|
+
to iterate in the same session. Drive the loop yourself: call `run:iterate`,
|
|
19
|
+
perform effects, post results, and repeat until the run completes or you need
|
|
20
|
+
explicit user input for a breakpoint.
|
|
21
|
+
{{/hookDriven}}
|
|
@@ -37,11 +37,11 @@ continue. Running multiple iterations in a single session turn bypasses the hook
|
|
|
37
37
|
loop and breaks the orchestration model.
|
|
38
38
|
{{/hookDriven}}
|
|
39
39
|
{{^hookDriven}}
|
|
40
|
-
CRITICAL RULE:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
CRITICAL RULE: Hooks are NOT available in this environment. You MUST drive the
|
|
41
|
+
orchestration loop yourself in-turn: after run:create, keep calling run:iterate,
|
|
42
|
+
performing effects, and posting results in the same session until the run reaches
|
|
43
|
+
a terminal state or you need explicit user input for a breakpoint. Do NOT stop
|
|
44
|
+
and wait for a hook callback -- it will never arrive.
|
|
45
45
|
{{/hookDriven}}
|
|
46
46
|
|
|
47
47
|
CRITICAL RULE: NEVER use `kind: 'node'` in generated process files. All tasks
|
package/dist/prompts/types.d.ts
CHANGED
|
@@ -49,15 +49,14 @@ export interface PromptContext {
|
|
|
49
49
|
interactiveToolName: string;
|
|
50
50
|
/**
|
|
51
51
|
* Environment variables the harness auto-resolves for session binding.
|
|
52
|
-
* e.g., '
|
|
53
|
-
* '
|
|
52
|
+
* e.g., 'BABYSITTER_SESSION_ID (via CLAUDE_ENV_FILE)' or
|
|
53
|
+
* 'BABYSITTER_SESSION_ID, CODEX_THREAD_ID (auto-injected)'
|
|
54
54
|
*/
|
|
55
55
|
sessionEnvVars: string;
|
|
56
56
|
/**
|
|
57
57
|
* Extra flags for session:resume command.
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* or '' (PI, no extra flags)
|
|
58
|
+
* Usually empty — state dir defaults to ~/.a5c/state/ globally.
|
|
59
|
+
* Only set when a harness needs an explicit override.
|
|
61
60
|
*/
|
|
62
61
|
resumeFlags: string;
|
|
63
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompts/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAEhB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IAErB;sFACkF;IAClF,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IAEjC;;;;OAIG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;uFACmF;IACnF,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prompts/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAEhB,mEAAmE;IACnE,YAAY,EAAE,MAAM,CAAC;IAErB;sFACkF;IAClF,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;IAEjC;;;;OAIG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;uFACmF;IACnF,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,uBAAuB,EAAE,OAAO,CAAC;IAEjC;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,aAAa,KAAK,MAAM,CAAC"}
|