@agimon-ai/po-help 0.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/apiContracts.cjs +17 -0
- package/dist/apiContracts.cjs.map +1 -0
- package/dist/apiContracts.d.mts +53 -0
- package/dist/apiContracts.d.mts.map +1 -0
- package/dist/apiContracts.mjs +13 -0
- package/dist/apiContracts.mjs.map +1 -0
- package/dist/extensions/server.cjs +323 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +318 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/extensions/web.mjs +88 -0
- package/dist/extensions/web.mjs.map +1 -0
- package/dist/index.cjs +763 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +133 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +732 -0
- package/dist/index.mjs.map +1 -0
- package/llms.txt +15 -0
- package/package.json +117 -0
- package/src/prompts/po-develop-native-extension/SKILL.md +63 -0
- package/src/prompts/po-use-chatgpt-instructions/SKILL.md +66 -0
- package/src/prompts/po-use-help/SKILL.md +40 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import { DOOM_HELP_WHEN } from "@agimon-ai/po-core/help";
|
|
2
|
+
import { composeServerProviderOverrides, defineServerPlugin, defineTool, packageResourcePath, readPackageResource } from "@agimon-ai/po-core/serverFacet";
|
|
3
|
+
import { composeRootHooks, defineRoot, defineRoutedContribution } from "@agimon-ai/po-core/extensionFile";
|
|
4
|
+
import { defineMinorMode, serverMinorModes } from "@agimon-ai/po-minor-mode";
|
|
5
|
+
import { Type } from "typebox";
|
|
6
|
+
//#region src/constants/help.ts
|
|
7
|
+
const HELP_COMMAND_NAME = "doom-help";
|
|
8
|
+
const HELP_COMMAND_DESCRIPTION = "Toggle Help guidance and read-only support diagnostics";
|
|
9
|
+
const HELP_MODE_ID = "help";
|
|
10
|
+
const HELP_PACKAGE_SOURCE = "@agimon-ai/po-help";
|
|
11
|
+
const HELP_SKILL = {
|
|
12
|
+
name: "po-use-help",
|
|
13
|
+
description: "Set up and debug Po agents using installed package guidance and scoped, read-only diagnostics. Diagnose missing capabilities before proposing authorized repairs."
|
|
14
|
+
};
|
|
15
|
+
const HELP_GUIDANCE = "Help mode is active. Read po-use-help, inspect the available diagnostics, and use the narrowest package guidance for the task. Diagnose before proposing changes. Help does not grant additional permissions.";
|
|
16
|
+
const HELP_STATUS_TOOL_NAME = "help_status";
|
|
17
|
+
const HELP_STATUS_TOOL_DESCRIPTION = "Inspect active Help skills, diagnostic tools, contributor ownership, and unavailable contributions in this session. Read-only; does not change selection or permissions.";
|
|
18
|
+
const HELP_CHATGPT_SKILL = {
|
|
19
|
+
name: "po-use-chatgpt-instructions",
|
|
20
|
+
description: "Print a paste-ready ChatGPT project instruction (at most 8,000 characters) that routes code-mode work through this session's MCP tools and condenses every AGENTS.md rule. Writes no files."
|
|
21
|
+
};
|
|
22
|
+
const HELP_NATIVE_SKILL = {
|
|
23
|
+
name: "po-develop-native-extension",
|
|
24
|
+
description: "Add or change a Po package's phone UI (.native files, native templates) so it mirrors the cockpit, passes the native build, and is approved and verified before it ships."
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/schemas/diagnostics.ts
|
|
28
|
+
const helpStatusParameters = Type.Object({}, { additionalProperties: false });
|
|
29
|
+
//#endregion
|
|
30
|
+
//#region src/services/helpStatus/index.ts
|
|
31
|
+
function serverHelpStatus(snapshot, enabled) {
|
|
32
|
+
const entries = snapshot.capabilities.filter((entry) => entry.when?.state?.["minor-mode"] === HELP_MODE_ID);
|
|
33
|
+
const skills = entries.filter((entry) => entry.kind === "skill");
|
|
34
|
+
const tools = entries.filter((entry) => entry.kind === "tool");
|
|
35
|
+
const diagnostics = entries.filter((entry) => enabled && entry.reason && entry.reason !== "inactive").map((entry) => ({
|
|
36
|
+
source: entry.source,
|
|
37
|
+
code: `HELP_${entry.reason.replaceAll("-", "_").toUpperCase()}`
|
|
38
|
+
}));
|
|
39
|
+
const ready = snapshot.ready;
|
|
40
|
+
return {
|
|
41
|
+
activation: !enabled ? "inactive" : !ready ? "activating" : diagnostics.length ? "degraded" : "active",
|
|
42
|
+
ready,
|
|
43
|
+
revision: snapshot.revision,
|
|
44
|
+
counts: {
|
|
45
|
+
skills: ready ? skills.filter((entry) => entry.active && entry.discoverable).length : null,
|
|
46
|
+
tools: tools.filter((entry) => entry.active).length
|
|
47
|
+
},
|
|
48
|
+
skills: skills.slice(0, 128).map(({ name, source, active, discoverable, reason }) => ({
|
|
49
|
+
name,
|
|
50
|
+
source,
|
|
51
|
+
active: active && discoverable,
|
|
52
|
+
...reason ? { reason } : {}
|
|
53
|
+
})),
|
|
54
|
+
tools: tools.slice(0, 128).map(({ name, source, active, reason }) => ({
|
|
55
|
+
name,
|
|
56
|
+
source,
|
|
57
|
+
active,
|
|
58
|
+
...reason ? { reason } : {}
|
|
59
|
+
})),
|
|
60
|
+
diagnostics: diagnostics.slice(0, 128),
|
|
61
|
+
truncated: skills.length > 128 || tools.length > 128 || diagnostics.length > 128
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function helpStatusDetail(report) {
|
|
65
|
+
return `${report.counts.skills ?? "pending"} Help skills, ${report.counts.tools} diagnostic tools${report.diagnostics.length ? " (diagnostics available)" : ""}`;
|
|
66
|
+
}
|
|
67
|
+
function createHelpStatusTool(inspect, authorize) {
|
|
68
|
+
return defineTool({
|
|
69
|
+
name: HELP_STATUS_TOOL_NAME,
|
|
70
|
+
description: HELP_STATUS_TOOL_DESCRIPTION,
|
|
71
|
+
parameters: helpStatusParameters,
|
|
72
|
+
when: DOOM_HELP_WHEN,
|
|
73
|
+
promptGuidelines: [HELP_GUIDANCE],
|
|
74
|
+
async execute(_input, execution) {
|
|
75
|
+
const signal = authorize(execution.signal);
|
|
76
|
+
const report = await inspect();
|
|
77
|
+
signal.throwIfAborted();
|
|
78
|
+
authorize(execution.signal);
|
|
79
|
+
return {
|
|
80
|
+
content: [{
|
|
81
|
+
type: "text",
|
|
82
|
+
text: JSON.stringify(report, null, 2)
|
|
83
|
+
}],
|
|
84
|
+
details: report
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
//#region src/services/helpServerSession/index.ts
|
|
91
|
+
function createHelpServerSession(host) {
|
|
92
|
+
let modeOwner;
|
|
93
|
+
let pending;
|
|
94
|
+
let failure;
|
|
95
|
+
let generation = 0;
|
|
96
|
+
let disposed = false;
|
|
97
|
+
const active = () => (host.context.selection.state?.["minor-mode"] ?? []).includes(HELP_MODE_ID);
|
|
98
|
+
const inspect = () => serverHelpStatus(host.inspectCapabilities(), active());
|
|
99
|
+
const modeState = () => {
|
|
100
|
+
const report = inspect();
|
|
101
|
+
return {
|
|
102
|
+
activation: pending === true ? "activating" : active() ? "active" : "inactive",
|
|
103
|
+
condition: pending !== void 0 || !report.ready ? "queued" : failure ? "failed" : report.activation === "degraded" ? "degraded" : "ready",
|
|
104
|
+
...pending !== void 0 ? { detail: "applying Help capabilities" } : failure ? { detail: failure } : active() ? { detail: helpStatusDetail(report) } : {},
|
|
105
|
+
actions: [{
|
|
106
|
+
id: "activate",
|
|
107
|
+
enabled: !active() && pending === void 0,
|
|
108
|
+
...!active() && pending === void 0 ? {} : { disabledReason: "Help is active or changing." }
|
|
109
|
+
}, {
|
|
110
|
+
id: "deactivate",
|
|
111
|
+
enabled: active() || pending === true,
|
|
112
|
+
...active() || pending === true ? {} : { disabledReason: "Help mode is not active." }
|
|
113
|
+
}]
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
const resources = [
|
|
117
|
+
{
|
|
118
|
+
when: DOOM_HELP_WHEN,
|
|
119
|
+
name: "po-help",
|
|
120
|
+
kind: "context",
|
|
121
|
+
read: () => HELP_GUIDANCE
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
when: DOOM_HELP_WHEN,
|
|
125
|
+
...HELP_SKILL,
|
|
126
|
+
kind: "skill",
|
|
127
|
+
path: packageResourcePath(import.meta.url, "src/prompts/po-use-help/SKILL.md"),
|
|
128
|
+
read: async () => {
|
|
129
|
+
const text = await readPackageResource(import.meta.url, "src/prompts/po-use-help/SKILL.md");
|
|
130
|
+
if (!text.trim()) throw new Error("The installed Help skill is missing or unreadable.");
|
|
131
|
+
return text;
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
when: DOOM_HELP_WHEN,
|
|
136
|
+
...HELP_CHATGPT_SKILL,
|
|
137
|
+
kind: "skill",
|
|
138
|
+
path: packageResourcePath(import.meta.url, "src/prompts/po-use-chatgpt-instructions/SKILL.md"),
|
|
139
|
+
read: async () => {
|
|
140
|
+
const text = await readPackageResource(import.meta.url, "src/prompts/po-use-chatgpt-instructions/SKILL.md");
|
|
141
|
+
if (!text.trim()) throw new Error("The installed ChatGPT instruction skill is missing or unreadable.");
|
|
142
|
+
return text;
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
when: DOOM_HELP_WHEN,
|
|
147
|
+
...HELP_NATIVE_SKILL,
|
|
148
|
+
kind: "skill",
|
|
149
|
+
path: packageResourcePath(import.meta.url, "src/prompts/po-develop-native-extension/SKILL.md"),
|
|
150
|
+
read: async () => {
|
|
151
|
+
const text = await readPackageResource(import.meta.url, "src/prompts/po-develop-native-extension/SKILL.md");
|
|
152
|
+
if (!text.trim()) throw new Error("The installed native extension skill is missing or unreadable.");
|
|
153
|
+
return text;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
];
|
|
157
|
+
const selectMode = async (enabled, signal) => {
|
|
158
|
+
if (disposed) throw new Error("Help runtime is disposed.");
|
|
159
|
+
signal?.throwIfAborted();
|
|
160
|
+
const operation = ++generation;
|
|
161
|
+
pending = enabled;
|
|
162
|
+
failure = void 0;
|
|
163
|
+
modeOwner?.publish();
|
|
164
|
+
try {
|
|
165
|
+
if (enabled) await resources[1].read(host.context);
|
|
166
|
+
signal?.throwIfAborted();
|
|
167
|
+
if (operation !== generation || disposed) throw new Error("Help activation was cancelled.");
|
|
168
|
+
const modes = (host.context.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== HELP_MODE_ID);
|
|
169
|
+
await host.changeSelection({
|
|
170
|
+
axis: "state",
|
|
171
|
+
key: "minor-mode",
|
|
172
|
+
values: enabled ? [...modes, HELP_MODE_ID] : modes
|
|
173
|
+
});
|
|
174
|
+
} catch (error) {
|
|
175
|
+
if (operation === generation) failure = (error instanceof Error ? error.message : String(error)).slice(0, 160);
|
|
176
|
+
throw error;
|
|
177
|
+
} finally {
|
|
178
|
+
if (operation === generation) {
|
|
179
|
+
pending = void 0;
|
|
180
|
+
modeOwner?.publish();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const command = {
|
|
185
|
+
name: HELP_COMMAND_NAME,
|
|
186
|
+
description: HELP_COMMAND_DESCRIPTION,
|
|
187
|
+
async execute(_args, execution) {
|
|
188
|
+
await selectMode(!(pending ?? active()));
|
|
189
|
+
await execution.client.notify({
|
|
190
|
+
title: "Po Help",
|
|
191
|
+
body: active() ? "Help mode activated." : "Help mode deactivated.",
|
|
192
|
+
level: "info"
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
modeOwner = defineMinorMode({
|
|
197
|
+
descriptor: {
|
|
198
|
+
source: HELP_PACKAGE_SOURCE,
|
|
199
|
+
id: HELP_MODE_ID,
|
|
200
|
+
label: "Help",
|
|
201
|
+
description: "Package guidance and read-only diagnostics for agent setup and debugging.",
|
|
202
|
+
order: 50,
|
|
203
|
+
actions: [{
|
|
204
|
+
id: "activate",
|
|
205
|
+
label: "Activate",
|
|
206
|
+
description: "Expose Help guidance and diagnostic tools.",
|
|
207
|
+
contexts: ["headless"],
|
|
208
|
+
parameters: []
|
|
209
|
+
}, {
|
|
210
|
+
id: "deactivate",
|
|
211
|
+
label: "Deactivate",
|
|
212
|
+
description: "Withdraw Help-only guidance and diagnostic tools.",
|
|
213
|
+
contexts: ["headless"],
|
|
214
|
+
parameters: []
|
|
215
|
+
}]
|
|
216
|
+
},
|
|
217
|
+
state: modeState,
|
|
218
|
+
async handleAction(_runtime, actionId, _argumentsValue, { signal }) {
|
|
219
|
+
if (actionId !== "activate" && actionId !== "deactivate") throw new Error(`Unknown Help mode action: ${actionId}`);
|
|
220
|
+
await selectMode(actionId === "activate", signal);
|
|
221
|
+
return { message: active() ? "Help mode activated." : "Help mode deactivated." };
|
|
222
|
+
}
|
|
223
|
+
}).createOwner(void 0);
|
|
224
|
+
return {
|
|
225
|
+
services: [serverMinorModes([modeOwner])],
|
|
226
|
+
resources,
|
|
227
|
+
commands: [command],
|
|
228
|
+
tools: [createHelpStatusTool(inspect, (signal) => {
|
|
229
|
+
signal?.throwIfAborted();
|
|
230
|
+
host.assertActive(HELP_PACKAGE_SOURCE);
|
|
231
|
+
if (disposed || !active()) throw new Error("Help mode is not active.");
|
|
232
|
+
return signal ?? new AbortController().signal;
|
|
233
|
+
})],
|
|
234
|
+
onDispose() {
|
|
235
|
+
disposed = true;
|
|
236
|
+
generation += 1;
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
//#endregion
|
|
241
|
+
//#region src/extensions/workspaces/sessions/(backend)/_lib/runtime.server.ts
|
|
242
|
+
var runtime_server_default = (({ agent }) => agent ? createHelpServerSession(agent) : {});
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region src/extensions/workspaces/sessions/(backend)/root.server.ts
|
|
245
|
+
var root_server_default = defineRoot((context) => {
|
|
246
|
+
const value = runtime_server_default(context);
|
|
247
|
+
return {
|
|
248
|
+
value,
|
|
249
|
+
services: value.services,
|
|
250
|
+
activities: value.activities,
|
|
251
|
+
onStart: value.onStart,
|
|
252
|
+
onStop: value.onStop,
|
|
253
|
+
onDispose: value.onDispose
|
|
254
|
+
};
|
|
255
|
+
});
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region src/extensions/workspaces/sessions/(backend)/command/doom-help.server.ts
|
|
258
|
+
var doom_help_server_default = defineRoutedContribution((context) => context.root.commands?.[0], { cardinality: "optional" });
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region src/extensions/workspaces/sessions/(backend)/resource/po-develop-native-extension.server.ts
|
|
261
|
+
var po_develop_native_extension_server_default = defineRoutedContribution((context) => context.root.resources?.[3], { cardinality: "optional" });
|
|
262
|
+
//#endregion
|
|
263
|
+
//#region src/extensions/workspaces/sessions/(backend)/resource/po-help.server.ts
|
|
264
|
+
var po_help_server_default = defineRoutedContribution((context) => context.root.resources?.[0], { cardinality: "optional" });
|
|
265
|
+
//#endregion
|
|
266
|
+
//#region src/extensions/workspaces/sessions/(backend)/resource/po-use-chatgpt-instructions.server.ts
|
|
267
|
+
var po_use_chatgpt_instructions_server_default = defineRoutedContribution((context) => context.root.resources?.[2], { cardinality: "optional" });
|
|
268
|
+
//#endregion
|
|
269
|
+
//#region src/extensions/workspaces/sessions/(backend)/resource/po-use-help.server.ts
|
|
270
|
+
var po_use_help_server_default = defineRoutedContribution((context) => context.root.resources?.[1], { cardinality: "optional" });
|
|
271
|
+
//#endregion
|
|
272
|
+
//#region src/extensions/workspaces/sessions/(backend)/tool/help_status.server.ts
|
|
273
|
+
var help_status_server_default = defineRoutedContribution((context) => context.root.tools?.[0], { cardinality: "optional" });
|
|
274
|
+
//#endregion
|
|
275
|
+
//#region generated/server.ts
|
|
276
|
+
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
277
|
+
/* v8 ignore next -- generated normalization branch */
|
|
278
|
+
const defined = (values) => values.filter((value) => value !== void 0);
|
|
279
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
280
|
+
...identity,
|
|
281
|
+
...value
|
|
282
|
+
};
|
|
283
|
+
const facet = defineServerPlugin({
|
|
284
|
+
name: "@agimon-ai/po-help",
|
|
285
|
+
providerOverrides: composeServerProviderOverrides(root_server_default),
|
|
286
|
+
session: async (context) => {
|
|
287
|
+
const scopeSession = await root_server_default(context);
|
|
288
|
+
const contextSession = {
|
|
289
|
+
...context,
|
|
290
|
+
root: scopeSession.value
|
|
291
|
+
};
|
|
292
|
+
return {
|
|
293
|
+
...composeRootHooks(scopeSession),
|
|
294
|
+
get commands() {
|
|
295
|
+
return defined([via({ name: "doom-help" }, at(doom_help_server_default, contextSession))]);
|
|
296
|
+
},
|
|
297
|
+
get resources() {
|
|
298
|
+
return defined([
|
|
299
|
+
at(po_develop_native_extension_server_default, contextSession),
|
|
300
|
+
at(po_help_server_default, contextSession),
|
|
301
|
+
at(po_use_chatgpt_instructions_server_default, contextSession),
|
|
302
|
+
at(po_use_help_server_default, contextSession)
|
|
303
|
+
]);
|
|
304
|
+
},
|
|
305
|
+
get tools() {
|
|
306
|
+
return defined([via({ name: "help_status" }, at(help_status_server_default, contextSession))]);
|
|
307
|
+
},
|
|
308
|
+
services: [...scopeSession.services ?? []],
|
|
309
|
+
get activities() {
|
|
310
|
+
return [...scopeSession.activities ?? []];
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
//#endregion
|
|
316
|
+
export { facet as default, facet };
|
|
317
|
+
|
|
318
|
+
//# sourceMappingURL=server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["HELP_WHEN","HELP_WHEN","runtime","rootSession","commandDoomHelp","resourcePoDevelopNativeExtension","resourcePoHelp","resourcePoUseChatgptInstructions","resourcePoUseHelp","toolHelpStatus"],"sources":["../../src/constants/help.ts","../../src/schemas/diagnostics.ts","../../src/services/helpStatus/index.ts","../../src/services/helpServerSession/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/runtime.server.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/extensions/workspaces/sessions/(backend)/command/doom-help.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/po-develop-native-extension.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/po-help.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/po-use-chatgpt-instructions.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/po-use-help.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/help_status.server.ts","../../generated/server.ts"],"sourcesContent":["export const HELP_COMMAND_NAME = 'doom-help';\nexport const HELP_COMMAND_DESCRIPTION = 'Toggle Help guidance and read-only support diagnostics';\nexport const HELP_MODE_ID = 'help';\nexport const HELP_PACKAGE_SOURCE = '@agimon-ai/po-help';\nexport const HELP_SKILL = {\n name: 'po-use-help',\n description:\n 'Set up and debug Po agents using installed package guidance and scoped, read-only diagnostics. Diagnose missing capabilities before proposing authorized repairs.',\n} as const;\nexport const HELP_GUIDANCE =\n 'Help mode is active. Read po-use-help, inspect the available diagnostics, and use the narrowest package guidance for the task. Diagnose before proposing changes. Help does not grant additional permissions.';\nexport const HELP_STATUS_TOOL_NAME = 'help_status';\nexport const HELP_STATUS_TOOL_DESCRIPTION =\n 'Inspect active Help skills, diagnostic tools, contributor ownership, and unavailable contributions in this session. Read-only; does not change selection or permissions.';\nexport const HELP_STATUS_LIMIT = 128;\n\nexport const HELP_CHATGPT_SKILL = {\n name: 'po-use-chatgpt-instructions',\n description:\n \"Print a paste-ready ChatGPT project instruction (at most 8,000 characters) that routes code-mode work through this session's MCP tools and condenses every AGENTS.md rule. Writes no files.\",\n} as const;\n\nexport const HELP_NATIVE_SKILL = {\n name: 'po-develop-native-extension',\n description:\n \"Add or change a Po package's phone UI (.native files, native templates) so it mirrors the cockpit, passes the native build, and is approved and verified before it ships.\",\n} as const;\n","import { Type } from 'typebox';\n\nexport const helpStatusParameters = Type.Object({}, { additionalProperties: false });\n","import type { DoomHeadlessCapabilitySnapshot } from '@agimon-ai/po-core/headless';\nimport { DOOM_HELP_WHEN as HELP_WHEN } from '@agimon-ai/po-core/help';\nimport { defineTool } from '@agimon-ai/po-core/serverFacet';\n\nimport {\n HELP_GUIDANCE,\n HELP_MODE_ID,\n HELP_STATUS_LIMIT,\n HELP_STATUS_TOOL_DESCRIPTION,\n HELP_STATUS_TOOL_NAME,\n} from '../../constants/help';\nimport { helpStatusParameters } from '../../schemas/diagnostics';\nimport type { HelpStatusReport } from './type';\n\nexport function serverHelpStatus(snapshot: DoomHeadlessCapabilitySnapshot, enabled: boolean): HelpStatusReport {\n const entries = snapshot.capabilities.filter((entry) => entry.when?.state?.['minor-mode'] === HELP_MODE_ID);\n const skills = entries.filter((entry) => entry.kind === 'skill');\n const tools = entries.filter((entry) => entry.kind === 'tool');\n const diagnostics = entries\n .filter((entry) => enabled && entry.reason && entry.reason !== 'inactive')\n .map((entry) => ({ source: entry.source, code: `HELP_${entry.reason!.replaceAll('-', '_').toUpperCase()}` }));\n const ready = snapshot.ready;\n return {\n activation: !enabled ? 'inactive' : !ready ? 'activating' : diagnostics.length ? 'degraded' : 'active',\n ready,\n revision: snapshot.revision,\n counts: {\n skills: ready ? skills.filter((entry) => entry.active && entry.discoverable).length : null,\n tools: tools.filter((entry) => entry.active).length,\n },\n skills: skills.slice(0, HELP_STATUS_LIMIT).map(({ name, source, active, discoverable, reason }) => ({\n name,\n source,\n active: active && discoverable,\n ...(reason ? { reason } : {}),\n })),\n tools: tools\n .slice(0, HELP_STATUS_LIMIT)\n .map(({ name, source, active, reason }) => ({ name, source, active, ...(reason ? { reason } : {}) })),\n diagnostics: diagnostics.slice(0, HELP_STATUS_LIMIT),\n truncated:\n skills.length > HELP_STATUS_LIMIT || tools.length > HELP_STATUS_LIMIT || diagnostics.length > HELP_STATUS_LIMIT,\n };\n}\n\nexport function helpStatusDetail(report: HelpStatusReport): string {\n return `${report.counts.skills ?? 'pending'} Help skills, ${report.counts.tools} diagnostic tools${report.diagnostics.length ? ' (diagnostics available)' : ''}`;\n}\n\nexport function createHelpStatusTool(\n inspect: () => HelpStatusReport | Promise<HelpStatusReport>,\n authorize: (signal?: AbortSignal) => AbortSignal,\n) {\n return defineTool({\n name: HELP_STATUS_TOOL_NAME,\n description: HELP_STATUS_TOOL_DESCRIPTION,\n parameters: helpStatusParameters,\n when: HELP_WHEN,\n promptGuidelines: [HELP_GUIDANCE],\n async execute(_input, execution) {\n const signal = authorize(execution.signal);\n const report = await inspect();\n signal.throwIfAborted();\n authorize(execution.signal);\n return { content: [{ type: 'text', text: JSON.stringify(report, null, 2) }], details: report };\n },\n });\n}\n","import type { DoomHeadlessCommand, DoomHeadlessHostService, DoomHeadlessResource } from '@agimon-ai/po-core/headless';\nimport { DOOM_HELP_WHEN as HELP_WHEN } from '@agimon-ai/po-core/help';\nimport { type DoomServerSessionPlugin, packageResourcePath, readPackageResource } from '@agimon-ai/po-core/serverFacet';\nimport { defineMinorMode, serverMinorModes, type MinorModeOwner, type MinorModeState } from '@agimon-ai/po-minor-mode';\n\nimport {\n HELP_COMMAND_DESCRIPTION,\n HELP_COMMAND_NAME,\n HELP_GUIDANCE,\n HELP_MODE_ID,\n HELP_PACKAGE_SOURCE,\n HELP_CHATGPT_SKILL,\n HELP_NATIVE_SKILL,\n HELP_SKILL,\n} from '../../constants/help';\nimport { createHelpStatusTool, helpStatusDetail, serverHelpStatus } from '../helpStatus';\nexport function createHelpServerSession(host: DoomHeadlessHostService): DoomServerSessionPlugin {\n let modeOwner: MinorModeOwner | undefined;\n let pending: boolean | undefined;\n let failure: string | undefined;\n let generation = 0;\n let disposed = false;\n const active = () => (host.context.selection.state?.['minor-mode'] ?? []).includes(HELP_MODE_ID);\n const inspect = () => serverHelpStatus(host.inspectCapabilities(), active());\n const modeState = (): MinorModeState => {\n const report = inspect();\n return {\n activation: pending === true ? 'activating' : active() ? 'active' : 'inactive',\n condition:\n pending !== undefined || !report.ready\n ? 'queued'\n : failure\n ? 'failed'\n : report.activation === 'degraded'\n ? 'degraded'\n : 'ready',\n ...(pending !== undefined\n ? { detail: 'applying Help capabilities' }\n : failure\n ? { detail: failure }\n : active()\n ? { detail: helpStatusDetail(report) }\n : {}),\n actions: [\n {\n id: 'activate',\n enabled: !active() && pending === undefined,\n ...(!active() && pending === undefined ? {} : { disabledReason: 'Help is active or changing.' }),\n },\n {\n id: 'deactivate',\n enabled: active() || pending === true,\n ...(active() || pending === true ? {} : { disabledReason: 'Help mode is not active.' }),\n },\n ],\n };\n };\n const resources: DoomHeadlessResource[] = [\n { when: HELP_WHEN, name: 'po-help', kind: 'context', read: () => HELP_GUIDANCE },\n {\n when: HELP_WHEN,\n ...HELP_SKILL,\n kind: 'skill',\n path: packageResourcePath(import.meta.url, 'src/prompts/po-use-help/SKILL.md'),\n read: async () => {\n const text = await readPackageResource(import.meta.url, 'src/prompts/po-use-help/SKILL.md');\n if (!text.trim()) throw new Error('The installed Help skill is missing or unreadable.');\n return text;\n },\n },\n {\n when: HELP_WHEN,\n ...HELP_CHATGPT_SKILL,\n kind: 'skill',\n path: packageResourcePath(import.meta.url, 'src/prompts/po-use-chatgpt-instructions/SKILL.md'),\n read: async () => {\n const text = await readPackageResource(import.meta.url, 'src/prompts/po-use-chatgpt-instructions/SKILL.md');\n if (!text.trim()) throw new Error('The installed ChatGPT instruction skill is missing or unreadable.');\n return text;\n },\n },\n {\n when: HELP_WHEN,\n ...HELP_NATIVE_SKILL,\n kind: 'skill',\n path: packageResourcePath(import.meta.url, 'src/prompts/po-develop-native-extension/SKILL.md'),\n read: async () => {\n const text = await readPackageResource(import.meta.url, 'src/prompts/po-develop-native-extension/SKILL.md');\n if (!text.trim()) throw new Error('The installed native extension skill is missing or unreadable.');\n return text;\n },\n },\n ];\n const selectMode = async (enabled: boolean, signal?: AbortSignal): Promise<void> => {\n if (disposed) throw new Error('Help runtime is disposed.');\n signal?.throwIfAborted();\n const operation = ++generation;\n pending = enabled;\n failure = undefined;\n modeOwner?.publish();\n try {\n if (enabled) await resources[1]!.read(host.context);\n signal?.throwIfAborted();\n if (operation !== generation || disposed) throw new Error('Help activation was cancelled.');\n const modes = (host.context.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== HELP_MODE_ID);\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: enabled ? [...modes, HELP_MODE_ID] : modes,\n });\n } catch (error) {\n if (operation === generation) failure = (error instanceof Error ? error.message : String(error)).slice(0, 160);\n throw error;\n } finally {\n if (operation === generation) {\n pending = undefined;\n modeOwner?.publish();\n }\n }\n };\n const command: DoomHeadlessCommand = {\n name: HELP_COMMAND_NAME,\n description: HELP_COMMAND_DESCRIPTION,\n async execute(_args, execution) {\n await selectMode(!(pending ?? active()));\n await execution.client.notify({\n title: 'Po Help',\n body: active() ? 'Help mode activated.' : 'Help mode deactivated.',\n level: 'info',\n });\n },\n };\n modeOwner = defineMinorMode({\n descriptor: {\n source: HELP_PACKAGE_SOURCE,\n id: HELP_MODE_ID,\n label: 'Help',\n description: 'Package guidance and read-only diagnostics for agent setup and debugging.',\n order: 50,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Expose Help guidance and diagnostic tools.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Withdraw Help-only guidance and diagnostic tools.',\n contexts: ['headless'],\n parameters: [],\n },\n ],\n },\n state: modeState,\n async handleAction(_runtime, actionId, _argumentsValue, { signal }) {\n if (actionId !== 'activate' && actionId !== 'deactivate')\n throw new Error(`Unknown Help mode action: ${actionId}`);\n await selectMode(actionId === 'activate', signal);\n return { message: active() ? 'Help mode activated.' : 'Help mode deactivated.' };\n },\n }).createOwner(undefined);\n return {\n services: [serverMinorModes([modeOwner])],\n resources,\n commands: [command],\n tools: [\n createHelpStatusTool(inspect, (signal) => {\n signal?.throwIfAborted();\n host.assertActive(HELP_PACKAGE_SOURCE);\n if (disposed || !active()) throw new Error('Help mode is not active.');\n return signal ?? new AbortController().signal;\n }),\n ],\n onDispose() {\n disposed = true;\n generation += 1;\n },\n };\n}\n","import type { DoomServerPluginDefinition, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport { createHelpServerSession } from '../../../../../services/helpServerSession';\n\nexport default (({ agent }): Partial<DoomServerSessionPlugin> =>\n agent ? createHelpServerSession(agent) : {}) satisfies NonNullable<DoomServerPluginDefinition['session']>;\n","import { defineRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/po-core/serverFacet';\n\nimport runtime from './_lib/runtime.server';\n\nexport default defineRoot((context: DoomServerPluginContext) => {\n const value = runtime(context);\n return {\n value,\n services: value.services,\n activities: value.activities,\n onStart: value.onStart,\n onStop: value.onStop,\n onDispose: value.onDispose,\n };\n});\n","import { defineRoutedContribution, type WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, Partial<DoomServerSessionPlugin>>) => context.root.commands?.[0],\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution, type WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, Partial<DoomServerSessionPlugin>>) => context.root.resources?.[3],\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution, type WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, Partial<DoomServerSessionPlugin>>) => context.root.resources?.[0],\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution, type WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, Partial<DoomServerSessionPlugin>>) => context.root.resources?.[2],\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution, type WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, Partial<DoomServerSessionPlugin>>) => context.root.resources?.[1],\n { cardinality: 'optional' },\n);\n","import { defineRoutedContribution, type WithRoot } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomServerPluginContext, DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nexport default defineRoutedContribution(\n (context: WithRoot<DoomServerPluginContext, Partial<DoomServerSessionPlugin>>) => context.root.tools?.[0],\n { cardinality: 'optional' },\n);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\nimport { composeServerProviderOverrides } from '@agimon-ai/po-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/po-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport commandDoomHelp from '../src/extensions/workspaces/sessions/(backend)/command/doom-help.server';\nimport resourcePoDevelopNativeExtension from '../src/extensions/workspaces/sessions/(backend)/resource/po-develop-native-extension.server';\nimport resourcePoHelp from '../src/extensions/workspaces/sessions/(backend)/resource/po-help.server';\nimport resourcePoUseChatgptInstructions from '../src/extensions/workspaces/sessions/(backend)/resource/po-use-chatgpt-instructions.server';\nimport resourcePoUseHelp from '../src/extensions/workspaces/sessions/(backend)/resource/po-use-help.server';\nimport toolHelpStatus from '../src/extensions/workspaces/sessions/(backend)/tool/help_status.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\n/* v8 ignore next -- generated normalization branch */\nconst defined = <T>(values: readonly (T | undefined)[]): T[] =>\n values.filter((value): value is T => value !== undefined);\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/po-help',\n providerOverrides: composeServerProviderOverrides(rootSession),\n session: async (context) => {\n const scopeSession = await rootSession(context);\n const contextSession = { ...context, root: scopeSession.value };\n return {\n ...composeRootHooks(scopeSession),\n get commands(): DoomServerSessionPlugin['commands'] { return defined([via({ name: 'doom-help' }, at(commandDoomHelp, contextSession))]); },\n get resources(): DoomServerSessionPlugin['resources'] { return defined([at(resourcePoDevelopNativeExtension, contextSession), at(resourcePoHelp, contextSession), at(resourcePoUseChatgptInstructions, contextSession), at(resourcePoUseHelp, contextSession)]); },\n get tools(): DoomServerSessionPlugin['tools'] { return defined([via({ name: 'help_status' }, at(toolHelpStatus, contextSession))]); },\n services: [...(scopeSession.services ?? [])],\n get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n };\n },\n});\n\nexport default facet;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { defineLeaderBinding, defineMinorModeFile, defineToolRenderer, defineWebPlugin } from "@agimon-ai/po-core/web";
|
|
2
|
+
import { MessageItem, MessageItemBody, MessageItemHeader, MessageItemStatus, MessageLines, collapseLines, toolTone } from "@agimon-ai/po-web-components";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/extensions/workspaces/sessions/(frontend)/leader/toggle.web.ts
|
|
5
|
+
var toggle_web_default = defineLeaderBinding({
|
|
6
|
+
path: [{
|
|
7
|
+
key: "h",
|
|
8
|
+
label: "help",
|
|
9
|
+
detail: "package docs and logs"
|
|
10
|
+
}, {
|
|
11
|
+
key: "e",
|
|
12
|
+
label: "toggle",
|
|
13
|
+
detail: "load or hide package Help"
|
|
14
|
+
}],
|
|
15
|
+
command: "minor help"
|
|
16
|
+
});
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/extensions/workspaces/sessions/(frontend)/mode/help/mode.web.ts
|
|
19
|
+
var mode_web_default = defineMinorModeFile({
|
|
20
|
+
keys: "h e",
|
|
21
|
+
order: 10
|
|
22
|
+
});
|
|
23
|
+
//#endregion
|
|
24
|
+
//#region src/extensions/workspaces/sessions/(frontend)/tool/_components/HelpStatusCard.tsx
|
|
25
|
+
function HelpStatusCard({ toolName, output, running, isError }) {
|
|
26
|
+
const lines = output.split("\n").filter(Boolean).map((text) => ({
|
|
27
|
+
text,
|
|
28
|
+
tone: "text"
|
|
29
|
+
}));
|
|
30
|
+
return /* @__PURE__ */ jsx(MessageItem, {
|
|
31
|
+
tone: toolTone({
|
|
32
|
+
running,
|
|
33
|
+
isError
|
|
34
|
+
}),
|
|
35
|
+
expandable: lines.length > 12,
|
|
36
|
+
children: ({ expanded }) => {
|
|
37
|
+
const view = collapseLines(lines, 12, expanded);
|
|
38
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(MessageItemHeader, {
|
|
39
|
+
title: toolName,
|
|
40
|
+
children: "Help diagnostics"
|
|
41
|
+
}), /* @__PURE__ */ jsxs(MessageItemBody, { children: [
|
|
42
|
+
/* @__PURE__ */ jsx(MessageLines, { lines: view.shown }),
|
|
43
|
+
view.hidden > 0 ? /* @__PURE__ */ jsxs(MessageItemStatus, {
|
|
44
|
+
expands: true,
|
|
45
|
+
children: [view.hidden, " more lines"]
|
|
46
|
+
}) : null,
|
|
47
|
+
running ? /* @__PURE__ */ jsx(MessageItemStatus, {
|
|
48
|
+
tone: "running",
|
|
49
|
+
children: "Inspecting this session"
|
|
50
|
+
}) : null,
|
|
51
|
+
isError ? /* @__PURE__ */ jsx(MessageItemStatus, {
|
|
52
|
+
tone: "error",
|
|
53
|
+
children: "Diagnostic unavailable"
|
|
54
|
+
}) : null
|
|
55
|
+
] })] });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/extensions/workspaces/sessions/(frontend)/tool/help-status.web.tsx
|
|
61
|
+
var help_status_web_default = defineToolRenderer({
|
|
62
|
+
tools: ["help_status", "diagnose_setup"],
|
|
63
|
+
message: HelpStatusCard
|
|
64
|
+
});
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region generated/web.ts
|
|
67
|
+
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
68
|
+
...identity,
|
|
69
|
+
...value
|
|
70
|
+
};
|
|
71
|
+
const webPlugin = defineWebPlugin({
|
|
72
|
+
id: "help",
|
|
73
|
+
session: {
|
|
74
|
+
get leaderBindings() {
|
|
75
|
+
return [via({ id: "help.toggle" }, toggle_web_default)];
|
|
76
|
+
},
|
|
77
|
+
get minorModes() {
|
|
78
|
+
return [via({ name: "help" }, mode_web_default)];
|
|
79
|
+
},
|
|
80
|
+
get toolRenderers() {
|
|
81
|
+
return [via({ tools: ["help_status"] }, help_status_web_default)];
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
//#endregion
|
|
86
|
+
export { webPlugin };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=web.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.mjs","names":["leaderToggle","modeHelp","toolHelpStatus"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/leader/toggle.web.ts","../../src/extensions/workspaces/sessions/(frontend)/mode/help/mode.web.ts","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/HelpStatusCard.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/help-status.web.tsx","../../generated/web.ts"],"sourcesContent":["import { defineLeaderBinding } from '@agimon-ai/po-core/web';\n\nexport default defineLeaderBinding({\n path: [\n { key: 'h', label: 'help', detail: 'package docs and logs' },\n { key: 'e', label: 'toggle', detail: 'load or hide package Help' },\n ],\n command: 'minor help',\n});\n","import { defineMinorModeFile } from '@agimon-ai/po-core/web';\n\nexport default defineMinorModeFile({ keys: 'h e', order: 10 });\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport {\n collapseLines,\n MessageItem,\n MessageItemBody,\n MessageItemHeader,\n MessageItemStatus,\n MessageLines,\n toolTone,\n} from '@agimon-ai/po-web-components';\n\nexport function HelpStatusCard({ toolName, output, running, isError }: ToolMessageRenderProps) {\n const lines = output\n .split('\\n')\n .filter(Boolean)\n .map((text) => ({ text, tone: 'text' as const }));\n return (\n <MessageItem tone={toolTone({ running, isError })} expandable={lines.length > 12}>\n {({ expanded }) => {\n const view = collapseLines(lines, 12, expanded);\n return (\n <>\n <MessageItemHeader title={toolName}>Help diagnostics</MessageItemHeader>\n <MessageItemBody>\n <MessageLines lines={view.shown} />\n {view.hidden > 0 ? <MessageItemStatus expands>{view.hidden} more lines</MessageItemStatus> : null}\n {running ? <MessageItemStatus tone=\"running\">Inspecting this session</MessageItemStatus> : null}\n {isError ? <MessageItemStatus tone=\"error\">Diagnostic unavailable</MessageItemStatus> : null}\n </MessageItemBody>\n </>\n );\n }}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { HelpStatusCard } from './_components/HelpStatusCard';\n\nexport default defineToolRenderer({ tools: ['help_status', 'diagnose_setup'], message: HelpStatusCard });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport leaderToggle from '../src/extensions/workspaces/sessions/(frontend)/leader/toggle.web';\nimport modeHelp from '../src/extensions/workspaces/sessions/(frontend)/mode/help/mode.web';\nimport toolHelpStatus from '../src/extensions/workspaces/sessions/(frontend)/tool/help-status.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'help',\n session: {\n get leaderBindings(): WebPluginContributions['leaderBindings'] { return [via({ id: 'help.toggle' }, leaderToggle)]; },\n get minorModes(): WebPluginContributions['minorModes'] { return [via({ name: 'help' }, modeHelp)]; },\n get toolRenderers(): WebPluginContributions['toolRenderers'] { return [via({ tools: ['help_status'] }, toolHelpStatus)]; },\n },\n});\n"],"mappings":";;;;AAEA,IAAA,qBAAe,oBAAoB;CACjC,MAAM,CACJ;EAAE,KAAK;EAAK,OAAO;EAAQ,QAAQ;CAAwB,GAC3D;EAAE,KAAK;EAAK,OAAO;EAAU,QAAQ;CAA4B,CACnE;CACA,SAAS;AACX,CAAC;;;ACND,IAAA,mBAAe,oBAAoB;CAAE,MAAM;CAAO,OAAO;AAAG,CAAC;;;ACS7D,SAAgB,eAAe,EAAE,UAAU,QAAQ,SAAS,WAAmC;CAC7F,MAAM,QAAQ,OACX,MAAM,IAAI,CAAC,CACX,OAAO,OAAO,CAAC,CACf,KAAK,UAAU;EAAE;EAAM,MAAM;CAAgB,EAAE;CAClD,OACE,oBAAC,aAAD;EAAa,MAAM,SAAS;GAAE;GAAS;EAAQ,CAAC;EAAG,YAAY,MAAM,SAAS;EAC1E,WAAA,EAAE,eAAe;GACjB,MAAM,OAAO,cAAc,OAAO,IAAI,QAAQ;GAC9C,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,mBAAD;IAAmB,OAAO;IAAU,UAAA;GAAmC,CAAA,GACvE,qBAAC,iBAAD,EAAA,UAAA;IACE,oBAAC,cAAD,EAAc,OAAO,KAAK,MAAQ,CAAA;IACjC,KAAK,SAAS,IAAI,qBAAC,mBAAD;KAAmB,SAAA;KAAnB,UAAA,CAA4B,KAAK,QAAO,aAA8B;IAAI,CAAA,IAAA;IAC5F,UAAU,oBAAC,mBAAD;KAAmB,MAAK;KAAU,UAAA;IAA0C,CAAA,IAAI;IAC1F,UAAU,oBAAC,mBAAD;KAAmB,MAAK;KAAQ,UAAA;IAAyC,CAAA,IAAI;GACzE,EAAA,CAAA,CACjB,EAAA,CAAA;EAEN;CACW,CAAA;AAEjB;;;AC9BA,IAAA,0BAAe,mBAAmB;CAAE,OAAO,CAAC,eAAe,gBAAgB;CAAG,SAAS;AAAe,CAAC;;;ACGvG,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,YAAY,gBAAgB;CACvC,IAAI;CACJ,SAAS;EACP,IAAI,iBAA2D;GAAE,OAAO,CAAC,IAAI,EAAE,IAAI,cAAc,GAAGA,kBAAY,CAAC;EAAG;EACpH,IAAI,aAAmD;GAAE,OAAO,CAAC,IAAI,EAAE,MAAM,OAAO,GAAGC,gBAAQ,CAAC;EAAG;EACnG,IAAI,gBAAyD;GAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,GAAGC,uBAAc,CAAC;EAAG;CAC3H;AACF,CAAC"}
|