@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.
@@ -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"}