heyio 0.1.10 → 0.1.12
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.
package/dist/copilot/agents.js
CHANGED
|
@@ -133,6 +133,7 @@ Log important decisions with squad_log_decision so they persist.`,
|
|
|
133
133
|
function buildAgentTools(squadSlug) {
|
|
134
134
|
const shell = defineTool("shell", {
|
|
135
135
|
description: "Run a shell command. Use for git, build tools, file operations, etc.",
|
|
136
|
+
skipPermission: true,
|
|
136
137
|
parameters: z.object({
|
|
137
138
|
command: z.string().describe("The command to run"),
|
|
138
139
|
timeout_secs: z
|
|
@@ -172,6 +173,7 @@ function buildAgentTools(squadSlug) {
|
|
|
172
173
|
});
|
|
173
174
|
const fileOps = defineTool("file_ops", {
|
|
174
175
|
description: "Read, write, or list files on the local filesystem.",
|
|
176
|
+
skipPermission: true,
|
|
175
177
|
parameters: z.object({
|
|
176
178
|
operation: z
|
|
177
179
|
.enum(["read", "write", "list"])
|
|
@@ -230,6 +232,7 @@ function buildAgentTools(squadSlug) {
|
|
|
230
232
|
});
|
|
231
233
|
const squadLogDecision = defineTool("squad_log_decision", {
|
|
232
234
|
description: "Log an important decision for this squad so it persists across sessions.",
|
|
235
|
+
skipPermission: true,
|
|
233
236
|
parameters: z.object({
|
|
234
237
|
decision: z.string().describe("The decision made"),
|
|
235
238
|
context: z.string().optional().describe("Context or reasoning"),
|
|
@@ -87,8 +87,9 @@ Squads are persistent project teams. When a user works on a codebase:
|
|
|
87
87
|
3. Be conversational and helpful. You're IO.
|
|
88
88
|
4. When a task fails, report the error clearly and suggest next steps.
|
|
89
89
|
5. Expand shorthand paths: "~/dev/myapp" → the user's home directory + path.
|
|
90
|
-
6. **Always try before refusing.** You run as a daemon with full
|
|
91
|
-
7. **Use your tools.** When a task requires
|
|
90
|
+
6. **Always try before refusing.** You run as a privileged daemon with full root access. Never assume a command will fail due to permissions — call the tool and report the actual result. Do not say "I can't" or "I don't have permission" without first attempting the operation. If a tool call returns an error, report the ACTUAL error message.
|
|
91
|
+
7. **Use your tools proactively.** When a task requires shell or file operations, call the appropriate tool immediately. Do not describe what command you *would* run — just run it. For git operations, use the \`shell\` tool. For file operations, use \`file_ops\` or \`shell\`.
|
|
92
|
+
8. **Never fabricate errors.** Only report errors that a tool actually returned. If you haven't called a tool, you don't know whether it will succeed or fail.
|
|
92
93
|
${selfEditBlock}${memoryBlock}`;
|
|
93
94
|
}
|
|
94
95
|
//# sourceMappingURL=system-message.js.map
|
package/dist/copilot/tools.js
CHANGED
|
@@ -6,6 +6,7 @@ import { join, dirname, resolve } from "path";
|
|
|
6
6
|
export function createTools(deps) {
|
|
7
7
|
const wikiRead = defineTool("wiki_read", {
|
|
8
8
|
description: "Read a page from IO's knowledge base wiki. Path is relative to the wiki root (e.g., 'pages/preferences/editor.md').",
|
|
9
|
+
skipPermission: true,
|
|
9
10
|
parameters: z.object({
|
|
10
11
|
path: z.string().describe("Relative path to the wiki page"),
|
|
11
12
|
}),
|
|
@@ -18,6 +19,7 @@ export function createTools(deps) {
|
|
|
18
19
|
});
|
|
19
20
|
const wikiWrite = defineTool("wiki_write", {
|
|
20
21
|
description: "Write or update a page in IO's knowledge base. Use this to remember preferences, project details, and important facts. Path must be under pages/ and end in .md.",
|
|
22
|
+
skipPermission: true,
|
|
21
23
|
parameters: z.object({
|
|
22
24
|
path: z.string().describe("Relative path under pages/ (e.g., 'pages/preferences/clone-location.md')"),
|
|
23
25
|
content: z.string().describe("Markdown content to write"),
|
|
@@ -35,6 +37,7 @@ export function createTools(deps) {
|
|
|
35
37
|
});
|
|
36
38
|
const wikiSearch = defineTool("wiki_search", {
|
|
37
39
|
description: "Search IO's knowledge base for matching pages.",
|
|
40
|
+
skipPermission: true,
|
|
38
41
|
parameters: z.object({
|
|
39
42
|
query: z.string().describe("Search query"),
|
|
40
43
|
}),
|
|
@@ -49,6 +52,7 @@ export function createTools(deps) {
|
|
|
49
52
|
});
|
|
50
53
|
const squadCreate = defineTool("squad_create", {
|
|
51
54
|
description: "Create a persistent project squad. Squads remember decisions and context for a specific codebase.",
|
|
55
|
+
skipPermission: true,
|
|
52
56
|
parameters: z.object({
|
|
53
57
|
slug: z.string().describe("Unique identifier (e.g., 'michaeljolley-io')"),
|
|
54
58
|
name: z.string().describe("Display name (e.g., 'IO Assistant')"),
|
|
@@ -66,6 +70,7 @@ export function createTools(deps) {
|
|
|
66
70
|
});
|
|
67
71
|
const squadRecall = defineTool("squad_recall", {
|
|
68
72
|
description: "Recall a squad's context and past decisions. Use this before working on a project to load relevant history.",
|
|
73
|
+
skipPermission: true,
|
|
69
74
|
parameters: z.object({
|
|
70
75
|
slug: z.string().describe("Squad slug"),
|
|
71
76
|
}),
|
|
@@ -79,6 +84,7 @@ export function createTools(deps) {
|
|
|
79
84
|
});
|
|
80
85
|
const squadStatus = defineTool("squad_status", {
|
|
81
86
|
description: "List all squads and their status.",
|
|
87
|
+
skipPermission: true,
|
|
82
88
|
parameters: z.object({}),
|
|
83
89
|
handler: async () => {
|
|
84
90
|
const squads = deps.listSquads();
|
|
@@ -91,6 +97,7 @@ export function createTools(deps) {
|
|
|
91
97
|
});
|
|
92
98
|
const squadLogDecision = defineTool("squad_log_decision", {
|
|
93
99
|
description: "Log a decision for a squad. Use this to record important choices made during project work.",
|
|
100
|
+
skipPermission: true,
|
|
94
101
|
parameters: z.object({
|
|
95
102
|
slug: z.string().describe("Squad slug"),
|
|
96
103
|
decision: z.string().describe("The decision made"),
|
|
@@ -107,13 +114,15 @@ export function createTools(deps) {
|
|
|
107
114
|
},
|
|
108
115
|
});
|
|
109
116
|
const shell = defineTool("shell", {
|
|
110
|
-
description: "Run a shell command on the
|
|
117
|
+
description: "Run a shell command on the host machine. You have FULL ROOT ACCESS. Use for git, apt, npm, build tools, system administration, or anything else. There are NO permission restrictions — all commands are allowed and pre-approved.",
|
|
118
|
+
skipPermission: true,
|
|
111
119
|
parameters: z.object({
|
|
112
120
|
command: z.string().describe("The command to run"),
|
|
113
121
|
timeout_secs: z.number().optional().describe("Timeout in seconds (default: 60)"),
|
|
114
122
|
working_dir: z.string().optional().describe("Working directory for the command"),
|
|
115
123
|
}),
|
|
116
124
|
handler: async ({ command, timeout_secs, working_dir }) => {
|
|
125
|
+
console.error(`[io] shell tool called: ${command}${working_dir ? ` (cwd: ${working_dir})` : ""}`);
|
|
117
126
|
try {
|
|
118
127
|
const result = execSync(command, {
|
|
119
128
|
encoding: "utf-8",
|
|
@@ -140,7 +149,8 @@ export function createTools(deps) {
|
|
|
140
149
|
},
|
|
141
150
|
});
|
|
142
151
|
const fileOps = defineTool("file_ops", {
|
|
143
|
-
description: "Read, write, or
|
|
152
|
+
description: "Read, write, list, or mkdir on the local filesystem. Full access to all paths.",
|
|
153
|
+
skipPermission: true,
|
|
144
154
|
parameters: z.object({
|
|
145
155
|
operation: z.enum(["read", "write", "list", "mkdir"]).describe("Operation to perform"),
|
|
146
156
|
path: z.string().describe("File or directory path"),
|
|
@@ -148,6 +158,7 @@ export function createTools(deps) {
|
|
|
148
158
|
recursive: z.boolean().optional().describe("Recurse into subdirectories (for list)"),
|
|
149
159
|
}),
|
|
150
160
|
handler: async ({ operation, path: filePath, content, recursive }) => {
|
|
161
|
+
console.error(`[io] file_ops tool called: ${operation} ${filePath}`);
|
|
151
162
|
try {
|
|
152
163
|
const resolved = resolve(filePath);
|
|
153
164
|
if (operation === "read") {
|