@agimon-ai/po-ui 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.
Files changed (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/apiContracts.cjs +17 -0
  4. package/dist/apiContracts.cjs.map +1 -0
  5. package/dist/apiContracts.d.mts +53 -0
  6. package/dist/apiContracts.d.mts.map +1 -0
  7. package/dist/apiContracts.mjs +13 -0
  8. package/dist/apiContracts.mjs.map +1 -0
  9. package/dist/config.cjs +62 -0
  10. package/dist/config.d.mts +2 -0
  11. package/dist/config.mjs +2 -0
  12. package/dist/extensionName.cjs +59 -0
  13. package/dist/extensionName.cjs.map +1 -0
  14. package/dist/extensionName.d.mts +14 -0
  15. package/dist/extensionName.d.mts.map +1 -0
  16. package/dist/extensionName.mjs +54 -0
  17. package/dist/extensionName.mjs.map +1 -0
  18. package/dist/extensions/mcp-ui.mjs +46 -0
  19. package/dist/extensions/mcp-ui.mjs.map +1 -0
  20. package/dist/extensions/mcp.cjs +79 -0
  21. package/dist/extensions/mcp.cjs.map +1 -0
  22. package/dist/extensions/mcp.d.mts +5 -0
  23. package/dist/extensions/mcp.d.mts.map +1 -0
  24. package/dist/extensions/mcp.mjs +74 -0
  25. package/dist/extensions/mcp.mjs.map +1 -0
  26. package/dist/extensions/server.cjs +137 -0
  27. package/dist/extensions/server.cjs.map +1 -0
  28. package/dist/extensions/server.d.mts +5 -0
  29. package/dist/extensions/server.d.mts.map +1 -0
  30. package/dist/extensions/server.mjs +132 -0
  31. package/dist/extensions/server.mjs.map +1 -0
  32. package/dist/extensions/web.mjs +332 -0
  33. package/dist/extensions/web.mjs.map +1 -0
  34. package/dist/footer.cjs +26 -0
  35. package/dist/footer.d.mts +2 -0
  36. package/dist/footer.mjs +2 -0
  37. package/dist/harnessMetadata-CzsdGAxL.d.mts +21 -0
  38. package/dist/harnessMetadata-CzsdGAxL.d.mts.map +1 -0
  39. package/dist/harnessMetadata-DkMSJutN.mjs +25 -0
  40. package/dist/harnessMetadata-DkMSJutN.mjs.map +1 -0
  41. package/dist/harnessMetadata-Dw9Rb1nW.cjs +30 -0
  42. package/dist/harnessMetadata-Dw9Rb1nW.cjs.map +1 -0
  43. package/dist/harnessMetadata.cjs +3 -0
  44. package/dist/harnessMetadata.d.mts +2 -0
  45. package/dist/harnessMetadata.mjs +2 -0
  46. package/dist/index-Bx49wmE7.d.mts +30 -0
  47. package/dist/index-Bx49wmE7.d.mts.map +1 -0
  48. package/dist/index-Dpzvl-vg.d.mts +103 -0
  49. package/dist/index-Dpzvl-vg.d.mts.map +1 -0
  50. package/dist/index.cjs +12 -0
  51. package/dist/index.d.mts +8 -0
  52. package/dist/index.mjs +5 -0
  53. package/dist/leader.cjs +0 -0
  54. package/dist/leader.d.mts +2 -0
  55. package/dist/leader.mjs +1 -0
  56. package/dist/leaderRegistry.cjs +515 -0
  57. package/dist/leaderRegistry.cjs.map +1 -0
  58. package/dist/leaderRegistry.d.mts +59 -0
  59. package/dist/leaderRegistry.d.mts.map +1 -0
  60. package/dist/leaderRegistry.mjs +514 -0
  61. package/dist/leaderRegistry.mjs.map +1 -0
  62. package/dist/logSinkTelemetry.cjs +4 -0
  63. package/dist/logSinkTelemetry.d.mts +2 -0
  64. package/dist/logSinkTelemetry.mjs +2 -0
  65. package/dist/rolldown-runtime-VH7oDXx4.cjs +28 -0
  66. package/dist/skills.cjs +38 -0
  67. package/dist/skills.d.mts +2 -0
  68. package/dist/skills.mjs +2 -0
  69. package/dist/telemetry--EgKB9ei.mjs +36 -0
  70. package/dist/telemetry--EgKB9ei.mjs.map +1 -0
  71. package/dist/telemetry-DMR6cIT1.cjs +47 -0
  72. package/dist/telemetry-DMR6cIT1.cjs.map +1 -0
  73. package/dist/theme-2wveit5V.cjs +166 -0
  74. package/dist/theme-2wveit5V.cjs.map +1 -0
  75. package/dist/theme-Byj_dBlT.mjs +134 -0
  76. package/dist/theme-Byj_dBlT.mjs.map +1 -0
  77. package/dist/theme.cjs +7 -0
  78. package/dist/theme.d.mts +2 -0
  79. package/dist/theme.mjs +2 -0
  80. package/dist/toolInventory.cjs +20 -0
  81. package/dist/toolInventory.d.mts +2 -0
  82. package/dist/toolInventory.mjs +2 -0
  83. package/dist/uiState-Binu4nUb.d.mts +40 -0
  84. package/dist/uiState-Binu4nUb.d.mts.map +1 -0
  85. package/dist/uiState-G_Pso-5i.mjs +57 -0
  86. package/dist/uiState-G_Pso-5i.mjs.map +1 -0
  87. package/dist/uiState-rUwgKslb.cjs +68 -0
  88. package/dist/uiState-rUwgKslb.cjs.map +1 -0
  89. package/dist/uiState.cjs +4 -0
  90. package/dist/uiState.d.mts +2 -0
  91. package/dist/uiState.mjs +2 -0
  92. package/package.json +196 -0
  93. package/themes/po-dark.json +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.mjs","names":["toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\n// Pi's `outputSchema` is a TypeBox schema, not an MCP output schema, so it stays off the MCP surface.\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Create or fully overwrite a file in the Po session's repository on the host machine, creating parent folders. Use this server's edit tool to change part of an existing file.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createFindTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Find files by name or glob pattern in the Po session's repository on the host machine (locate paths). Respects .gitignore. Up to 1000 results by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createLsTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"List a directory in the Po session's repository on the host machine (folder contents). Sorted, directories end with '/', dotfiles included. Up to 500 entries by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\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;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/po-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/po-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;AAMA,SAAgB,mBACd,SACoE;CACpE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,gBAAgB,QAAQ,UAAU,GAAG;CACtF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,yBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,yBAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,eAAe,QAAQ,UAAU,GAAG;CACrF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,yBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,yBAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,aAAa,QAAQ,UAAU,GAAG;CACnF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,yBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,yBAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;;;ACjEA,IAAA,mBAAe,cAAoE,iBAAiB;;;ACApG,IAAA,iBAAe,cAAoE,eAAe;;;ACAlG,IAAA,oBAAe,cAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,WAAW,yBAAyB,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGA,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,uBAAuB,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,0BAA0B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC9S;AACF,CAAC"}
@@ -0,0 +1,137 @@
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ let _agimon_ai_po_core_serverFacet = require("@agimon-ai/po-core/serverFacet");
6
+ let _agimon_ai_po_core_extensionFile = require("@agimon-ai/po-core/extensionFile");
7
+ let _agimon_ai_po_core_headless = require("@agimon-ai/po-core/headless");
8
+ let _earendil_works_pi_coding_agent = require("@earendil-works/pi-coding-agent");
9
+ //#region src/constants/ui.ts
10
+ const TOOLS_COMMAND = "tools";
11
+ //#endregion
12
+ //#region src/services/sessionToolInventory/index.ts
13
+ function toolNames(entries) {
14
+ const names = /* @__PURE__ */ new Set();
15
+ for (const entry of entries) {
16
+ const message = entry.message;
17
+ if (!message || typeof message !== "object" || Array.isArray(message)) continue;
18
+ const content = message.content;
19
+ if (!Array.isArray(content)) continue;
20
+ for (const block of content) {
21
+ if (!block || typeof block !== "object" || Array.isArray(block)) continue;
22
+ const name = block.name;
23
+ if (typeof name === "string" && name) names.add(name);
24
+ }
25
+ }
26
+ return [...names].sort();
27
+ }
28
+ //#endregion
29
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts
30
+ /**
31
+ * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed
32
+ * from session data rather than silently installing a fake editor/widget host.
33
+ *
34
+ * Inventory is a command, never a context resource. It reports the tools observed
35
+ * in the transcript, which is not the tool surface the current selection exposes:
36
+ * as a prompt section it listed tools the session had since gated out, directly
37
+ * contradicting the `Available tools:` block, and it grew for the whole session.
38
+ */
39
+ function createUiServerContributions() {
40
+ return { commands: [{
41
+ name: TOOLS_COMMAND,
42
+ description: "Show tools observed in this headless session. TUI rendering remains unavailable.",
43
+ async execute(_args, execution) {
44
+ await execution.client.notify({
45
+ title: "Po tools",
46
+ body: toolNames(await execution.session.entries({ type: "message" })).join("\n") || "(no tool calls recorded in this session)",
47
+ level: "info"
48
+ });
49
+ }
50
+ }] };
51
+ }
52
+ //#endregion
53
+ //#region src/extensions/workspaces/sessions/(backend)/command/tools.server.ts
54
+ var tools_server_default = (0, _agimon_ai_po_core_extensionFile.defineServerCommand)(createUiServerContributions().commands[0]);
55
+ //#endregion
56
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts
57
+ function createServerWriteTool() {
58
+ const { label, description, parameters, promptSnippet, promptGuidelines } = (0, _earendil_works_pi_coding_agent.createWriteToolDefinition)(".");
59
+ return {
60
+ name: "write",
61
+ label,
62
+ description,
63
+ parameters,
64
+ promptSnippet,
65
+ promptGuidelines,
66
+ async execute(toolCallId, parameters, signal, onUpdate, execution) {
67
+ const tool = (0, _earendil_works_pi_coding_agent.createWriteTool)(execution.cwd);
68
+ return (0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(partial)))));
69
+ }
70
+ };
71
+ }
72
+ function createServerFindTool() {
73
+ const { label, description, parameters, promptSnippet, promptGuidelines } = (0, _earendil_works_pi_coding_agent.createFindToolDefinition)(".");
74
+ return {
75
+ name: "find",
76
+ label,
77
+ description,
78
+ parameters,
79
+ promptSnippet,
80
+ promptGuidelines,
81
+ async execute(toolCallId, parameters, signal, onUpdate, execution) {
82
+ const tool = (0, _earendil_works_pi_coding_agent.createFindTool)(execution.cwd);
83
+ return (0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(partial)))));
84
+ }
85
+ };
86
+ }
87
+ function createServerLsTool() {
88
+ const { label, description, parameters, promptSnippet, promptGuidelines } = (0, _earendil_works_pi_coding_agent.createLsToolDefinition)(".");
89
+ return {
90
+ name: "ls",
91
+ label,
92
+ description,
93
+ parameters,
94
+ promptSnippet,
95
+ promptGuidelines,
96
+ async execute(toolCallId, parameters, signal, onUpdate, execution) {
97
+ const tool = (0, _earendil_works_pi_coding_agent.createLsTool)(execution.cwd);
98
+ return (0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(partial)))));
99
+ }
100
+ };
101
+ }
102
+ //#endregion
103
+ //#region src/extensions/workspaces/sessions/(backend)/tool/find.server.ts
104
+ var find_server_default = (0, _agimon_ai_po_core_extensionFile.defineServerTool)(createServerFindTool);
105
+ //#endregion
106
+ //#region src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts
107
+ var ls_server_default = (0, _agimon_ai_po_core_extensionFile.defineServerTool)(createServerLsTool);
108
+ //#endregion
109
+ //#region src/extensions/workspaces/sessions/(backend)/tool/write.server.ts
110
+ var write_server_default = (0, _agimon_ai_po_core_extensionFile.defineServerTool)(createServerWriteTool);
111
+ //#endregion
112
+ //#region generated/server.ts
113
+ const at = (value, context) => typeof value === "function" ? value(context) : value;
114
+ const via = (identity, value) => value === void 0 ? void 0 : {
115
+ ...identity,
116
+ ...value
117
+ };
118
+ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
119
+ name: "@agimon-ai/po-ui",
120
+ session: (context) => ({
121
+ get commands() {
122
+ return [via({ name: "tools" }, at(tools_server_default, context))];
123
+ },
124
+ get tools() {
125
+ return [
126
+ via({ name: "find" }, at(find_server_default, context)),
127
+ via({ name: "ls" }, at(ls_server_default, context)),
128
+ via({ name: "write" }, at(write_server_default, context))
129
+ ];
130
+ }
131
+ })
132
+ });
133
+ //#endregion
134
+ exports.default = facet;
135
+ exports.facet = facet;
136
+
137
+ //# sourceMappingURL=server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.cjs","names":["defineServerCommand","createWriteToolDefinition","createWriteTool","toDoomHeadlessToolResult","createFindToolDefinition","createFindTool","createLsToolDefinition","createLsTool","defineServerTool","defineServerTool","defineServerTool","defineServerPlugin","commandTools","toolFind","toolLs","toolWrite"],"sources":["../../src/constants/ui.ts","../../src/services/sessionToolInventory/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts","../../src/extensions/workspaces/sessions/(backend)/command/tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.server.ts","../../generated/server.ts"],"sourcesContent":["export const LEADER_WIDGET_KEY = 'po-leader';\nexport const TUI_MODE = 'tui';\nexport const WIDGET_PLACEMENT = 'belowEditor';\nexport const WARNING_STYLE = 'warning';\nexport const THEME_ENVIRONMENT_KEY = 'PO_THEME';\nexport const HOTKEYS_COMMAND = 'hotkeys';\nexport const TOOLS_COMMAND = 'tools';\nexport const CONFIG_COMMAND = 'config';\nexport const SESSION_START_EVENT = 'session_start';\nexport const SESSION_MESSAGE_ENTRY = 'message';\nexport const INPUT_EVENT = 'input';\nexport const INTERACTIVE_INPUT_SOURCE = 'interactive';\nexport const TITLE_MESSAGE_MAX_LENGTH = 64;\nexport const TITLE_PREFIX = 'po';\nexport const BUILTIN_LEADER_COMMANDS: readonly string[] = [HOTKEYS_COMMAND];\nexport const PACKAGE_SOURCE = '@agimon-ai/po-ui';\n","export function toolNames(entries: readonly Record<string, unknown>[]): string[] {\n const names = new Set<string>();\n for (const entry of entries) {\n const message = entry.message;\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue;\n const content = (message as { content?: unknown }).content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (!block || typeof block !== 'object' || Array.isArray(block)) continue;\n const name = (block as { name?: unknown }).name;\n if (typeof name === 'string' && name) names.add(name);\n }\n }\n return [...names].sort();\n}\n","import type { DoomHeadlessCommand } from '@agimon-ai/po-core/headless';\nimport type { DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport { TOOLS_COMMAND } from '../../../../../constants/ui';\nimport { toolNames } from '../../../../../services/sessionToolInventory';\n\n/**\n * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed\n * from session data rather than silently installing a fake editor/widget host.\n *\n * Inventory is a command, never a context resource. It reports the tools observed\n * in the transcript, which is not the tool surface the current selection exposes:\n * as a prompt section it listed tools the session had since gated out, directly\n * contradicting the `Available tools:` block, and it grew for the whole session.\n */\nexport function createUiServerContributions(): DoomServerSessionPlugin {\n return {\n commands: [\n {\n name: TOOLS_COMMAND,\n description: 'Show tools observed in this headless session. TUI rendering remains unavailable.',\n async execute(_args, execution) {\n await execution.client.notify({\n title: 'Po tools',\n body:\n toolNames(await execution.session.entries({ type: 'message' })).join('\\n') ||\n '(no tool calls recorded in this session)',\n level: 'info',\n });\n },\n } satisfies DoomHeadlessCommand,\n ],\n };\n}\n","import { defineServerCommand } from '@agimon-ai/po-core/extensionFile';\n\nimport { createUiServerContributions } from '../_lib/sessionInventory';\n\nexport default defineServerCommand(createUiServerContributions().commands![0]!);\n","import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport {\n createWriteToolDefinition,\n createWriteTool,\n createFindToolDefinition,\n createFindTool,\n createLsToolDefinition,\n createLsTool,\n} from '@earendil-works/pi-coding-agent';\n\n// Preserve the SDK schemas and prompt guidance, but never import terminal renderers\n// into Po's native tool declarations. Execution resolves cwd for each call, including\n// a child session or a session whose working directory differs from process.cwd().\n\nexport function createServerWriteTool(): DoomHeadlessTool<ReturnType<typeof createWriteToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition('.');\n return {\n name: 'write',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createWriteTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerFindTool(): DoomHeadlessTool<ReturnType<typeof createFindToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition('.');\n return {\n name: 'find',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createFindTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerLsTool(): DoomHeadlessTool<ReturnType<typeof createLsToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition('.');\n return {\n name: 'ls',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createLsTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerFindTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerFindTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerLsTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerLsTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerWriteTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport commandTools from '../src/extensions/workspaces/sessions/(backend)/command/tools.server';\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.server';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.server';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.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;\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-ui',\n session: (context) => ({\n get commands(): DoomServerSessionPlugin['commands'] { return [via({ name: 'tools' }, at(commandTools, context))]; },\n get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }),\n});\n\nexport default facet;\n"],"mappings":";;;;;;;;;AAMA,MAAa,gBAAgB;;;ACN7B,SAAgB,UAAU,SAAuD;CAC/E,MAAM,wBAAQ,IAAI,IAAY;CAC9B,KAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,UAAU,MAAM;EACtB,IAAI,CAAC,WAAW,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;EACvE,MAAM,UAAW,QAAkC;EACnD,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;EAC7B,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;GACjE,MAAM,OAAQ,MAA6B;GAC3C,IAAI,OAAO,SAAS,YAAY,MAAM,MAAM,IAAI,IAAI;EACtD;CACF;CACA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK;AACzB;;;;;;;;;;;;ACCA,SAAgB,8BAAuD;CACrE,OAAO,EACL,UAAU,CACR;EACE,MAAM;EACN,aAAa;EACb,MAAM,QAAQ,OAAO,WAAW;GAC9B,MAAM,UAAU,OAAO,OAAO;IAC5B,OAAO;IACP,MACE,UAAU,MAAM,UAAU,QAAQ,QAAQ,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KACzE;IACF,OAAO;GACT,CAAC;EACH;CACF,CACF,EACF;AACF;;;AC7BA,IAAA,wBAAA,GAAeA,iCAAAA,oBAAAA,CAAoB,4BAA4B,CAAC,CAAC,SAAU,EAAG;;;ACU9E,SAAgB,wBAAsG;CACpH,MAAM,EAAE,OAAO,aAAa,YAAY,eAAe,sBAAA,GAAqBC,gCAAAA,0BAAAA,CAA0B,GAAG;CACzG,OAAO;EACL,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU,WAAW;GACjE,MAAM,QAAA,GAAOC,gCAAAA,gBAAAA,CAAgB,UAAU,GAAG;GAC1C,QAAA,GAAOC,4BAAAA,yBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,QACA,cAAc,YAAY,UAAA,GAASA,4BAAAA,yBAAAA,CAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,uBAAoG;CAClH,MAAM,EAAE,OAAO,aAAa,YAAY,eAAe,sBAAA,GAAqBC,gCAAAA,yBAAAA,CAAyB,GAAG;CACxG,OAAO;EACL,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU,WAAW;GACjE,MAAM,QAAA,GAAOC,gCAAAA,eAAAA,CAAe,UAAU,GAAG;GACzC,QAAA,GAAOF,4BAAAA,yBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,QACA,cAAc,YAAY,UAAA,GAASA,4BAAAA,yBAAAA,CAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,qBAAgG;CAC9G,MAAM,EAAE,OAAO,aAAa,YAAY,eAAe,sBAAA,GAAqBG,gCAAAA,uBAAAA,CAAuB,GAAG;CACtG,OAAO;EACL,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU,WAAW;GACjE,MAAM,QAAA,GAAOC,gCAAAA,aAAAA,CAAa,UAAU,GAAG;GACvC,QAAA,GAAOJ,4BAAAA,yBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,QACA,cAAc,YAAY,UAAA,GAASA,4BAAAA,yBAAAA,CAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;;;AC5EA,IAAA,uBAAA,GAAeK,iCAAAA,iBAAAA,CAAiD,oBAAoB;;;ACApF,IAAA,qBAAA,GAAeC,iCAAAA,iBAAAA,CAAiD,kBAAkB;;;ACAlF,IAAA,wBAAA,GAAeC,iCAAAA,iBAAAA,CAAiD,qBAAqB;;;ACIrF,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,SAAA,GAAQC,+BAAAA,mBAAAA,CAAmB;CACtC,MAAM;CACN,UAAU,aAAa;EACrB,IAAI,WAAgD;GAAE,OAAO,CAAC,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,sBAAc,OAAO,CAAC,CAAC;EAAG;EAClH,IAAI,QAA0C;GAAE,OAAO;IAAC,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGC,qBAAU,OAAO,CAAC;IAAG,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,mBAAQ,OAAO,CAAC;IAAG,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,sBAAW,OAAO,CAAC;GAAC;EAAG;CACnM;AACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ //#region generated/server.d.ts
2
+ export declare const facet: import("@agimon-ai/po-core/serverFacet").DoomServerFacet;
3
+ //#endregion
4
+ export { facet as default };
5
+ //# sourceMappingURL=server.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAca,gDAAK"}
@@ -0,0 +1,132 @@
1
+ import { defineServerPlugin } from "@agimon-ai/po-core/serverFacet";
2
+ import { defineServerCommand, defineServerTool } from "@agimon-ai/po-core/extensionFile";
3
+ import { toDoomHeadlessToolResult } from "@agimon-ai/po-core/headless";
4
+ import { createFindTool, createFindToolDefinition, createLsTool, createLsToolDefinition, createWriteTool, createWriteToolDefinition } from "@earendil-works/pi-coding-agent";
5
+ //#region src/constants/ui.ts
6
+ const TOOLS_COMMAND = "tools";
7
+ //#endregion
8
+ //#region src/services/sessionToolInventory/index.ts
9
+ function toolNames(entries) {
10
+ const names = /* @__PURE__ */ new Set();
11
+ for (const entry of entries) {
12
+ const message = entry.message;
13
+ if (!message || typeof message !== "object" || Array.isArray(message)) continue;
14
+ const content = message.content;
15
+ if (!Array.isArray(content)) continue;
16
+ for (const block of content) {
17
+ if (!block || typeof block !== "object" || Array.isArray(block)) continue;
18
+ const name = block.name;
19
+ if (typeof name === "string" && name) names.add(name);
20
+ }
21
+ }
22
+ return [...names].sort();
23
+ }
24
+ //#endregion
25
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts
26
+ /**
27
+ * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed
28
+ * from session data rather than silently installing a fake editor/widget host.
29
+ *
30
+ * Inventory is a command, never a context resource. It reports the tools observed
31
+ * in the transcript, which is not the tool surface the current selection exposes:
32
+ * as a prompt section it listed tools the session had since gated out, directly
33
+ * contradicting the `Available tools:` block, and it grew for the whole session.
34
+ */
35
+ function createUiServerContributions() {
36
+ return { commands: [{
37
+ name: TOOLS_COMMAND,
38
+ description: "Show tools observed in this headless session. TUI rendering remains unavailable.",
39
+ async execute(_args, execution) {
40
+ await execution.client.notify({
41
+ title: "Po tools",
42
+ body: toolNames(await execution.session.entries({ type: "message" })).join("\n") || "(no tool calls recorded in this session)",
43
+ level: "info"
44
+ });
45
+ }
46
+ }] };
47
+ }
48
+ //#endregion
49
+ //#region src/extensions/workspaces/sessions/(backend)/command/tools.server.ts
50
+ var tools_server_default = defineServerCommand(createUiServerContributions().commands[0]);
51
+ //#endregion
52
+ //#region src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts
53
+ function createServerWriteTool() {
54
+ const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition(".");
55
+ return {
56
+ name: "write",
57
+ label,
58
+ description,
59
+ parameters,
60
+ promptSnippet,
61
+ promptGuidelines,
62
+ async execute(toolCallId, parameters, signal, onUpdate, execution) {
63
+ const tool = createWriteTool(execution.cwd);
64
+ return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
65
+ }
66
+ };
67
+ }
68
+ function createServerFindTool() {
69
+ const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition(".");
70
+ return {
71
+ name: "find",
72
+ label,
73
+ description,
74
+ parameters,
75
+ promptSnippet,
76
+ promptGuidelines,
77
+ async execute(toolCallId, parameters, signal, onUpdate, execution) {
78
+ const tool = createFindTool(execution.cwd);
79
+ return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
80
+ }
81
+ };
82
+ }
83
+ function createServerLsTool() {
84
+ const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition(".");
85
+ return {
86
+ name: "ls",
87
+ label,
88
+ description,
89
+ parameters,
90
+ promptSnippet,
91
+ promptGuidelines,
92
+ async execute(toolCallId, parameters, signal, onUpdate, execution) {
93
+ const tool = createLsTool(execution.cwd);
94
+ return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
95
+ }
96
+ };
97
+ }
98
+ //#endregion
99
+ //#region src/extensions/workspaces/sessions/(backend)/tool/find.server.ts
100
+ var find_server_default = defineServerTool(createServerFindTool);
101
+ //#endregion
102
+ //#region src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts
103
+ var ls_server_default = defineServerTool(createServerLsTool);
104
+ //#endregion
105
+ //#region src/extensions/workspaces/sessions/(backend)/tool/write.server.ts
106
+ var write_server_default = defineServerTool(createServerWriteTool);
107
+ //#endregion
108
+ //#region generated/server.ts
109
+ const at = (value, context) => typeof value === "function" ? value(context) : value;
110
+ const via = (identity, value) => value === void 0 ? void 0 : {
111
+ ...identity,
112
+ ...value
113
+ };
114
+ const facet = defineServerPlugin({
115
+ name: "@agimon-ai/po-ui",
116
+ session: (context) => ({
117
+ get commands() {
118
+ return [via({ name: "tools" }, at(tools_server_default, context))];
119
+ },
120
+ get tools() {
121
+ return [
122
+ via({ name: "find" }, at(find_server_default, context)),
123
+ via({ name: "ls" }, at(ls_server_default, context)),
124
+ via({ name: "write" }, at(write_server_default, context))
125
+ ];
126
+ }
127
+ })
128
+ });
129
+ //#endregion
130
+ export { facet as default, facet };
131
+
132
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.mjs","names":["commandTools","toolFind","toolLs","toolWrite"],"sources":["../../src/constants/ui.ts","../../src/services/sessionToolInventory/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts","../../src/extensions/workspaces/sessions/(backend)/command/tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.server.ts","../../generated/server.ts"],"sourcesContent":["export const LEADER_WIDGET_KEY = 'po-leader';\nexport const TUI_MODE = 'tui';\nexport const WIDGET_PLACEMENT = 'belowEditor';\nexport const WARNING_STYLE = 'warning';\nexport const THEME_ENVIRONMENT_KEY = 'PO_THEME';\nexport const HOTKEYS_COMMAND = 'hotkeys';\nexport const TOOLS_COMMAND = 'tools';\nexport const CONFIG_COMMAND = 'config';\nexport const SESSION_START_EVENT = 'session_start';\nexport const SESSION_MESSAGE_ENTRY = 'message';\nexport const INPUT_EVENT = 'input';\nexport const INTERACTIVE_INPUT_SOURCE = 'interactive';\nexport const TITLE_MESSAGE_MAX_LENGTH = 64;\nexport const TITLE_PREFIX = 'po';\nexport const BUILTIN_LEADER_COMMANDS: readonly string[] = [HOTKEYS_COMMAND];\nexport const PACKAGE_SOURCE = '@agimon-ai/po-ui';\n","export function toolNames(entries: readonly Record<string, unknown>[]): string[] {\n const names = new Set<string>();\n for (const entry of entries) {\n const message = entry.message;\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue;\n const content = (message as { content?: unknown }).content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (!block || typeof block !== 'object' || Array.isArray(block)) continue;\n const name = (block as { name?: unknown }).name;\n if (typeof name === 'string' && name) names.add(name);\n }\n }\n return [...names].sort();\n}\n","import type { DoomHeadlessCommand } from '@agimon-ai/po-core/headless';\nimport type { DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport { TOOLS_COMMAND } from '../../../../../constants/ui';\nimport { toolNames } from '../../../../../services/sessionToolInventory';\n\n/**\n * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed\n * from session data rather than silently installing a fake editor/widget host.\n *\n * Inventory is a command, never a context resource. It reports the tools observed\n * in the transcript, which is not the tool surface the current selection exposes:\n * as a prompt section it listed tools the session had since gated out, directly\n * contradicting the `Available tools:` block, and it grew for the whole session.\n */\nexport function createUiServerContributions(): DoomServerSessionPlugin {\n return {\n commands: [\n {\n name: TOOLS_COMMAND,\n description: 'Show tools observed in this headless session. TUI rendering remains unavailable.',\n async execute(_args, execution) {\n await execution.client.notify({\n title: 'Po tools',\n body:\n toolNames(await execution.session.entries({ type: 'message' })).join('\\n') ||\n '(no tool calls recorded in this session)',\n level: 'info',\n });\n },\n } satisfies DoomHeadlessCommand,\n ],\n };\n}\n","import { defineServerCommand } from '@agimon-ai/po-core/extensionFile';\n\nimport { createUiServerContributions } from '../_lib/sessionInventory';\n\nexport default defineServerCommand(createUiServerContributions().commands![0]!);\n","import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport {\n createWriteToolDefinition,\n createWriteTool,\n createFindToolDefinition,\n createFindTool,\n createLsToolDefinition,\n createLsTool,\n} from '@earendil-works/pi-coding-agent';\n\n// Preserve the SDK schemas and prompt guidance, but never import terminal renderers\n// into Po's native tool declarations. Execution resolves cwd for each call, including\n// a child session or a session whose working directory differs from process.cwd().\n\nexport function createServerWriteTool(): DoomHeadlessTool<ReturnType<typeof createWriteToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition('.');\n return {\n name: 'write',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createWriteTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerFindTool(): DoomHeadlessTool<ReturnType<typeof createFindToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition('.');\n return {\n name: 'find',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createFindTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerLsTool(): DoomHeadlessTool<ReturnType<typeof createLsToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition('.');\n return {\n name: 'ls',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createLsTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerFindTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerFindTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerLsTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerLsTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerWriteTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport commandTools from '../src/extensions/workspaces/sessions/(backend)/command/tools.server';\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.server';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.server';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.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;\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-ui',\n session: (context) => ({\n get commands(): DoomServerSessionPlugin['commands'] { return [via({ name: 'tools' }, at(commandTools, context))]; },\n get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }),\n});\n\nexport default facet;\n"],"mappings":"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"}