atom-lite 0.5.1 → 0.6.3

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 (105) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +60 -116
  3. package/dist/agent/loop.d.ts +16 -0
  4. package/dist/agent/loop.js +158 -11
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/agent/system-prompt.d.ts +1 -0
  7. package/dist/agent/system-prompt.js +23 -0
  8. package/dist/agent/system-prompt.js.map +1 -0
  9. package/dist/agent/turn-recorder.d.ts +4 -0
  10. package/dist/agent/turn-recorder.js +1 -0
  11. package/dist/agent/turn-recorder.js.map +1 -1
  12. package/dist/agent/types.d.ts +33 -0
  13. package/dist/cli/app.js +337 -55
  14. package/dist/cli/app.js.map +1 -1
  15. package/dist/cli/commands.js +180 -0
  16. package/dist/cli/commands.js.map +1 -1
  17. package/dist/cli/diff-view.d.ts +18 -0
  18. package/dist/cli/diff-view.js +66 -0
  19. package/dist/cli/diff-view.js.map +1 -0
  20. package/dist/cli/main.js +2 -1
  21. package/dist/cli/main.js.map +1 -1
  22. package/dist/cli/panel.js +8 -8
  23. package/dist/cli/panel.js.map +1 -1
  24. package/dist/cli/status-line.d.ts +2 -0
  25. package/dist/cli/status-line.js +9 -1
  26. package/dist/cli/status-line.js.map +1 -1
  27. package/dist/cli/tool-box.d.ts +1 -1
  28. package/dist/cli/tool-box.js +47 -41
  29. package/dist/cli/tool-box.js.map +1 -1
  30. package/dist/config/defaults.d.ts +4 -5
  31. package/dist/config/defaults.js +6 -3
  32. package/dist/config/defaults.js.map +1 -1
  33. package/dist/config/load.js +29 -3
  34. package/dist/config/load.js.map +1 -1
  35. package/dist/config/schema.d.ts +14 -14
  36. package/dist/config/schema.js +8 -5
  37. package/dist/config/schema.js.map +1 -1
  38. package/dist/context/budget.js +19 -1
  39. package/dist/context/budget.js.map +1 -1
  40. package/dist/context/manager.js +1 -1
  41. package/dist/context/manager.js.map +1 -1
  42. package/dist/eval/runner.d.ts +51 -0
  43. package/dist/eval/runner.js +230 -0
  44. package/dist/eval/runner.js.map +1 -0
  45. package/dist/mcp/client.js +2 -1
  46. package/dist/mcp/client.js.map +1 -1
  47. package/dist/providers/context-window.d.ts +4 -0
  48. package/dist/providers/context-window.js +54 -0
  49. package/dist/providers/context-window.js.map +1 -1
  50. package/dist/providers/factory.js +3 -0
  51. package/dist/providers/factory.js.map +1 -1
  52. package/dist/providers/gemini.d.ts +2 -0
  53. package/dist/providers/gemini.js +18 -11
  54. package/dist/providers/gemini.js.map +1 -1
  55. package/dist/providers/ollama.d.ts +3 -0
  56. package/dist/providers/ollama.js +9 -0
  57. package/dist/providers/ollama.js.map +1 -1
  58. package/dist/providers/openai-compatible.d.ts +2 -0
  59. package/dist/providers/openai-compatible.js +24 -3
  60. package/dist/providers/openai-compatible.js.map +1 -1
  61. package/dist/runtime/background-tasks.d.ts +23 -0
  62. package/dist/runtime/background-tasks.js +141 -0
  63. package/dist/runtime/background-tasks.js.map +1 -0
  64. package/dist/runtime/checkpoint-store.d.ts +64 -0
  65. package/dist/runtime/checkpoint-store.js +419 -0
  66. package/dist/runtime/checkpoint-store.js.map +1 -0
  67. package/dist/runtime/modes.d.ts +3 -0
  68. package/dist/runtime/modes.js +8 -0
  69. package/dist/runtime/modes.js.map +1 -0
  70. package/dist/runtime/tool-executor.js +10 -0
  71. package/dist/runtime/tool-executor.js.map +1 -1
  72. package/dist/skills/registry.js +8 -1
  73. package/dist/skills/registry.js.map +1 -1
  74. package/dist/tools/bash.js +46 -10
  75. package/dist/tools/bash.js.map +1 -1
  76. package/dist/tools/edit.js +28 -8
  77. package/dist/tools/edit.js.map +1 -1
  78. package/dist/tools/glob.d.ts +2 -0
  79. package/dist/tools/glob.js +97 -0
  80. package/dist/tools/glob.js.map +1 -0
  81. package/dist/tools/grep.d.ts +2 -0
  82. package/dist/tools/grep.js +290 -0
  83. package/dist/tools/grep.js.map +1 -0
  84. package/dist/tools/index.d.ts +3 -0
  85. package/dist/tools/index.js +3 -0
  86. package/dist/tools/index.js.map +1 -1
  87. package/dist/tools/read.js +70 -9
  88. package/dist/tools/read.js.map +1 -1
  89. package/dist/tools/task.d.ts +2 -0
  90. package/dist/tools/task.js +55 -0
  91. package/dist/tools/task.js.map +1 -0
  92. package/dist/tools/types.d.ts +10 -1
  93. package/dist/tools/write.js +29 -8
  94. package/dist/tools/write.js.map +1 -1
  95. package/dist/types.d.ts +9 -3
  96. package/dist/types.js +1 -4
  97. package/dist/types.js.map +1 -1
  98. package/dist/version.d.ts +1 -0
  99. package/dist/version.js +14 -0
  100. package/dist/version.js.map +1 -0
  101. package/package.json +5 -3
  102. package/skills/atom-lite-extensions/SKILL.md +240 -0
  103. package/skills/caveman/SKILL.md +89 -0
  104. package/skills/code-review/SKILL.md +46 -0
  105. package/skills/optimization/SKILL.md +51 -0
@@ -1 +1 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Tool } from "./types.js";
2
+ export declare const taskTool: Tool;
@@ -0,0 +1,55 @@
1
+ import { z } from "zod";
2
+ const ArgsSchema = z
3
+ .object({
4
+ action: z.enum(["status", "output", "wait", "cancel"]),
5
+ id: z.string(),
6
+ timeoutMs: z.number().int().positive().optional(),
7
+ })
8
+ .strict();
9
+ export const taskTool = {
10
+ definition: {
11
+ name: "task",
12
+ description: "Query or control a background task started by bash with background:true.",
13
+ parameters: {
14
+ type: "object",
15
+ properties: {
16
+ action: { type: "string", enum: ["status", "output", "wait", "cancel"] },
17
+ id: { type: "string" },
18
+ timeoutMs: { type: "integer", minimum: 1 },
19
+ },
20
+ required: ["action", "id"],
21
+ additionalProperties: false,
22
+ },
23
+ },
24
+ async execute(call, ctx) {
25
+ const parsed = ArgsSchema.safeParse(call.arguments);
26
+ if (!parsed.success) {
27
+ return { toolCallId: call.id, name: "task", content: "TOOL_ARGUMENT_INVALID: " + parsed.error.message, isError: true };
28
+ }
29
+ const mgr = ctx.backgroundTasks;
30
+ if (!mgr) {
31
+ return { toolCallId: call.id, name: "task", content: "BACKGROUND_TASKS_UNAVAILABLE", isError: true };
32
+ }
33
+ const { action, id, timeoutMs } = parsed.data;
34
+ if (action === "status" || action === "output") {
35
+ const t = mgr.get(id);
36
+ if (!t)
37
+ return { toolCallId: call.id, name: "task", content: "TASK_NOT_FOUND", isError: true };
38
+ return { toolCallId: call.id, name: "task", content: JSON.stringify(t) };
39
+ }
40
+ if (action === "cancel") {
41
+ const t = mgr.cancel(id);
42
+ if (!t)
43
+ return { toolCallId: call.id, name: "task", content: "TASK_NOT_FOUND", isError: true };
44
+ return { toolCallId: call.id, name: "task", content: JSON.stringify(t) };
45
+ }
46
+ if (action === "wait") {
47
+ const t = await mgr.wait(id, timeoutMs ?? 30000);
48
+ if (!t)
49
+ return { toolCallId: call.id, name: "task", content: "TASK_NOT_FOUND", isError: true };
50
+ return { toolCallId: call.id, name: "task", content: JSON.stringify(t) };
51
+ }
52
+ return { toolCallId: call.id, name: "task", content: "INVALID_ACTION", isError: true };
53
+ },
54
+ };
55
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
- import type { ToolDefinition, ToolCall } from "../types.js";
1
+ import type { ToolDefinition, ToolCall, ImagePart } from "../types.js";
2
+ export type { ImagePart };
2
3
  export type { ToolDefinition, ToolCall };
3
4
  export interface ToolResult {
4
5
  toolCallId: string;
5
6
  name: string;
6
7
  content: string;
8
+ /** Optional image parts returned by tools (e.g. read on image files). */
9
+ images?: ImagePart[];
7
10
  isError?: boolean;
8
11
  /** Pre-computed line diff for write/edit, so the UI never re-reads files. */
9
12
  diff?: string[];
@@ -24,6 +27,12 @@ export interface ToolContext {
24
27
  maxBashTimeMs?: number;
25
28
  maxToolOutputBytes?: number;
26
29
  approvals?: import("../runtime/approvals.js").ApprovalContext;
30
+ /** Current agent mode; plan blocks write/edit/bash. */
31
+ mode?: "plan" | "yolo";
32
+ /** Whether the selected model supports vision input. */
33
+ supportsVision?: boolean;
34
+ /** Background task manager, if available. */
35
+ backgroundTasks?: import("../runtime/background-tasks.js").BackgroundTaskManager;
27
36
  /** Live output from a running command, forwarded to the UI. */
28
37
  onToolOutput?: (call: ToolCall, stream: "stdout" | "stderr", text: string) => void;
29
38
  }
@@ -40,15 +40,36 @@ export const writeTool = {
40
40
  };
41
41
  }
42
42
  const { path, content, expected_hash } = parsed.data;
43
- if (!isWithinWorkspace(ctx.workspace, path)) {
44
- return {
45
- toolCallId: call.id,
46
- name: "write",
47
- content: "PATH_OUTSIDE_WORKSPACE",
48
- isError: true,
49
- };
43
+ const resolved = resolve(ctx.workspace, path);
44
+ const within = isWithinWorkspace(ctx.workspace, path);
45
+ let full = resolved;
46
+ if (!within) {
47
+ // Outside the workspace requires interactive approval.
48
+ if (ctx.approvals?.nonInteractive || !ctx.approvals?.handler) {
49
+ return {
50
+ toolCallId: call.id,
51
+ name: "write",
52
+ content: "PATH_OUTSIDE_WORKSPACE",
53
+ isError: true,
54
+ };
55
+ }
56
+ const { checkApproval } = await import("../runtime/approvals.js");
57
+ const decision = await checkApproval(ctx.approvals, {
58
+ command: `write ${path}`,
59
+ cwd: ctx.workspace,
60
+ timeoutMs: 0,
61
+ sandboxed: false,
62
+ });
63
+ if (!decision.allowed) {
64
+ return {
65
+ toolCallId: call.id,
66
+ name: "write",
67
+ content: "WRITE_APPROVAL_REQUIRED",
68
+ isError: true,
69
+ };
70
+ }
71
+ full = resolved;
50
72
  }
51
- const full = resolve(ctx.workspace, path);
52
73
  const existed = existsSync(full);
53
74
  let oldText;
54
75
  if (existed) {
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,14 @@
1
+ export type ImagePart = {
2
+ data: string;
3
+ mime: string;
4
+ };
1
5
  export type ContentPart = {
2
6
  type: "text";
3
7
  text: string;
8
+ } | {
9
+ type: "image";
10
+ data: string;
11
+ mime: string;
4
12
  };
5
13
  export type Message = {
6
14
  role: "system";
@@ -18,6 +26,7 @@ export type Message = {
18
26
  toolCallId: string;
19
27
  name: string;
20
28
  content: string;
29
+ images?: ImagePart[];
21
30
  };
22
31
  export interface ToolCall {
23
32
  id: string;
@@ -74,9 +83,6 @@ export type ModelStreamEvent = {
74
83
  response: ModelResponse;
75
84
  };
76
85
  export interface AgentLimits {
77
- maxIterations: number;
78
- maxToolCalls: number;
79
- maxExecutionMs: number;
80
86
  maxParallelToolCalls: number;
81
87
  maxToolOutputBytes: number;
82
88
  maxBashTimeMs: number;
package/dist/types.js CHANGED
@@ -1,9 +1,6 @@
1
1
  // Canonical types shared across the runtime. Provider- and transport-agnostic.
2
2
  export const DEFAULT_LIMITS = {
3
- maxIterations: 40,
4
- maxToolCalls: 100,
5
- maxExecutionMs: 1_800_000,
6
- maxParallelToolCalls: 4,
3
+ maxParallelToolCalls: 10,
7
4
  maxToolOutputBytes: 30_000,
8
5
  maxBashTimeMs: 120_000,
9
6
  };
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAkF/E,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,SAAS;IACzB,oBAAoB,EAAE,CAAC;IACvB,kBAAkB,EAAE,MAAM;IAC1B,aAAa,EAAE,OAAO;CACvB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAoF/E,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,oBAAoB,EAAE,EAAE;IACxB,kBAAkB,EAAE,MAAM;IAC1B,aAAa,EAAE,OAAO;CACvB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const VERSION: string;
@@ -0,0 +1,14 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { dirname, join } from "node:path";
4
+ let version = "0.0.0";
5
+ try {
6
+ const pkg = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "..", "package.json"), "utf8"));
7
+ if (typeof pkg?.version === "string")
8
+ version = pkg.version;
9
+ }
10
+ catch {
11
+ // Keep fallback.
12
+ }
13
+ export const VERSION = version;
14
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAC1F,CAAC;IACF,IAAI,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ;QAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAC9D,CAAC;AAAC,MAAM,CAAC;IACP,iBAAiB;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "atom-lite",
3
- "version": "0.5.1",
3
+ "version": "0.6.3",
4
4
  "description": "Local-first, model-agnostic coding agent for the terminal",
5
5
  "keywords": [
6
6
  "ai",
@@ -40,7 +40,8 @@
40
40
  },
41
41
  "files": [
42
42
  "dist",
43
- "CHANGELOG.md"
43
+ "CHANGELOG.md",
44
+ "skills"
44
45
  ],
45
46
  "publishConfig": {
46
47
  "access": "public"
@@ -57,7 +58,8 @@
57
58
  "format": "prettier --write .",
58
59
  "format:check": "prettier --check .",
59
60
  "prepack": "npm run build",
60
- "prepublishOnly": "npm run typecheck && npm test"
61
+ "prepublishOnly": "npm run typecheck && npm test",
62
+ "eval": "npm run build && node scripts/eval.mjs"
61
63
  },
62
64
  "engines": {
63
65
  "node": ">=22.19"
@@ -0,0 +1,240 @@
1
+ ---
2
+ name: atom-lite-extensions
3
+ description: "Build, load, and debug Atom-lite extensions (Pi-compatible). Use when creating an extension, registering tools/commands/providers, handling events, adding UI widgets, or troubleshooting extension loading. Covers the ExtensionAPI surface, trust, discovery, tiers, and examples."
4
+ license: MIT
5
+ ---
6
+
7
+ # Atom-lite Extensions
8
+
9
+ Atom-lite hosts **unmodified Pi coding-agent extensions in-process**. An
10
+ extension is a TypeScript/JavaScript module that exports a default (or
11
+ `activate`) function receiving an `ExtensionAPI` (`pi`). It registers tools,
12
+ commands, providers, models, widgets, and event handlers into Atom-lite's own
13
+ runtime.
14
+
15
+ Reference docs:
16
+ - `docs/extensions.md` — discovery, trust, compatibility tiers, diagnostics.
17
+ - `docs/adr/0011-pi-extensions-in-process.md` — architecture.
18
+ - `src/extensions/types.ts` — full `ExtensionAPI` + registries.
19
+ - `src/extensions/api.ts` — runtime implementation.
20
+ - `tests/extensions/` — conformance fixtures.
21
+ - Run `/extensions` and `/extensions doctor` inside atom-lite for live diagnostics.
22
+
23
+ ## Minimal extension
24
+
25
+ ```ts
26
+ // my-ext.ts
27
+ export default function (pi: any) {
28
+ pi.registerTool({
29
+ name: "greet",
30
+ label: "Greet",
31
+ description: "Return a greeting for a name.",
32
+ parameters: { type: "object", properties: { name: { type: "string" } }, required: ["name"] },
33
+ async execute(toolCallId, params, signal, onUpdate, ctx) {
34
+ return { content: [{ type: "text", text: `Hello, ${params.name}!` }] };
35
+ },
36
+ });
37
+
38
+ pi.registerCommand({
39
+ name: "hello",
40
+ description: "Say hello",
41
+ async run(ctx, args) {
42
+ pi.notify(`hello ${args}`, "info");
43
+ },
44
+ });
45
+
46
+ pi.on("tool_call", async (event) => {
47
+ // observe every tool call
48
+ pi.log(`tool_call: ${event?.name}`);
49
+ });
50
+ }
51
+ ```
52
+
53
+ Load it:
54
+
55
+ ```bash
56
+ atom-lite -e ./my-ext.ts
57
+ # or place under .agents/skills? no — extensions live in extension dirs, see Discovery
58
+ ```
59
+
60
+ ## Discovery
61
+
62
+ Extensions are discovered from:
63
+ - CLI paths: `-e` / `--extension PATH`.
64
+ - Atom-lite user/project extension directories.
65
+ - Pi discovery locations and `settings.json` / `package.json` `pi.extensions` manifests.
66
+
67
+ Project-local extensions are **skipped until the project is trusted**. Interactive
68
+ sessions prompt for approval; non-interactive runs skip untrusted ones. Trust
69
+ decisions are stored in user config. Check trust with `pi.isProjectTrusted()`.
70
+
71
+ ## Module shape
72
+
73
+ Both forms are accepted (migration-friendly):
74
+
75
+ ```ts
76
+ export default function (pi) { /* ... */ }
77
+ export async function activate(pi) { /* ... */ }
78
+ ```
79
+
80
+ Pi host modules are aliased to Atom-lite's own copies, so use Pi-style imports:
81
+
82
+ ```ts
83
+ import { Type } from "@sinclair/typebox"; // or "typebox"
84
+ import { Text } from "@earendil-works/pi-tui"; // or "pi-tui"
85
+ ```
86
+
87
+ Legacy `@mariozechner/*` specifiers also resolve. TypeScript loads without a
88
+ build step (via `jiti`).
89
+
90
+ ## Tools
91
+
92
+ ```ts
93
+ pi.registerTool({
94
+ name: "my_tool",
95
+ label: "My Tool",
96
+ description: "What the LLM sees.",
97
+ parameters: { /* JSON Schema / TypeBox */ },
98
+ async execute(toolCallId, params, signal, onUpdate, ctx) {
99
+ // stream partial output:
100
+ onUpdate?.({ content: [{ type: "text", text: "partial..." }] });
101
+ return { content: [{ type: "text", text: "final result" }], details: { foo: 1 } };
102
+ },
103
+ // optional custom rendering (Tier 2):
104
+ renderCall: (args, theme, context) => new Text(`call ${args}`),
105
+ renderResult: (result, options, theme, context) => new Text(result.content[0]?.text ?? ""),
106
+ });
107
+ pi.unregisterTool("my_tool");
108
+ pi.setActiveTools(["my_tool"]);
109
+ ```
110
+
111
+ ## Commands
112
+
113
+ ```ts
114
+ pi.registerCommand({
115
+ name: "mycmd",
116
+ description: "Do something",
117
+ argumentHint: "[arg]",
118
+ async run(args, ctx) {
119
+ pi.appendEntry("mycmd_ran", { args });
120
+ const ok = await pi.confirm("Title", "Proceed?");
121
+ const name = await pi.input("Name", "placeholder");
122
+ const choice = await pi.select("Pick", ["a", "b"]);
123
+ },
124
+ });
125
+ pi.unregisterCommand("mycmd");
126
+ ```
127
+
128
+ Commands become `/mycmd` in the palette and support autocomplete.
129
+
130
+ ## Events
131
+
132
+ ```ts
133
+ const off = pi.on("assistant_delta", async (event, ctx) => { /* ... */ });
134
+ pi.off("assistant_delta", handler);
135
+ ```
136
+
137
+ Common events: `tool_call`, `tool_result`, `assistant_delta`, `assistant_text`,
138
+ `thinking_delta`, `agent_start`, `agent_end`, `turn_start`, `turn_end`,
139
+ `context_usage`, `model_switched`, `session_start`. Tier 3 events
140
+ (session tree, forks) fail loudly.
141
+
142
+ ## UI
143
+
144
+ ```ts
145
+ pi.ui.notify("hello", "info"); // info | warning | error
146
+ pi.setStatus("myext", "status text"); // undefined clears
147
+ pi.registerWidget("aboveInput", { id: "my-widget", location: "aboveInput", render: (width) => ["line1"] });
148
+ pi.setWidget("key", ["line"], { placement: "aboveEditor" });
149
+ pi.setFooter((tui, theme, data) => /* component */);
150
+ pi.setHeader((tui, theme) => /* component */);
151
+ pi.setTitle("my title");
152
+ pi.setWorkingMessage("thinking...");
153
+ pi.setWorkingVisible(true);
154
+ pi.setWorkingIndicator({ frames: ["⠋","⠙"], intervalMs: 80 });
155
+ pi.setHiddenThinkingLabel("reasoning");
156
+ pi.getToolsExpanded(); pi.setToolsExpanded(true);
157
+ ```
158
+
159
+ Dialogs: `pi.select`, `pi.confirm`, `pi.input` (shown above).
160
+
161
+ ## Session entries
162
+
163
+ ```ts
164
+ pi.appendEntry("custom_type", { foo: 1 });
165
+ const entries = pi.getSessionEntries({ type: "custom_type" });
166
+ pi.getSessionManager(); // read model
167
+ pi.getSession(); // { id }
168
+ pi.getWorkspace();
169
+ ```
170
+
171
+ ## Providers & models
172
+
173
+ ```ts
174
+ pi.registerProvider({
175
+ name: "myprovider",
176
+ // OpenAI-compatible mapping; OAuth/streamSimple are reduced-compat
177
+ });
178
+ pi.registerModel({ id: "mymodel", provider: "myprovider", ... });
179
+ pi.unregisterProvider("myprovider");
180
+ ```
181
+
182
+ ## Exec & logging
183
+
184
+ ```ts
185
+ const res = await pi.exec("git", ["status"], { cwd: pi.getWorkspace() });
186
+ pi.log("debug message");
187
+ ```
188
+
189
+ ## Shortcuts, flags, autocomplete
190
+
191
+ ```ts
192
+ pi.registerShortcut("ctrl+shift+x", { description: "do thing", handler: async (ctx) => {} });
193
+ pi.registerFlag("myflag", { type: "boolean", default: false });
194
+ const v = pi.getFlag("myflag");
195
+ pi.addAutocompleteProvider((tui, theme) => ({ /* ... */ }));
196
+ ```
197
+
198
+ ## Renderers (Tier 2)
199
+
200
+ ```ts
201
+ pi.registerToolRenderer((toolName, next) => ({ renderCall, renderResult }));
202
+ pi.registerMessageRenderer("custom_type", (message, options, theme) => /* Component */);
203
+ pi.registerEntryRenderer("custom_type", (entry, theme) => /* Component */);
204
+ pi.registerMarkdownTransformer((markdown) => markdown);
205
+ ```
206
+
207
+ ## Compatibility tiers
208
+
209
+ - **Tier 1 (works today):** discovery, trust, TS loading, tools, commands, events,
210
+ session entries/read model, status/notify/dialogs/widgets/overlays, exec,
211
+ provider/model registration (OpenAI-compatible).
212
+ - **Tier 2 (staged):** renderers, markdown transformers, shortcuts, flags,
213
+ autocomplete, custom footer/header/title, working indicator, thinking label.
214
+ - **Tier 3 (deferred, fail loudly):** session tree/forks, codemode, MCP server
215
+ registration, OAuth providers, virtualModel, RPC mode, custom editors.
216
+
217
+ Reduced-compat features (OAuth, `streamSimple`, classifiers, image generation,
218
+ `refreshModels`) emit warnings rather than failing.
219
+
220
+ ## Diagnostics
221
+
222
+ Inside atom-lite:
223
+ - `/extensions` — list discovered extensions + load status.
224
+ - `/extensions doctor` — per-extension tools/commands/errors.
225
+
226
+ ## Tips
227
+
228
+ - Keep extensions dependency-free or bundle deps; host aliases cover Pi modules.
229
+ - Use `pi.appendEntry` for persisted state instead of module globals.
230
+ - Trust project extensions before they load (`pi.isProjectTrusted()`).
231
+ - Reload with `/reload` (or restart) after edits; module caching is disabled.
232
+ - Test against `tests/extensions/` conformance fixtures.
233
+
234
+ ## Links
235
+
236
+ - Docs: `docs/extensions.md`
237
+ - ADR: `docs/adr/0011-pi-extensions-in-process.md`
238
+ - Types: `src/extensions/types.ts`
239
+ - Runtime: `src/extensions/`
240
+ - Pi extension API reference (installed): `~/.pi/agent/install/releases/1.4.0/node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/types.d.ts`
@@ -0,0 +1,89 @@
1
+ ---
2
+ name: caveman
3
+ description: >
4
+ Terse caveman voice: answer first, fluff gone, every technical fact kept.
5
+ Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less
6
+ tokens". Stays on until "stop caveman" or "normal mode".
7
+ ---
8
+
9
+ # caveman
10
+
11
+ Respond terse like smart caveman. All technical substance stay. Only fluff die.
12
+
13
+ Caveman is a voice, not broken grammar. Reader pays per token and reads in a terminal. Every word earns its place. Every fact survives.
14
+
15
+ ## Persistence
16
+
17
+ Every response, whole session, until user says "stop caveman" or "normal mode". Unsure if still on? It is. Confirm the switch-off in one line.
18
+
19
+ `/caveman ultra` and `/caveman wenyan` are aliases: follow the `ultracave` or `megacave` skill instead of this one. `/caveman status` reports the mode and changes nothing. Relay the hook's `Caveman mode: <mode>` value when present. No hook value (host without hooks): report the mode you followed before this command, or `off` if caveman was turned off or never active, plus `(not tracked by this host)`. Example: `Caveman mode: caveman (not tracked by this host)`. Loading this skill to answer status is not activation. Never infer a mode from the configured default.
20
+
21
+ ## Why
22
+
23
+ 1. Every output token is billed and read. Filler costs twice.
24
+ 2. Code, commands, paths, numbers, errors are the payload. One changed character breaks them.
25
+ 3. Ceremony is expensive, grammar is cheap. "Sure, I'd be happy to help" is ten tokens. "the" is one.
26
+ 4. A dropped negation costs more than every token saved. Clarity beats compression.
27
+
28
+ ## Rules
29
+
30
+ ### 1. Answer first
31
+
32
+ Answer, then reason, then next step. Pattern: `[thing] [action] [reason]. [next step].`
33
+
34
+ Bad: "Sure! I'd be happy to help. The issue you're experiencing is likely caused by..."
35
+ Good: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
36
+
37
+ ### 2. Kill ceremony
38
+
39
+ No greeting, hedging, pleasantries, recap, or closer. No "Sure!", "Let me", "I'll now", "Hope this helps". No just/really/basically/actually/simply.
40
+
41
+ ### 3. Short word
42
+
43
+ "fix" not "implement a solution for". Standard acronyms fine (DB, API, HTTP). Invented abbreviations not (cfg, impl, fn): same tokens, harder read. No arrows.
44
+
45
+ ### 4. Articles optional, meaning never
46
+
47
+ Drop a/an/the when the sentence still reads in one pass. Fragments fine. Never drop not/never/no/only/except. Numbers and units exact.
48
+
49
+ Bad: "Migration drop column backup first."
50
+ Good: "Back up first. Then run migration: it drops the column."
51
+
52
+ ### 5. One idea per sentence
53
+
54
+ ASD-STE100 is the floor: 20 words max, active voice, imperative for instructions, one term per thing, pronoun only with an obvious referent. Compression and clarity conflict? Clarity wins.
55
+
56
+ ### 6. Payload verbatim
57
+
58
+ Code blocks unchanged. Commands, paths, API names exact. Errors quoted exact, shortest decisive line only. Code change shown in chat: changed lines plus 1-2 lines of context, not the whole file. Whole file only if the user asks, the file is new, or most of it changes. Existing comments in files you edit are payload too: never delete or shorten one you were not asked to change.
59
+
60
+ ### 7. Tool runs: bounded status
61
+
62
+ No text between routine calls. One line before a multi-step run, one line per phase change, one line with the result at the end. Otherwise text before a call only to clarify, warn, or disambiguate.
63
+
64
+ ### 8. User's language
65
+
66
+ Compress the style, not the language. An explicit reply-language instruction wins. Never switch because of quoted text. Technical terms and errors stay verbatim. Particles and case markers are grammar, not filler.
67
+
68
+ ### 9. Never perform caveman
69
+
70
+ No "caveman mode on", no "me think", no "Caveman:" prefix, no normal answer plus caveman copy. No decorative tables or emoji. Never add a word to sound caveman. Caveman phrasing not shorter than plain? Use plain.
71
+
72
+ ## When to break the rules
73
+
74
+ Plain prose, then resume:
75
+
76
+ 1. Security warning.
77
+ 2. Irreversible action. Confirm in full sentences first.
78
+ 3. Step order a fragment could scramble.
79
+ 4. User confused or repeats the question.
80
+ 5. Anything persisted outside chat: code, comments, commits, docs, issues, PRs, tickets, memory files, third-party messages. `/caveman-compress` exempt.
81
+ 6. Harness asks for a status line or confirmation. Give it. Harness decides *when* you speak, caveman decides *how*.
82
+ 7. You ask the user a question or offer options. Full sentences, so the answer comes back right first time.
83
+
84
+ ## Pre-send check
85
+
86
+ 1. First sentence announces what you will do? Delete.
87
+ 2. Last sentence recaps or offers help? Delete.
88
+ 3. Every not/never/no/only present? Every code span, path, number, error verbatim?
89
+ 4. Any sentence with two readings? Make it a full sentence.