reeboot 1.3.2 → 1.3.4

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 (94) hide show
  1. package/container/entrypoint.sh +55 -3
  2. package/dist/agent-runner/index.d.ts.map +1 -1
  3. package/dist/agent-runner/index.js +3 -9
  4. package/dist/agent-runner/index.js.map +1 -1
  5. package/dist/agent-runner/pi-runner.d.ts +3 -1
  6. package/dist/agent-runner/pi-runner.d.ts.map +1 -1
  7. package/dist/agent-runner/pi-runner.js +81 -7
  8. package/dist/agent-runner/pi-runner.js.map +1 -1
  9. package/dist/channels/whatsapp.d.ts.map +1 -1
  10. package/dist/channels/whatsapp.js +10 -1
  11. package/dist/channels/whatsapp.js.map +1 -1
  12. package/dist/config.d.ts +7 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +2 -1
  15. package/dist/config.js.map +1 -1
  16. package/dist/context.d.ts.map +1 -1
  17. package/dist/context.js +3 -0
  18. package/dist/context.js.map +1 -1
  19. package/dist/db/schema.d.ts.map +1 -1
  20. package/dist/db/schema.js +2 -2
  21. package/dist/db/schema.js.map +1 -1
  22. package/dist/extensions/confirm-destructive.d.ts +9 -0
  23. package/dist/extensions/confirm-destructive.d.ts.map +1 -0
  24. package/dist/extensions/confirm-destructive.js +43 -0
  25. package/dist/extensions/confirm-destructive.js.map +1 -0
  26. package/dist/extensions/custom-compaction.d.ts +17 -0
  27. package/dist/extensions/custom-compaction.d.ts.map +1 -0
  28. package/dist/extensions/custom-compaction.js +99 -0
  29. package/dist/extensions/custom-compaction.js.map +1 -0
  30. package/dist/extensions/loader.d.ts.map +1 -1
  31. package/dist/extensions/loader.js +24 -16
  32. package/dist/extensions/loader.js.map +1 -1
  33. package/dist/extensions/protected-paths.d.ts +9 -0
  34. package/dist/extensions/protected-paths.d.ts.map +1 -0
  35. package/dist/extensions/protected-paths.js +24 -0
  36. package/dist/extensions/protected-paths.js.map +1 -0
  37. package/dist/extensions/scheduler-tool.d.ts +31 -0
  38. package/dist/extensions/scheduler-tool.d.ts.map +1 -0
  39. package/dist/extensions/scheduler-tool.js +341 -0
  40. package/dist/extensions/scheduler-tool.js.map +1 -0
  41. package/dist/extensions/session-name.d.ts +11 -0
  42. package/dist/extensions/session-name.d.ts.map +1 -0
  43. package/dist/extensions/session-name.js +25 -0
  44. package/dist/extensions/session-name.js.map +1 -0
  45. package/dist/extensions/skill-manager.d.ts +49 -0
  46. package/dist/extensions/skill-manager.d.ts.map +1 -0
  47. package/dist/extensions/skill-manager.js +368 -0
  48. package/dist/extensions/skill-manager.js.map +1 -0
  49. package/dist/extensions/token-meter.d.ts +11 -0
  50. package/dist/extensions/token-meter.d.ts.map +1 -0
  51. package/dist/extensions/token-meter.js +46 -0
  52. package/dist/extensions/token-meter.js.map +1 -0
  53. package/dist/extensions/web-search.d.ts +39 -0
  54. package/dist/extensions/web-search.d.ts.map +1 -0
  55. package/dist/extensions/web-search.js +366 -0
  56. package/dist/extensions/web-search.js.map +1 -0
  57. package/dist/index.js +9 -2
  58. package/dist/index.js.map +1 -1
  59. package/dist/server.d.ts.map +1 -1
  60. package/dist/server.js +3 -3
  61. package/dist/server.js.map +1 -1
  62. package/dist/setup-wizard.d.ts +1 -0
  63. package/dist/setup-wizard.d.ts.map +1 -1
  64. package/dist/setup-wizard.js +4 -3
  65. package/dist/setup-wizard.js.map +1 -1
  66. package/dist/utils/agent-dir.d.ts +11 -0
  67. package/dist/utils/agent-dir.d.ts.map +1 -0
  68. package/dist/utils/agent-dir.js +26 -0
  69. package/dist/utils/agent-dir.js.map +1 -0
  70. package/dist/wizard/detect-pi-auth.d.ts +19 -0
  71. package/dist/wizard/detect-pi-auth.d.ts.map +1 -0
  72. package/dist/wizard/detect-pi-auth.js +36 -0
  73. package/dist/wizard/detect-pi-auth.js.map +1 -0
  74. package/dist/wizard/index.d.ts.map +1 -1
  75. package/dist/wizard/index.js +1 -0
  76. package/dist/wizard/index.js.map +1 -1
  77. package/dist/wizard/probe-searxng.d.ts +9 -0
  78. package/dist/wizard/probe-searxng.d.ts.map +1 -0
  79. package/dist/wizard/probe-searxng.js +30 -0
  80. package/dist/wizard/probe-searxng.js.map +1 -0
  81. package/dist/wizard/steps/channels.js +7 -35
  82. package/dist/wizard/steps/channels.js.map +1 -1
  83. package/dist/wizard/steps/launch.d.ts +1 -0
  84. package/dist/wizard/steps/launch.d.ts.map +1 -1
  85. package/dist/wizard/steps/launch.js +5 -4
  86. package/dist/wizard/steps/launch.js.map +1 -1
  87. package/dist/wizard/steps/provider.d.ts +1 -0
  88. package/dist/wizard/steps/provider.d.ts.map +1 -1
  89. package/dist/wizard/steps/provider.js +18 -1
  90. package/dist/wizard/steps/provider.js.map +1 -1
  91. package/dist/wizard/steps/web-search.js +33 -10
  92. package/dist/wizard/steps/web-search.js.map +1 -1
  93. package/extensions/web-search.ts +2 -3
  94. package/package.json +4 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-destructive.js","sourceRoot":"","sources":["../../src/extensions/confirm-destructive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,OAAO,WAAW,EAAgB;IACxC,EAAE,CAAC,EAAE,CAAC,uBAAuB,EAAE,KAAK,EAAE,KAA+B,EAAE,GAAG,EAAE,EAAE;QAC7E,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QAEvB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC5B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACrC,gBAAgB,EAChB,uDAAuD,CACvD,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;gBACzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;YACD,OAAO;QACR,CAAC;QAED,oGAAoG;QACpG,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAClC,CAAC,CAAC,EAA4B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAClF,CAAC;QAEF,IAAI,cAAc,EAAE,CAAC;YACpB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,OAAO,CACrC,iBAAiB,EACjB,0DAA0D,CAC1D,CAAC;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;gBAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACjD,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,OAAO;QAEvB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE;YACnF,kBAAkB;YAClB,6BAA6B;SAC7B,CAAC,CAAC;QAEH,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;YACnC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YACxC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Custom Compaction Extension
3
+ *
4
+ * Replaces the default compaction behavior with a full summary of the entire context.
5
+ * Instead of keeping the last 20k tokens of conversation turns, this extension:
6
+ * 1. Summarizes ALL messages (messagesToSummarize + turnPrefixMessages)
7
+ * 2. Discards all old turns completely, keeping only the summary
8
+ *
9
+ * This example also demonstrates using a different model (Gemini Flash) for summarization,
10
+ * which can be cheaper/faster than the main conversation model.
11
+ *
12
+ * Usage:
13
+ * pi --extension examples/extensions/custom-compaction.ts
14
+ */
15
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
16
+ export default function (pi: ExtensionAPI): void;
17
+ //# sourceMappingURL=custom-compaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-compaction.d.ts","sourceRoot":"","sources":["../../src/extensions/custom-compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QA8FxC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Custom Compaction Extension
3
+ *
4
+ * Replaces the default compaction behavior with a full summary of the entire context.
5
+ * Instead of keeping the last 20k tokens of conversation turns, this extension:
6
+ * 1. Summarizes ALL messages (messagesToSummarize + turnPrefixMessages)
7
+ * 2. Discards all old turns completely, keeping only the summary
8
+ *
9
+ * This example also demonstrates using a different model (Gemini Flash) for summarization,
10
+ * which can be cheaper/faster than the main conversation model.
11
+ *
12
+ * Usage:
13
+ * pi --extension examples/extensions/custom-compaction.ts
14
+ */
15
+ import { complete } from "@mariozechner/pi-ai";
16
+ import { convertToLlm, serializeConversation } from "@mariozechner/pi-coding-agent";
17
+ export default function (pi) {
18
+ pi.on("session_before_compact", async (event, ctx) => {
19
+ ctx.ui.notify("Custom compaction extension triggered", "info");
20
+ const { preparation, branchEntries: _, signal } = event;
21
+ const { messagesToSummarize, turnPrefixMessages, tokensBefore, firstKeptEntryId, previousSummary } = preparation;
22
+ // Use Gemini Flash for summarization (cheaper/faster than most conversation models)
23
+ const model = ctx.modelRegistry.find("google", "gemini-2.5-flash");
24
+ if (!model) {
25
+ ctx.ui.notify(`Could not find Gemini Flash model, using default compaction`, "warning");
26
+ return;
27
+ }
28
+ // Resolve API key for the summarization model
29
+ const apiKey = await ctx.modelRegistry.getApiKey(model);
30
+ if (!apiKey) {
31
+ ctx.ui.notify(`No API key for ${model.provider}, using default compaction`, "warning");
32
+ return;
33
+ }
34
+ // Combine all messages for full summary
35
+ const allMessages = [...messagesToSummarize, ...turnPrefixMessages];
36
+ ctx.ui.notify(`Custom compaction: summarizing ${allMessages.length} messages (${tokensBefore.toLocaleString()} tokens) with ${model.id}...`, "info");
37
+ // Convert messages to readable text format
38
+ const conversationText = serializeConversation(convertToLlm(allMessages));
39
+ // Include previous summary context if available
40
+ const previousContext = previousSummary ? `\n\nPrevious session summary for context:\n${previousSummary}` : "";
41
+ // Build messages that ask for a comprehensive summary
42
+ const summaryMessages = [
43
+ {
44
+ role: "user",
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: `You are a conversation summarizer. Create a comprehensive summary of this conversation that captures:${previousContext}
49
+
50
+ 1. The main goals and objectives discussed
51
+ 2. Key decisions made and their rationale
52
+ 3. Important code changes, file modifications, or technical details
53
+ 4. Current state of any ongoing work
54
+ 5. Any blockers, issues, or open questions
55
+ 6. Next steps that were planned or suggested
56
+
57
+ Be thorough but concise. The summary will replace the ENTIRE conversation history, so include all information needed to continue the work effectively.
58
+
59
+ Format the summary as structured markdown with clear sections.
60
+
61
+ <conversation>
62
+ ${conversationText}
63
+ </conversation>`,
64
+ },
65
+ ],
66
+ timestamp: Date.now(),
67
+ },
68
+ ];
69
+ try {
70
+ // Pass signal to honor abort requests (e.g., user cancels compaction)
71
+ const response = await complete(model, { messages: summaryMessages }, { apiKey, maxTokens: 8192, signal });
72
+ const summary = response.content
73
+ .filter((c) => c.type === "text")
74
+ .map((c) => c.text)
75
+ .join("\n");
76
+ if (!summary.trim()) {
77
+ if (!signal.aborted)
78
+ ctx.ui.notify("Compaction summary was empty, using default compaction", "warning");
79
+ return;
80
+ }
81
+ // Return compaction content - SessionManager adds id/parentId
82
+ // Use firstKeptEntryId from preparation to keep recent messages
83
+ return {
84
+ compaction: {
85
+ summary,
86
+ firstKeptEntryId,
87
+ tokensBefore,
88
+ },
89
+ };
90
+ }
91
+ catch (error) {
92
+ const message = error instanceof Error ? error.message : String(error);
93
+ ctx.ui.notify(`Compaction failed: ${message}`, "error");
94
+ // Fall back to default compaction on error
95
+ return;
96
+ }
97
+ });
98
+ }
99
+ //# sourceMappingURL=custom-compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-compaction.js","sourceRoot":"","sources":["../../src/extensions/custom-compaction.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAclE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAmGtE;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAkBnF"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAiBlE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA0GtE;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAkBnF"}
@@ -15,10 +15,13 @@ import { homedir } from 'os';
15
15
  import { join, dirname, resolve } from 'path';
16
16
  import { fileURLToPath } from 'url';
17
17
  const __dirname = dirname(fileURLToPath(import.meta.url));
18
- // Resolve the extensions/ and skills/ directories at the reeboot package root
19
- // Compiled output is at dist/ so we go up two levels: dist/extensions/ dist/ → reeboot/ then across to extensions/
18
+ // Resolve the extensions/ and skills/ directories at the reeboot package root.
19
+ // __dirname is dist/extensions/ (compiled output location).
20
+ // All bundled extensions are compiled to dist/extensions/*.js via the main tsc.
21
+ // In vitest (source mode), __dirname = src/extensions/ so .js files don't exist —
22
+ // importExt() falls back to .ts for that case.
20
23
  const PACKAGE_ROOT = resolve(__dirname, '../../');
21
- const BUNDLED_EXTENSIONS_DIR = join(PACKAGE_ROOT, 'extensions');
24
+ const BUNDLED_EXTENSIONS_DIR = join(__dirname);
22
25
  const BUNDLED_SKILLS_DIR = join(PACKAGE_ROOT, 'skills');
23
26
  // ─── getBundledFactories ─────────────────────────────────────────────────────
24
27
  // Returns the list of bundled ExtensionFactory functions based on config toggles.
@@ -43,7 +46,7 @@ export function getBundledFactories(config) {
43
46
  if (sandboxEnabled) {
44
47
  factories.push((pi) => {
45
48
  // Lazy-load so missing deps don't break startup in CI / test
46
- const sandboxPath = join(BUNDLED_EXTENSIONS_DIR, 'sandbox', 'index.ts');
49
+ const sandboxPath = join(PACKAGE_ROOT, 'extensions', 'sandbox', 'index.ts');
47
50
  try {
48
51
  // Extensions are loaded by DefaultResourceLoader as file paths; we register
49
52
  // a no-op factory here and let the loader discover the file-based extension.
@@ -54,65 +57,70 @@ export function getBundledFactories(config) {
54
57
  }
55
58
  // Simple file-based extensions registered as inline factories for reliability.
56
59
  // We use dynamic import factories so TypeScript strict mode is satisfied.
60
+ // Helper: try compiled .js first (production dist/extensions/),
61
+ // fall back to .ts (vitest runs from src/extensions/ without compilation)
62
+ const importExt = (name) => import(join(BUNDLED_EXTENSIONS_DIR, `${name}.js`))
63
+ .catch(() => import(join(BUNDLED_EXTENSIONS_DIR, `${name}.ts`)))
64
+ .catch(() => null);
57
65
  if (confirmEnabled) {
58
66
  factories.push(async (pi) => {
59
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'confirm-destructive.ts')).catch(() => null);
67
+ const mod = await importExt('confirm-destructive');
60
68
  if (mod?.default)
61
69
  mod.default(pi);
62
70
  });
63
71
  }
64
72
  if (protectedEnabled) {
65
73
  factories.push(async (pi) => {
66
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'protected-paths.ts')).catch(() => null);
74
+ const mod = await importExt('protected-paths');
67
75
  if (mod?.default)
68
76
  mod.default(pi);
69
77
  });
70
78
  }
71
79
  if (sessionNameEnabled) {
72
80
  factories.push(async (pi) => {
73
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'session-name.ts')).catch(() => null);
81
+ const mod = await importExt('session-name');
74
82
  if (mod?.default)
75
83
  mod.default(pi);
76
84
  });
77
85
  }
78
86
  if (compactionEnabled) {
79
87
  factories.push(async (pi) => {
80
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'custom-compaction.ts')).catch(() => null);
88
+ const mod = await importExt('custom-compaction');
81
89
  if (mod?.default)
82
90
  mod.default(pi);
83
91
  });
84
92
  }
85
93
  if (gitCheckpointEnabled) {
86
94
  factories.push(async (pi) => {
87
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'git-checkpoint.ts')).catch(() => null);
95
+ const mod = await importExt('git-checkpoint');
88
96
  if (mod?.default)
89
97
  mod.default(pi);
90
98
  });
91
99
  }
92
100
  if (schedulerEnabled) {
93
101
  factories.push(async (pi) => {
94
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'scheduler-tool.ts')).catch(() => null);
102
+ const mod = await importExt('scheduler-tool');
95
103
  if (mod?.default)
96
104
  mod.default(pi);
97
105
  });
98
106
  }
99
107
  if (tokenMeterEnabled) {
100
108
  factories.push(async (pi) => {
101
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'token-meter.ts')).catch(() => null);
109
+ const mod = await importExt('token-meter');
102
110
  if (mod?.default)
103
111
  mod.default(pi);
104
112
  });
105
113
  }
106
114
  if (webSearchEnabled) {
107
115
  factories.push(async (pi) => {
108
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'web-search.ts')).catch(() => null);
116
+ const mod = await importExt('web-search');
109
117
  if (mod?.default)
110
- await mod.default(pi);
118
+ await mod.default(pi, config);
111
119
  });
112
120
  }
113
121
  if (skillManagerEnabled) {
114
122
  factories.push(async (pi) => {
115
- const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'skill-manager.ts')).catch(() => null);
123
+ const mod = await importExt('skill-manager');
116
124
  if (mod?.default)
117
125
  await mod.default(pi, config);
118
126
  });
@@ -121,13 +129,13 @@ export function getBundledFactories(config) {
121
129
  }
122
130
  // ─── createLoader ─────────────────────────────────────────────────────────────
123
131
  export function createLoader(context, config) {
124
- const agentDir = join(homedir(), '.reeboot');
132
+ const agentDir = join(homedir(), '.reeboot', 'agent');
125
133
  const extensionFactories = getBundledFactories(config);
126
134
  // For sandbox, use additionalExtensionPaths so DefaultResourceLoader handles it
127
135
  const additionalExtensionPaths = [];
128
136
  const core = config?.extensions?.core ?? {};
129
137
  if (core.sandbox ?? true) {
130
- additionalExtensionPaths.push(join(BUNDLED_EXTENSIONS_DIR, 'sandbox', 'index.ts'));
138
+ additionalExtensionPaths.push(join(PACKAGE_ROOT, 'extensions', 'sandbox', 'index.ts'));
131
139
  }
132
140
  return new DefaultResourceLoader({
133
141
  cwd: context.workspacePath,
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Protected Paths Extension
3
+ *
4
+ * Blocks write and edit operations to protected paths.
5
+ * Useful for preventing accidental modifications to sensitive files.
6
+ */
7
+ import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
8
+ export default function (pi: ExtensionAPI): void;
9
+ //# sourceMappingURL=protected-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protected-paths.d.ts","sourceRoot":"","sources":["../../src/extensions/protected-paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAoBxC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Protected Paths Extension
3
+ *
4
+ * Blocks write and edit operations to protected paths.
5
+ * Useful for preventing accidental modifications to sensitive files.
6
+ */
7
+ export default function (pi) {
8
+ const protectedPaths = [".env", ".git/", "node_modules/"];
9
+ pi.on("tool_call", async (event, ctx) => {
10
+ if (event.toolName !== "write" && event.toolName !== "edit") {
11
+ return undefined;
12
+ }
13
+ const path = event.input.path;
14
+ const isProtected = protectedPaths.some((p) => path.includes(p));
15
+ if (isProtected) {
16
+ if (ctx.hasUI) {
17
+ ctx.ui.notify(`Blocked write to protected path: ${path}`, "warning");
18
+ }
19
+ return { block: true, reason: `Path "${path}" is protected` };
20
+ }
21
+ return undefined;
22
+ });
23
+ }
24
+ //# sourceMappingURL=protected-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protected-paths.js","sourceRoot":"","sources":["../../src/extensions/protected-paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,OAAO,WAAW,EAAgB;IACxC,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IAE1D,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACvC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAc,CAAC;QACxC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,WAAW,EAAE,CAAC;YACjB,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,oCAAoC,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,gBAAgB,EAAE,CAAC;QAC/D,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Scheduler Tool Extension
3
+ *
4
+ * Registers schedule_task, list_tasks, cancel_task, pause_task, resume_task,
5
+ * update_task tools backed by SQLite, plus the /tasks slash command.
6
+ * Uses getDb() for DB access and integrates with the Scheduler singleton.
7
+ *
8
+ * Also registers:
9
+ * - timer: one-shot non-blocking wait (fires pi.sendMessage triggerTurn)
10
+ * - heartbeat: periodic non-blocking wake-up (start/stop/status)
11
+ * - bash pre-hook: sleep interceptor (blocks sleep when sole/last command)
12
+ * - session_shutdown: cleans up all in-session timers and heartbeat
13
+ */
14
+ import type { ExtensionAPI } from '@mariozechner/pi-coding-agent';
15
+ /**
16
+ * Returns true if sleep is the sole command or the last command in a chain.
17
+ * Splits on && and single | (not || which is OR-fallback).
18
+ */
19
+ export declare function isSleepOnlyOrLast(command: string): boolean;
20
+ export declare class TimerManager {
21
+ private _timers;
22
+ private _heartbeat;
23
+ setTimer(pi: ExtensionAPI, seconds: number, message: string, id: string): void;
24
+ cancelTimer(id: string): void;
25
+ startHeartbeat(pi: ExtensionAPI, intervalSeconds: number, message: string): void;
26
+ stopHeartbeat(): void;
27
+ getHeartbeatStatus(): string;
28
+ clearAll(): void;
29
+ }
30
+ export default function (pi: ExtensionAPI): void;
31
+ //# sourceMappingURL=scheduler-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler-tool.d.ts","sourceRoot":"","sources":["../../src/extensions/scheduler-tool.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAIlE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM1D;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAoD;IACnE,OAAO,CAAC,UAAU,CAMF;IAIhB,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAoB9E,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAU7B,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA6BhF,aAAa,IAAI,IAAI;IAOrB,kBAAkB,IAAI,MAAM;IAQ5B,QAAQ,IAAI,IAAI;CAKjB;AAID,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAgSxC"}