piclaw 0.0.4 → 0.0.6

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 (185) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/dist-D51xeTP2.js +12 -0
  3. package/.output/public/assets/index-B3x2_en6.css +1 -0
  4. package/.output/public/assets/index-SfjxJZSD.js +38 -0
  5. package/.output/public/assets/md4x-CNLJ57xO.wasm +0 -0
  6. package/.output/public/assets/md4x-CyfQToGJ.js +1 -0
  7. package/.output/public/assets/wasm-Cm7RZrwg.js +1 -0
  8. package/.output/public/icon.svg +25 -0
  9. package/.output/public/index.html +3 -2
  10. package/.output/public/manifest.json +1 -1
  11. package/.output/server/_chunks/bun.mjs +49 -0
  12. package/.output/server/_chunks/commands.mjs +280 -0
  13. package/.output/server/_chunks/config.mjs +2 -4
  14. package/.output/server/_chunks/db.mjs +11 -5
  15. package/.output/server/_chunks/logger.mjs +1 -1
  16. package/.output/server/_chunks/node.mjs +31 -0
  17. package/.output/server/_chunks/ntfy.mjs +45 -0
  18. package/.output/server/_chunks/pi.mjs +33 -1
  19. package/.output/server/_chunks/renderer-template.mjs +1 -1
  20. package/.output/server/_chunks/{bootstrap.mjs → server.mjs} +203 -205
  21. package/.output/server/_chunks/session.mjs +249 -40
  22. package/.output/server/_chunks/settings.mjs +1 -1
  23. package/.output/server/_chunks/terminal.mjs +35 -20
  24. package/.output/server/_chunks/virtual.mjs +129 -0
  25. package/.output/server/_jid_.delete.mjs +2 -2
  26. package/.output/server/_jid_.patch.mjs +30 -3
  27. package/.output/server/_jid_2.delete.mjs +2 -2
  28. package/.output/server/_libs/@aws-sdk/client-bedrock-runtime+[...].mjs +13148 -13149
  29. package/.output/server/_libs/@aws-sdk/credential-provider-http+[...].mjs +1 -1
  30. package/.output/server/_libs/@aws-sdk/credential-provider-ini+[...].mjs +2 -2
  31. package/.output/server/_libs/@aws-sdk/credential-provider-process+[...].mjs +1 -1
  32. package/.output/server/_libs/@aws-sdk/credential-provider-sso+[...].mjs +1 -1
  33. package/.output/server/_libs/@aws-sdk/credential-provider-web-identity+[...].mjs +1 -1
  34. package/.output/server/_libs/@google/genai.mjs +2 -2
  35. package/.output/server/_libs/@mariozechner/pi-agent-core+[...].mjs +40 -74
  36. package/.output/server/_libs/@mariozechner/pi-coding-agent+[...].mjs +1315 -1210
  37. package/.output/server/_libs/@smithy/credential-provider-imds+[...].mjs +3 -3
  38. package/.output/server/_libs/_.mjs +3 -2
  39. package/.output/server/_libs/_100.mjs +3 -0
  40. package/.output/server/_libs/_101.mjs +2 -0
  41. package/.output/server/_libs/_102.mjs +3 -0
  42. package/.output/server/_libs/_103.mjs +2 -0
  43. package/.output/server/_libs/_16.mjs +2 -5
  44. package/.output/server/_libs/_17.mjs +2 -3
  45. package/.output/server/_libs/_18.mjs +2 -3
  46. package/.output/server/_libs/_19.mjs +2 -4
  47. package/.output/server/_libs/_2.mjs +2 -3
  48. package/.output/server/_libs/_20.mjs +2 -2
  49. package/.output/server/_libs/_21.mjs +2 -0
  50. package/.output/server/_libs/_22.mjs +2 -0
  51. package/.output/server/_libs/_23.mjs +2 -0
  52. package/.output/server/_libs/_24.mjs +2 -0
  53. package/.output/server/_libs/_25.mjs +2 -0
  54. package/.output/server/_libs/_26.mjs +2 -0
  55. package/.output/server/_libs/_27.mjs +2 -0
  56. package/.output/server/_libs/_28.mjs +2 -0
  57. package/.output/server/_libs/_29.mjs +2 -0
  58. package/.output/server/_libs/_30.mjs +2 -0
  59. package/.output/server/_libs/_31.mjs +2 -0
  60. package/.output/server/_libs/_32.mjs +2 -0
  61. package/.output/server/_libs/_33.mjs +2 -0
  62. package/.output/server/_libs/_34.mjs +2 -0
  63. package/.output/server/_libs/_35.mjs +2 -0
  64. package/.output/server/_libs/_36.mjs +2 -0
  65. package/.output/server/_libs/_37.mjs +2 -0
  66. package/.output/server/_libs/_38.mjs +2 -0
  67. package/.output/server/_libs/_39.mjs +2 -0
  68. package/.output/server/_libs/_40.mjs +2 -0
  69. package/.output/server/_libs/_41.mjs +2 -0
  70. package/.output/server/_libs/_42.mjs +2 -0
  71. package/.output/server/_libs/_43.mjs +2 -0
  72. package/.output/server/_libs/_44.mjs +2 -0
  73. package/.output/server/_libs/_45.mjs +2 -0
  74. package/.output/server/_libs/_46.mjs +2 -0
  75. package/.output/server/_libs/_47.mjs +2 -0
  76. package/.output/server/_libs/_48.mjs +2 -0
  77. package/.output/server/_libs/_49.mjs +2 -0
  78. package/.output/server/_libs/_50.mjs +2 -0
  79. package/.output/server/_libs/_51.mjs +2 -0
  80. package/.output/server/_libs/_52.mjs +2 -0
  81. package/.output/server/_libs/_53.mjs +2 -0
  82. package/.output/server/_libs/_54.mjs +2 -0
  83. package/.output/server/_libs/_55.mjs +2 -0
  84. package/.output/server/_libs/_56.mjs +2 -0
  85. package/.output/server/_libs/_57.mjs +2 -0
  86. package/.output/server/_libs/_58.mjs +2 -0
  87. package/.output/server/_libs/_59.mjs +2 -0
  88. package/.output/server/_libs/_60.mjs +2 -0
  89. package/.output/server/_libs/_61.mjs +2 -0
  90. package/.output/server/_libs/_62.mjs +2 -0
  91. package/.output/server/_libs/_63.mjs +2 -0
  92. package/.output/server/_libs/_64.mjs +2 -0
  93. package/.output/server/_libs/_65.mjs +2 -0
  94. package/.output/server/_libs/_66.mjs +2 -0
  95. package/.output/server/_libs/_67.mjs +2 -0
  96. package/.output/server/_libs/_68.mjs +2 -0
  97. package/.output/server/_libs/_69.mjs +2 -0
  98. package/.output/server/_libs/_70.mjs +2 -0
  99. package/.output/server/_libs/_71.mjs +2 -0
  100. package/.output/server/_libs/_72.mjs +2 -0
  101. package/.output/server/_libs/_73.mjs +2 -0
  102. package/.output/server/_libs/_74.mjs +2 -0
  103. package/.output/server/_libs/_75.mjs +2 -0
  104. package/.output/server/_libs/_76.mjs +2 -0
  105. package/.output/server/_libs/_77.mjs +2 -0
  106. package/.output/server/_libs/_78.mjs +2 -0
  107. package/.output/server/_libs/_79.mjs +2 -0
  108. package/.output/server/_libs/_80.mjs +2 -0
  109. package/.output/server/_libs/_81.mjs +2 -0
  110. package/.output/server/_libs/_82.mjs +2 -0
  111. package/.output/server/_libs/_83.mjs +2 -0
  112. package/.output/server/_libs/_84.mjs +2 -0
  113. package/.output/server/_libs/_85.mjs +2 -0
  114. package/.output/server/_libs/_86.mjs +2 -0
  115. package/.output/server/_libs/_87.mjs +2 -0
  116. package/.output/server/_libs/_88.mjs +2 -0
  117. package/.output/server/_libs/_89.mjs +2 -0
  118. package/.output/server/_libs/_90.mjs +2 -0
  119. package/.output/server/_libs/_91.mjs +2 -0
  120. package/.output/server/_libs/_92.mjs +2 -0
  121. package/.output/server/_libs/_93.mjs +2 -0
  122. package/.output/server/_libs/_94.mjs +2 -0
  123. package/.output/server/_libs/_95.mjs +2 -0
  124. package/.output/server/_libs/_96.mjs +2 -0
  125. package/.output/server/_libs/_97.mjs +2 -0
  126. package/.output/server/_libs/_98.mjs +2 -0
  127. package/.output/server/_libs/_99.mjs +5 -0
  128. package/.output/server/_libs/amdefine.mjs +188 -0
  129. package/.output/server/_libs/aws-sdk__nested-clients.mjs +1 -1
  130. package/.output/server/_libs/compressjs.mjs +50 -0
  131. package/.output/server/_libs/diff.mjs +137 -0
  132. package/.output/server/_libs/get-uri.mjs +1 -1
  133. package/.output/server/_libs/http-proxy-agent.mjs +1 -1
  134. package/.output/server/_libs/https-proxy-agent.mjs +1 -1
  135. package/.output/server/_libs/just-bash+[...].mjs +80359 -0
  136. package/.output/server/_libs/md4x.mjs +73 -0
  137. package/.output/server/_libs/mixmark-io__domino.mjs +14801 -0
  138. package/.output/server/_libs/node-fetch.mjs +1 -1
  139. package/.output/server/_libs/node-liblzma.mjs +1107 -0
  140. package/.output/server/_libs/pac-proxy-agent+[...].mjs +1 -1
  141. package/.output/server/_libs/proxy-agent+proxy-from-env.mjs +1 -1
  142. package/.output/server/_libs/smithy__core.mjs +1 -1
  143. package/.output/server/_routes/api/files/delete.mjs +2 -2
  144. package/.output/server/_routes/api/files/groups.mjs +14 -0
  145. package/.output/server/_routes/api/files/raw.mjs +1 -1
  146. package/.output/server/_routes/api/files/read.mjs +1 -1
  147. package/.output/server/_routes/api/files/watch.mjs +1 -1
  148. package/.output/server/_routes/api/files/write.mjs +3 -2
  149. package/.output/server/_routes/api/files.mjs +1 -1
  150. package/.output/server/_routes/api/groups.mjs +2 -2
  151. package/.output/server/_routes/api/groups2.mjs +3 -2
  152. package/.output/server/_routes/api/health.mjs +2 -2
  153. package/.output/server/_routes/api/logs.mjs +4 -2
  154. package/.output/server/_routes/api/ntfy/setup.mjs +54 -0
  155. package/.output/server/_routes/api/ntfy/status.mjs +12 -0
  156. package/.output/server/_routes/api/pi/apikey.mjs +1 -1
  157. package/.output/server/_routes/api/pi/apikey_providers.mjs +1 -1
  158. package/.output/server/_routes/api/pi/commands.mjs +6 -0
  159. package/.output/server/_routes/api/pi/login/events.mjs +1 -1
  160. package/.output/server/_routes/api/pi/login/respond.mjs +1 -1
  161. package/.output/server/_routes/api/pi/login.mjs +1 -1
  162. package/.output/server/_routes/api/pi/logout.mjs +1 -1
  163. package/.output/server/_routes/api/pi/models.mjs +1 -1
  164. package/.output/server/_routes/api/pi/status.mjs +1 -1
  165. package/.output/server/_routes/api/send.mjs +22 -3
  166. package/.output/server/_routes/api/status.mjs +9 -7
  167. package/.output/server/_routes/api/tasks2.mjs +2 -2
  168. package/.output/server/_routes/api/telegram/setup.mjs +2 -2
  169. package/.output/server/_routes/api/telegram/status.mjs +2 -2
  170. package/.output/server/_routes/api/terminal2.mjs +3 -2
  171. package/.output/server/_utils.mjs +12 -4
  172. package/.output/server/build/md4x.wasm +0 -0
  173. package/.output/server/index.mjs +223 -149
  174. package/.output/server/node_modules/@mongodb-js/zstd/lib/index.js +55 -0
  175. package/.output/server/node_modules/@mongodb-js/zstd/package.json +51 -0
  176. package/.output/server/package.json +1 -0
  177. package/README.md +118 -24
  178. package/bin/piclaw.mjs +39 -1
  179. package/package.json +16 -13
  180. package/.output/public/assets/client-TIs-Ghqj.js +0 -9
  181. package/.output/public/assets/dist-BVjfG3ok.js +0 -12
  182. package/.output/public/assets/dist-DJh8l6yS.js +0 -1
  183. package/.output/public/assets/index-BNNEMkNV.js +0 -39
  184. package/.output/public/assets/index-CdWBxO5V.css +0 -1
  185. package/.output/public/assets/react-DFP7nCmh.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import { a as __require, t as __commonJSMin } from "../_runtime.mjs";
2
- import { c as require_src } from "./@mariozechner/pi-coding-agent+[...].mjs";
2
+ import { s as require_src } from "./@mariozechner/pi-coding-agent+[...].mjs";
3
3
  import { t as require_dist$3 } from "./agent-base.mjs";
4
4
  import { t as require_dist$4 } from "./https-proxy-agent.mjs";
5
5
  import { t as require_dist$5 } from "./http-proxy-agent.mjs";
@@ -1,5 +1,5 @@
1
1
  import { a as __require, t as __commonJSMin } from "../_runtime.mjs";
2
- import { c as require_src } from "./@mariozechner/pi-coding-agent+[...].mjs";
2
+ import { s as require_src } from "./@mariozechner/pi-coding-agent+[...].mjs";
3
3
  import { t as require_dist$1 } from "./agent-base.mjs";
4
4
  import { t as require_dist$2 } from "./https-proxy-agent.mjs";
5
5
  import { t as require_lru_cache } from "./lru-cache.mjs";
@@ -1,5 +1,5 @@
1
1
  import { o as __toCommonJS, t as __commonJSMin } from "../_runtime.mjs";
2
- import { mt as init_dist_es, pt as dist_es_exports } from "./@aws-sdk/client-bedrock-runtime+[...].mjs";
2
+ import { Ct as dist_es_exports, wt as init_dist_es } from "./@aws-sdk/client-bedrock-runtime+[...].mjs";
3
3
  var require_event_streams = /* @__PURE__ */ __commonJSMin(((exports) => {
4
4
  var utilUtf8 = (init_dist_es(), __toCommonJS(dist_es_exports));
5
5
  var EventStreamSerde = class {
@@ -1,10 +1,10 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import { t as resolveGroupPath } from "../../../_utils.mjs";
2
+ import { r as resolveGroupPath, t as READONLY_FOLDERS } from "../../../_utils.mjs";
3
3
  import { rm } from "node:fs/promises";
4
4
  var delete_post_default = defineHandler(async (event) => {
5
5
  const body = await event.req.json();
6
6
  if (!body.path || body.path === "." || body.path === "/") throw new HTTPError("cannot delete group root", { status: 400 });
7
- if (body.folder === ".pi") throw new HTTPError("cannot delete files in .pi", { status: 403 });
7
+ if (READONLY_FOLDERS.has(body.folder)) throw new HTTPError("folder is read-only", { status: 403 });
8
8
  await rm(await resolveGroupPath(body.folder, body.path), { recursive: true });
9
9
  return { ok: true };
10
10
  });
@@ -0,0 +1,14 @@
1
+ import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
+ import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
+ import { t as server } from "../../../_chunks/server.mjs";
5
+ import { n as VIRTUAL_GROUPS } from "../../../_utils.mjs";
6
+ var groups_get_default = defineHandler(() => {
7
+ const groups = server.getRegisteredGroups();
8
+ return [...VIRTUAL_GROUPS, ...Object.entries(groups).map(([jid, g]) => ({
9
+ jid,
10
+ name: g.name,
11
+ folder: g.folder
12
+ }))];
13
+ });
14
+ export { groups_get_default as default };
@@ -1,5 +1,5 @@
1
1
  import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import { t as resolveGroupPath } from "../../../_utils.mjs";
2
+ import { r as resolveGroupPath } from "../../../_utils.mjs";
3
3
  import { t as index_lite_default } from "../../../_libs/mime.mjs";
4
4
  import { createReadStream } from "node:fs";
5
5
  import { stat } from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import { t as resolveGroupPath } from "../../../_utils.mjs";
2
+ import { r as resolveGroupPath } from "../../../_utils.mjs";
3
3
  import { readFile } from "node:fs/promises";
4
4
  var read_get_default = defineHandler(async (event) => {
5
5
  return { content: await readFile(await resolveGroupPath(event.url.searchParams.get("folder") || "", event.url.searchParams.get("path") || ""), "utf-8") };
@@ -1,5 +1,5 @@
1
1
  import { a as defineHandler, i as createEventStream } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import { t as resolveGroupPath } from "../../../_utils.mjs";
2
+ import { r as resolveGroupPath } from "../../../_utils.mjs";
3
3
  import { watch } from "node:fs";
4
4
  var watch_get_default = defineHandler(async (event) => {
5
5
  const dirPath = await resolveGroupPath(event.url.searchParams.get("folder") || "", event.url.searchParams.get("path") || ".");
@@ -1,9 +1,10 @@
1
- import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import { t as resolveGroupPath } from "../../../_utils.mjs";
1
+ import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
+ import { r as resolveGroupPath, t as READONLY_FOLDERS } from "../../../_utils.mjs";
3
3
  import path from "node:path";
4
4
  import { mkdir, writeFile } from "node:fs/promises";
5
5
  var write_post_default = defineHandler(async (event) => {
6
6
  const body = await event.req.json();
7
+ if (READONLY_FOLDERS.has(body.folder)) throw new HTTPError("folder is read-only", { status: 403 });
7
8
  const filePath = await resolveGroupPath(body.folder, body.path);
8
9
  await mkdir(path.dirname(filePath), { recursive: true });
9
10
  await writeFile(filePath, body.content, "utf-8");
@@ -1,5 +1,5 @@
1
1
  import { a as defineHandler } from "../../_libs/h3+rou3+srvx.mjs";
2
- import { t as resolveGroupPath } from "../../_utils.mjs";
2
+ import { r as resolveGroupPath } from "../../_utils.mjs";
3
3
  import path from "node:path";
4
4
  import { readdir, stat } from "node:fs/promises";
5
5
  var index_get_default = defineHandler(async (event) => {
@@ -1,7 +1,7 @@
1
1
  import { a as defineHandler } from "../../_libs/h3+rou3+srvx.mjs";
2
- import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
- import { t as server } from "../../_chunks/bootstrap.mjs";
3
+ import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
+ import { t as server } from "../../_chunks/server.mjs";
5
5
  var index_get_default = defineHandler(() => {
6
6
  const groups = server.getRegisteredGroups();
7
7
  return Object.entries(groups).map(([jid, g]) => ({
@@ -1,8 +1,8 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../_libs/h3+rou3+srvx.mjs";
2
2
  import { t as createLogger } from "../../_chunks/logger.mjs";
3
- import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
3
  import "../../_libs/@mariozechner/pi-agent-core+[...].mjs";
5
- import { t as server } from "../../_chunks/bootstrap.mjs";
4
+ import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
+ import { t as server } from "../../_chunks/server.mjs";
6
6
  var logger = createLogger("api:groups");
7
7
  var index_post_default = defineHandler(async (event) => {
8
8
  const { jid, name, folder, trigger, model } = await event.req.json();
@@ -12,6 +12,7 @@ var index_post_default = defineHandler(async (event) => {
12
12
  folder,
13
13
  trigger: trigger || `@${server.assistantName}`,
14
14
  requiresTrigger: !!trigger,
15
+ thinkingLevel: "medium",
15
16
  added_at: (/* @__PURE__ */ new Date()).toISOString(),
16
17
  ...model ? { model } : {}
17
18
  };
@@ -1,7 +1,7 @@
1
1
  import { a as defineHandler } from "../../_libs/h3+rou3+srvx.mjs";
2
- import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
- import { n as startTime } from "../../_chunks/bootstrap.mjs";
3
+ import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
+ import { r as startTime } from "../../_chunks/server.mjs";
5
5
  var health_get_default = defineHandler(() => ({
6
6
  ok: true,
7
7
  uptimeMs: Date.now() - startTime
@@ -11,10 +11,12 @@ var logs_get_default = defineHandler((event) => {
11
11
  };
12
12
  if (event.req.headers.get("accept")?.includes("text/event-stream")) {
13
13
  const stream = createEventStream(event);
14
- const interval = setInterval(async () => {
14
+ const sendLogs = async () => {
15
15
  const logs = getSystemLogs(opts);
16
16
  await stream.push({ data: JSON.stringify(logs) });
17
- }, 1e3);
17
+ };
18
+ const interval = setInterval(sendLogs, 1e3);
19
+ sendLogs();
18
20
  stream.onClosed(() => {
19
21
  clearInterval(interval);
20
22
  });
@@ -0,0 +1,54 @@
1
+ import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
+ import { t as createLogger } from "../../../_chunks/logger.mjs";
3
+ import { i as setNtfyConfig, n as getNtfyConfig, r as sendNtfyNotification, t as clearNtfyConfig } from "../../../_chunks/ntfy.mjs";
4
+ var logger = createLogger("api:ntfy");
5
+ var setup_post_default = defineHandler(async (event) => {
6
+ const body = await event.req.json();
7
+ const { action } = body;
8
+ if (action === "disconnect") {
9
+ clearNtfyConfig();
10
+ logger.info("ntfy config removed");
11
+ return {
12
+ ok: true,
13
+ configured: false
14
+ };
15
+ }
16
+ if (action === "connect") {
17
+ const serverUrl = String(body.serverUrl || "https://ntfy.sh").trim();
18
+ const topic = String(body.topic || "").trim();
19
+ const token = body.token ? String(body.token).trim() : void 0;
20
+ if (!topic) throw new HTTPError("topic is required", { status: 400 });
21
+ setNtfyConfig({
22
+ serverUrl,
23
+ topic,
24
+ ...token ? { token } : {}
25
+ });
26
+ logger.info({
27
+ serverUrl,
28
+ topic
29
+ }, "ntfy configured");
30
+ return {
31
+ ok: true,
32
+ configured: true,
33
+ serverUrl,
34
+ topic
35
+ };
36
+ }
37
+ if (action === "test") {
38
+ const config = getNtfyConfig();
39
+ if (!config) throw new HTTPError("ntfy is not configured", { status: 400 });
40
+ try {
41
+ await sendNtfyNotification(config, {
42
+ title: "PiClaw Test",
43
+ message: "ntfy notification is working!",
44
+ tags: ["white_check_mark", "robot"]
45
+ });
46
+ return { ok: true };
47
+ } catch (err) {
48
+ logger.error({ err }, "ntfy test notification failed");
49
+ throw new HTTPError(`Test failed: ${err instanceof Error ? err.message : String(err)}`, { status: 500 });
50
+ }
51
+ }
52
+ throw new HTTPError("Invalid action. Use 'connect', 'disconnect', or 'test'", { status: 400 });
53
+ });
54
+ export { setup_post_default as default };
@@ -0,0 +1,12 @@
1
+ import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
+ import { n as getNtfyConfig } from "../../../_chunks/ntfy.mjs";
3
+ var status_get_default = defineHandler(() => {
4
+ const config = getNtfyConfig();
5
+ return {
6
+ configured: !!config,
7
+ serverUrl: config?.serverUrl ?? null,
8
+ topic: config?.topic ?? null,
9
+ hasToken: !!config?.token
10
+ };
11
+ });
12
+ export { status_get_default as default };
@@ -1,7 +1,7 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import { r as modelRegistry, t as authStorage } from "../../../_chunks/session.mjs";
4
3
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
5
  import { t as API_KEY_PROVIDERS } from "../../../_chunks/providers.mjs";
6
6
  var apikey_post_default = defineHandler(async (event) => {
7
7
  const { provider, key } = await event.req.json();
@@ -1,7 +1,7 @@
1
1
  import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import { t as authStorage } from "../../../_chunks/session.mjs";
4
3
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
5
  import { t as API_KEY_PROVIDERS } from "../../../_chunks/providers.mjs";
6
6
  var apikey_providers_get_default = defineHandler(() => {
7
7
  return API_KEY_PROVIDERS.map((p) => ({
@@ -0,0 +1,6 @@
1
+ import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
+ import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
+ import { t as commandDescriptions } from "../../../_chunks/commands.mjs";
5
+ var commands_get_default = defineHandler(() => commandDescriptions);
6
+ export { commands_get_default as default };
@@ -1,6 +1,6 @@
1
1
  import { a as defineHandler, c as getQuery, i as createEventStream, n as HTTPError } from "../../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
4
  import { t as LoginSession } from "../../../../_chunks/login.mjs";
5
5
  var events_get_default = defineHandler((event) => {
6
6
  const loginId = getQuery(event).loginId;
@@ -1,6 +1,6 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
4
  import { t as LoginSession } from "../../../../_chunks/login.mjs";
5
5
  var respond_post_default = defineHandler(async (event) => {
6
6
  const { loginId, value } = await event.req.json();
@@ -1,7 +1,7 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import { t as authStorage } from "../../../_chunks/session.mjs";
4
3
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
5
  import { t as LoginSession } from "../../../_chunks/login.mjs";
6
6
  var index_post_default = defineHandler(async (event) => {
7
7
  const { providerId } = await event.req.json();
@@ -1,6 +1,6 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
4
  import { t as LoginSession } from "../../../_chunks/login.mjs";
5
5
  var logout_post_default = defineHandler(async (event) => {
6
6
  const { provider } = await event.req.json();
@@ -1,7 +1,7 @@
1
1
  import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import { r as modelRegistry } from "../../../_chunks/session.mjs";
4
3
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
5
  import { r as readPiSettings } from "../../../_chunks/settings.mjs";
6
6
  var models_get_default = defineHandler(async () => {
7
7
  const models = modelRegistry.getAvailable();
@@ -1,6 +1,6 @@
1
1
  import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
4
  import { t as getPiSdkStatus } from "../../../_chunks/pi.mjs";
5
5
  var status_get_default = defineHandler(() => getPiSdkStatus());
6
6
  export { status_get_default as default };
@@ -1,14 +1,33 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../_libs/h3+rou3+srvx.mjs";
2
- import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
4
  import { T as storeMessage, w as storeChatMetadata } from "../../_chunks/db.mjs";
5
- import { t as server } from "../../_chunks/bootstrap.mjs";
5
+ import { i as tryPriorityCommand, n as tryBashCommand } from "../../_chunks/commands.mjs";
6
+ import { t as server } from "../../_chunks/server.mjs";
6
7
  import crypto from "node:crypto";
7
8
  var send_post_default = defineHandler(async (event) => {
8
9
  const { jid, message, sender } = await event.req.json();
9
10
  if (!jid || !message) throw new HTTPError("jid and message required", { status: 400 });
10
11
  const senderName = sender || "Admin";
11
12
  const now = (/* @__PURE__ */ new Date()).toISOString();
13
+ const group = server.getRegisteredGroups()[jid];
14
+ const trimmed = message.trim();
15
+ if (group && tryBashCommand({
16
+ chatJid: jid,
17
+ group,
18
+ server
19
+ }, trimmed)) return {
20
+ ok: true,
21
+ method: "bash_command"
22
+ };
23
+ if (group && tryPriorityCommand({
24
+ chatJid: jid,
25
+ group,
26
+ server
27
+ }, trimmed)) return {
28
+ ok: true,
29
+ method: "priority_command"
30
+ };
12
31
  storeMessage({
13
32
  id: crypto.randomUUID(),
14
33
  chat_jid: jid,
@@ -20,7 +39,7 @@ var send_post_default = defineHandler(async (event) => {
20
39
  is_bot_message: false
21
40
  });
22
41
  storeChatMetadata(jid, now, void 0, "admin");
23
- if (server.getRegisteredGroups()[jid]) {
42
+ if (group) {
24
43
  server.queue.enqueueMessageCheck(jid);
25
44
  return {
26
45
  ok: true,
@@ -1,15 +1,17 @@
1
1
  import { a as defineHandler } from "../../_libs/h3+rou3+srvx.mjs";
2
- import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
2
+ import { c as getSystemInfo } from "../../_chunks/session.mjs";
3
3
  import "../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
+ import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
5
  import { a as getAllChats, c as getAllTasks } from "../../_chunks/db.mjs";
5
- import { n as startTime, t as server } from "../../_chunks/bootstrap.mjs";
6
- var status_get_default = defineHandler(() => ({
6
+ import { r as startTime, t as server } from "../../_chunks/server.mjs";
7
+ var status_get_default = defineHandler(async () => ({
7
8
  uptimeMs: Date.now() - startTime,
8
- assistantName: server.assistantName,
9
- groupCount: Object.keys(server.getRegisteredGroups()).length,
9
+ assistantName: server?.assistantName,
10
+ groupCount: Object.keys(server?.getRegisteredGroups()).length,
10
11
  chatCount: getAllChats().length,
11
12
  activeTaskCount: getAllTasks().filter((t) => t.status === "active").length,
12
- activeAgents: server.queue.activeCount,
13
- queueSize: server.queue.size
13
+ activeAgents: server?.queue.activeCount,
14
+ queueSize: server?.queue.size,
15
+ systemInfo: await getSystemInfo()
14
16
  }));
15
17
  export { status_get_default as default };
@@ -1,9 +1,9 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../_libs/h3+rou3+srvx.mjs";
2
2
  import { t as createLogger } from "../../_chunks/logger.mjs";
3
- import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
3
  import "../../_libs/@mariozechner/pi-agent-core+[...].mjs";
4
+ import "../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
5
  import { n as createTask } from "../../_chunks/db.mjs";
6
- import { t as server } from "../../_chunks/bootstrap.mjs";
6
+ import { t as server } from "../../_chunks/server.mjs";
7
7
  import crypto from "node:crypto";
8
8
  var logger = createLogger("api:tasks");
9
9
  var index_post_default = defineHandler(async (event) => {
@@ -1,8 +1,8 @@
1
1
  import { a as defineHandler, n as HTTPError } from "../../../_libs/h3+rou3+srvx.mjs";
2
2
  import { t as createLogger } from "../../../_chunks/logger.mjs";
3
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
3
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
5
- import { t as server } from "../../../_chunks/bootstrap.mjs";
4
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
5
+ import { t as server } from "../../../_chunks/server.mjs";
6
6
  var logger = createLogger("api:telegram");
7
7
  var setup_post_default = defineHandler(async (event) => {
8
8
  const body = await event.req.json();
@@ -1,8 +1,8 @@
1
1
  import { a as defineHandler } from "../../../_libs/h3+rou3+srvx.mjs";
2
- import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
3
2
  import "../../../_libs/@mariozechner/pi-agent-core+[...].mjs";
3
+ import "../../../_libs/@aws-sdk/client-bedrock-runtime+[...].mjs";
4
4
  import { l as getConfig } from "../../../_chunks/db.mjs";
5
- import { t as server } from "../../../_chunks/bootstrap.mjs";
5
+ import { t as server } from "../../../_chunks/server.mjs";
6
6
  var status_get_default = defineHandler(() => {
7
7
  const config = getConfig("telegram");
8
8
  const connected = server.telegram?.isConnected() ?? false;
@@ -2,11 +2,12 @@ import { a as defineHandler } from "../../_libs/h3+rou3+srvx.mjs";
2
2
  import { t as terminalManager } from "../../_chunks/terminal.mjs";
3
3
  var index_post_default = defineHandler(async (event) => {
4
4
  const body = await event.req.json().catch(() => ({}));
5
- const session = terminalManager.create({
5
+ const session = await terminalManager.create({
6
6
  cols: body.cols,
7
7
  rows: body.rows,
8
8
  cwd: body.cwd,
9
- label: body.label
9
+ label: body.label,
10
+ virtual: body.virtual
10
11
  });
11
12
  return {
12
13
  id: session.id,
@@ -1,12 +1,20 @@
1
1
  import { n as HTTPError } from "./_libs/h3+rou3+srvx.mjs";
2
2
  import { r as GROUPS_DIR } from "./_chunks/config.mjs";
3
3
  import path from "node:path";
4
- import { stat } from "node:fs/promises";
5
4
  import os from "node:os";
6
- var PI_DIR = path.join(os.homedir(), ".pi");
5
+ import { stat } from "node:fs/promises";
6
+ var HOME_DIR = os.homedir();
7
+ var VIRTUAL_FOLDERS = { "~home": HOME_DIR };
8
+ const READONLY_FOLDERS = new Set(["~home"]);
9
+ const VIRTUAL_GROUPS = [{
10
+ jid: "~home",
11
+ name: "~/",
12
+ folder: "~home",
13
+ readonly: true
14
+ }];
7
15
  async function resolveGroupPath(folder, relativePath = ".") {
8
16
  if (!folder) throw new HTTPError("folder is required", { status: 400 });
9
- const groupRoot = folder === ".pi" ? PI_DIR : path.join(GROUPS_DIR, folder);
17
+ const groupRoot = VIRTUAL_FOLDERS[folder] ?? path.join(GROUPS_DIR, folder);
10
18
  const resolved = path.resolve(groupRoot, relativePath);
11
19
  if (!resolved.startsWith(groupRoot)) throw new HTTPError("path traversal not allowed", { status: 400 });
12
20
  try {
@@ -17,4 +25,4 @@ async function resolveGroupPath(folder, relativePath = ".") {
17
25
  }
18
26
  return resolved;
19
27
  }
20
- export { resolveGroupPath as t };
28
+ export { VIRTUAL_GROUPS as n, resolveGroupPath as r, READONLY_FOLDERS as t };
Binary file