hoomanjs 1.44.0 → 1.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +5 -6
- package/dist/cli.js.map +1 -1
- package/dist/configure/app.js +469 -105
- package/dist/configure/app.js.map +1 -1
- package/dist/configure/components/MenuScreen.d.ts +3 -2
- package/dist/configure/components/MenuScreen.js +6 -2
- package/dist/configure/components/MenuScreen.js.map +1 -1
- package/dist/configure/index.js +4 -3
- package/dist/configure/index.js.map +1 -1
- package/dist/configure/types.d.ts +15 -0
- package/dist/core/approvals/intervention.js +8 -3
- package/dist/core/approvals/intervention.js.map +1 -1
- package/dist/core/mcp/config.d.ts +26 -3
- package/dist/core/mcp/config.js +126 -34
- package/dist/core/mcp/config.js.map +1 -1
- package/dist/core/prompts/modes/agent.md +6 -0
- package/dist/core/prompts/modes/plan.md +17 -0
- package/dist/core/prompts/session-mode-appendix.js +2 -1
- package/dist/core/prompts/session-mode-appendix.js.map +1 -1
- package/dist/core/prompts/static/todo.md +2 -0
- package/dist/core/runtime-config.js +4 -0
- package/dist/core/runtime-config.js.map +1 -1
- package/dist/core/tools/plan.js +9 -1
- package/dist/core/tools/plan.js.map +1 -1
- package/dist/exec/approvals.js +7 -3
- package/dist/exec/approvals.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"intervention.js","sourceRoot":"","sources":["../../../src/core/approvals/intervention.ts"],"names":[],"mappings":"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"}
|
|
@@ -50,31 +50,54 @@ declare const McpServersFileSchema: z.ZodObject<{
|
|
|
50
50
|
export type McpServersFile = z.infer<typeof McpServersFileSchema>;
|
|
51
51
|
export type ConfigOptions = {
|
|
52
52
|
overlayPaths?: readonly string[];
|
|
53
|
+
projectPath?: string;
|
|
53
54
|
};
|
|
54
55
|
/** One named MCP transport from the config file. */
|
|
55
56
|
export type NamedMcpTransport = {
|
|
56
57
|
name: string;
|
|
57
58
|
transport: McpTransport;
|
|
58
59
|
};
|
|
60
|
+
export type McpConfigScope = "global" | "project";
|
|
61
|
+
export type NamedMcpTransportWithSource = NamedMcpTransport & {
|
|
62
|
+
sourcePath: string;
|
|
63
|
+
scope: McpConfigScope;
|
|
64
|
+
};
|
|
65
|
+
export type McpWriteTarget = {
|
|
66
|
+
path: string;
|
|
67
|
+
scope: McpConfigScope;
|
|
68
|
+
};
|
|
59
69
|
/**
|
|
60
70
|
* Read/write `{"mcpServers": { "<name>": <transport> }}` on disk.
|
|
61
71
|
*/
|
|
62
72
|
export declare class Config {
|
|
63
73
|
private readonly path;
|
|
64
74
|
private readonly overlayPaths;
|
|
65
|
-
private
|
|
75
|
+
private readonly projectPath?;
|
|
76
|
+
private entries;
|
|
66
77
|
constructor(path: string, options?: ConfigOptions);
|
|
67
78
|
private readJson;
|
|
68
79
|
private parse;
|
|
69
|
-
private
|
|
80
|
+
private sourcePaths;
|
|
81
|
+
private scopeForPath;
|
|
82
|
+
private mergedEntries;
|
|
70
83
|
/** Reload servers from disk (overwrites unsaved in-memory changes). */
|
|
71
84
|
reload(): void;
|
|
72
85
|
/** All configured servers, stable sort by name. */
|
|
73
86
|
list(): NamedMcpTransport[];
|
|
87
|
+
/** All configured servers, stable sort by name, including source metadata. */
|
|
88
|
+
listWithSources(): NamedMcpTransportWithSource[];
|
|
74
89
|
get(name: string): McpTransport | undefined;
|
|
75
|
-
|
|
90
|
+
getEntry(name: string): NamedMcpTransportWithSource | undefined;
|
|
91
|
+
primaryPath(): string;
|
|
92
|
+
writableTargets(): McpWriteTarget[];
|
|
93
|
+
private persistFile;
|
|
94
|
+
private requireVisibleEntry;
|
|
76
95
|
add(name: string, transport: McpTransport): void;
|
|
77
96
|
update(name: string, transport: McpTransport): void;
|
|
78
97
|
remove(name: string): void;
|
|
98
|
+
addToPath(targetPath: string, name: string, transport: McpTransport): void;
|
|
99
|
+
updateInPath(targetPath: string, name: string, transport: McpTransport): void;
|
|
100
|
+
renameInPath(targetPath: string, currentName: string, nextName: string, transport: McpTransport): void;
|
|
101
|
+
removeFromPath(targetPath: string, name: string): void;
|
|
79
102
|
}
|
|
80
103
|
export {};
|
package/dist/core/mcp/config.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { dirname } from "node:path";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { McpTransportSchema } from "./types.js";
|
|
5
5
|
const McpServersFileSchema = z.object({
|
|
@@ -11,11 +11,15 @@ const McpServersFileSchema = z.object({
|
|
|
11
11
|
export class Config {
|
|
12
12
|
path;
|
|
13
13
|
overlayPaths;
|
|
14
|
-
|
|
14
|
+
projectPath;
|
|
15
|
+
entries;
|
|
15
16
|
constructor(path, options) {
|
|
16
|
-
this.path = path;
|
|
17
|
-
this.overlayPaths = [...(options?.overlayPaths ?? [])];
|
|
18
|
-
this.
|
|
17
|
+
this.path = resolve(path);
|
|
18
|
+
this.overlayPaths = [...(options?.overlayPaths ?? [])].map((overlayPath) => resolve(overlayPath));
|
|
19
|
+
this.projectPath = options?.projectPath
|
|
20
|
+
? resolve(options.projectPath)
|
|
21
|
+
: undefined;
|
|
22
|
+
this.entries = {};
|
|
19
23
|
this.reload();
|
|
20
24
|
}
|
|
21
25
|
readJson(path, fallback) {
|
|
@@ -44,58 +48,146 @@ export class Config {
|
|
|
44
48
|
});
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
sourcePaths() {
|
|
52
|
+
return [this.path, ...this.overlayPaths];
|
|
53
|
+
}
|
|
54
|
+
scopeForPath(path) {
|
|
55
|
+
return resolve(path) === this.path ? "global" : "project";
|
|
56
|
+
}
|
|
57
|
+
mergedEntries() {
|
|
58
|
+
const entries = {};
|
|
59
|
+
for (const path of this.sourcePaths()) {
|
|
60
|
+
const file = this.parse(path, { mcpServers: {} });
|
|
61
|
+
for (const [name, transport] of Object.entries(file.mcpServers)) {
|
|
62
|
+
entries[name] = {
|
|
63
|
+
name,
|
|
64
|
+
transport,
|
|
65
|
+
sourcePath: path,
|
|
66
|
+
scope: this.scopeForPath(path),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
53
69
|
}
|
|
54
|
-
return
|
|
70
|
+
return entries;
|
|
55
71
|
}
|
|
56
72
|
/** Reload servers from disk (overwrites unsaved in-memory changes). */
|
|
57
73
|
reload() {
|
|
58
74
|
const wasMissing = !existsSync(this.path);
|
|
59
|
-
this.
|
|
75
|
+
this.entries = this.mergedEntries();
|
|
60
76
|
if (wasMissing) {
|
|
61
|
-
this.
|
|
77
|
+
this.persistFile(this.path, { mcpServers: {} });
|
|
62
78
|
}
|
|
63
79
|
}
|
|
64
80
|
/** All configured servers, stable sort by name. */
|
|
65
81
|
list() {
|
|
66
|
-
return
|
|
67
|
-
|
|
68
|
-
|
|
82
|
+
return this.listWithSources().map(({ name, transport }) => ({
|
|
83
|
+
name,
|
|
84
|
+
transport,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
/** All configured servers, stable sort by name, including source metadata. */
|
|
88
|
+
listWithSources() {
|
|
89
|
+
return Object.values(this.entries).sort((a, b) => a.name.localeCompare(b.name));
|
|
69
90
|
}
|
|
70
91
|
get(name) {
|
|
71
|
-
return this.
|
|
92
|
+
return this.entries[name]?.transport;
|
|
93
|
+
}
|
|
94
|
+
getEntry(name) {
|
|
95
|
+
return this.entries[name];
|
|
72
96
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
97
|
+
primaryPath() {
|
|
98
|
+
return this.path;
|
|
99
|
+
}
|
|
100
|
+
writableTargets() {
|
|
101
|
+
const targets = [{ path: this.path, scope: "global" }];
|
|
102
|
+
if (this.projectPath && this.projectPath !== this.path) {
|
|
103
|
+
targets.push({ path: this.projectPath, scope: "project" });
|
|
104
|
+
}
|
|
105
|
+
return targets;
|
|
106
|
+
}
|
|
107
|
+
persistFile(path, data) {
|
|
108
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
109
|
+
writeFileSync(path, JSON.stringify(data, null, 2), "utf8");
|
|
110
|
+
}
|
|
111
|
+
requireVisibleEntry(name) {
|
|
112
|
+
const entry = this.getEntry(name);
|
|
113
|
+
if (!entry) {
|
|
114
|
+
throw new Error(`MCP server "${name}" does not exist.`);
|
|
115
|
+
}
|
|
116
|
+
return entry;
|
|
77
117
|
}
|
|
78
118
|
add(name, transport) {
|
|
79
|
-
|
|
119
|
+
this.addToPath(this.path, name, transport);
|
|
120
|
+
}
|
|
121
|
+
update(name, transport) {
|
|
122
|
+
this.updateInPath(this.path, name, transport);
|
|
123
|
+
}
|
|
124
|
+
remove(name) {
|
|
125
|
+
this.removeFromPath(this.path, name);
|
|
126
|
+
}
|
|
127
|
+
addToPath(targetPath, name, transport) {
|
|
128
|
+
if (this.get(name)) {
|
|
80
129
|
throw new Error(`MCP server "${name}" already exists.`);
|
|
81
130
|
}
|
|
82
|
-
|
|
83
|
-
this.
|
|
131
|
+
const resolvedTargetPath = resolve(targetPath);
|
|
132
|
+
const file = this.parse(resolvedTargetPath, { mcpServers: {} });
|
|
133
|
+
if (file.mcpServers[name]) {
|
|
134
|
+
throw new Error(`MCP server "${name}" already exists.`);
|
|
135
|
+
}
|
|
136
|
+
file.mcpServers[name] = transport;
|
|
137
|
+
this.persistFile(resolvedTargetPath, file);
|
|
138
|
+
this.reload();
|
|
84
139
|
}
|
|
85
|
-
|
|
86
|
-
|
|
140
|
+
updateInPath(targetPath, name, transport) {
|
|
141
|
+
const resolvedTargetPath = resolve(targetPath);
|
|
142
|
+
const entry = this.requireVisibleEntry(name);
|
|
143
|
+
if (entry.sourcePath !== resolvedTargetPath) {
|
|
144
|
+
throw new Error(`MCP server "${name}" is defined in "${entry.sourcePath}", not "${resolvedTargetPath}".`);
|
|
145
|
+
}
|
|
146
|
+
const file = this.parse(resolvedTargetPath, { mcpServers: {} });
|
|
147
|
+
if (!file.mcpServers[name]) {
|
|
87
148
|
throw new Error(`MCP server "${name}" does not exist.`);
|
|
88
149
|
}
|
|
89
|
-
|
|
90
|
-
this.
|
|
150
|
+
file.mcpServers[name] = transport;
|
|
151
|
+
this.persistFile(resolvedTargetPath, file);
|
|
152
|
+
this.reload();
|
|
91
153
|
}
|
|
92
|
-
|
|
93
|
-
|
|
154
|
+
renameInPath(targetPath, currentName, nextName, transport) {
|
|
155
|
+
const resolvedTargetPath = resolve(targetPath);
|
|
156
|
+
const entry = this.requireVisibleEntry(currentName);
|
|
157
|
+
if (entry.sourcePath !== resolvedTargetPath) {
|
|
158
|
+
throw new Error(`MCP server "${currentName}" is defined in "${entry.sourcePath}", not "${resolvedTargetPath}".`);
|
|
159
|
+
}
|
|
160
|
+
if (currentName === nextName) {
|
|
161
|
+
this.updateInPath(resolvedTargetPath, currentName, transport);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const existing = this.getEntry(nextName);
|
|
165
|
+
if (existing) {
|
|
166
|
+
throw new Error(`MCP server "${nextName}" already exists.`);
|
|
167
|
+
}
|
|
168
|
+
const file = this.parse(resolvedTargetPath, { mcpServers: {} });
|
|
169
|
+
if (!file.mcpServers[currentName]) {
|
|
170
|
+
throw new Error(`MCP server "${currentName}" does not exist.`);
|
|
171
|
+
}
|
|
172
|
+
const { [currentName]: _removed, ...remaining } = file.mcpServers;
|
|
173
|
+
file.mcpServers = { ...remaining, [nextName]: transport };
|
|
174
|
+
this.persistFile(resolvedTargetPath, file);
|
|
175
|
+
this.reload();
|
|
176
|
+
}
|
|
177
|
+
removeFromPath(targetPath, name) {
|
|
178
|
+
const resolvedTargetPath = resolve(targetPath);
|
|
179
|
+
const entry = this.requireVisibleEntry(name);
|
|
180
|
+
if (entry.sourcePath !== resolvedTargetPath) {
|
|
181
|
+
throw new Error(`MCP server "${name}" is defined in "${entry.sourcePath}", not "${resolvedTargetPath}".`);
|
|
182
|
+
}
|
|
183
|
+
const file = this.parse(resolvedTargetPath, { mcpServers: {} });
|
|
184
|
+
if (!file.mcpServers[name]) {
|
|
94
185
|
throw new Error(`MCP server "${name}" does not exist.`);
|
|
95
186
|
}
|
|
96
|
-
const { [name]: _removed, ...remaining } =
|
|
97
|
-
|
|
98
|
-
this.
|
|
187
|
+
const { [name]: _removed, ...remaining } = file.mcpServers;
|
|
188
|
+
file.mcpServers = remaining;
|
|
189
|
+
this.persistFile(resolvedTargetPath, file);
|
|
190
|
+
this.reload();
|
|
99
191
|
}
|
|
100
192
|
}
|
|
101
193
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/mcp/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
## Agent mode
|
|
2
2
|
|
|
3
3
|
You are in **agent** mode and can make use of any available tool to fulfil your current task.
|
|
4
|
+
|
|
5
|
+
{{#if (lookup state 'hooman.lastPlanFile')}}
|
|
6
|
+
**Most recent plan file:** {{lookup state 'hooman.lastPlanFile'}}
|
|
7
|
+
|
|
8
|
+
If the current work is implementing or continuing that plan, keep the plan file's frontmatter and `tasks` section synchronized manually when you update execution tracking with `update_todos`. `update_todos` does not update the plan file for you.
|
|
9
|
+
{{/if}}
|
|
@@ -12,7 +12,24 @@ You are in planning mode. **Do not implement here.** Implementation begins only
|
|
|
12
12
|
4. Do not create, edit, move, or delete files other than the plan file shown above. Delegated subagent work (`subagent_research`, `subagent_review`, `subagent_test_investigator`) must stay read-only.
|
|
13
13
|
5. Do not ship the final deliverable or execute substantive implementation here.
|
|
14
14
|
6. `exit_plan_mode` is a proposal, not a mode switch you control. The user may **decline** it to keep planning. If a call comes back rejected, you are still in plan mode with the same plan file—incorporate their feedback, update the plan, and only propose exiting again once they are satisfied. Re-entering plan mode later reopens this same file, so keep refining it rather than starting over.
|
|
15
|
+
7. Keep the plan file in structured frontmatter form with at least `name`, `overview`, and `tasks`.
|
|
16
|
+
8. `tasks` must be an array of objects with `description` and `status`, where `status` is only `pending` or `done`.
|
|
17
|
+
9. Keep the `tasks` section current as you refine the plan. When you use `update_todos` for plan-derived work, you must also update the plan file's `tasks` section in the same turn. `update_todos` does not update the plan file for you.
|
|
15
18
|
|
|
16
19
|
### Target shape
|
|
17
20
|
|
|
21
|
+
Use structured frontmatter like this at the top of the plan file:
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
---
|
|
25
|
+
name: Plan
|
|
26
|
+
overview: Short summary of the plan
|
|
27
|
+
tasks:
|
|
28
|
+
- description: First concrete task
|
|
29
|
+
status: pending
|
|
30
|
+
- description: Second concrete task
|
|
31
|
+
status: done
|
|
32
|
+
---
|
|
33
|
+
```
|
|
34
|
+
|
|
18
35
|
Keep the plan file current with objective, scope, constraints, open questions, ordered steps, risks, and validation for the later implementation phase.
|
|
@@ -2,13 +2,14 @@ import handlebars from "handlebars";
|
|
|
2
2
|
import { ContextInjector } from "@strands-agents/sdk/vended-plugins/context-injector";
|
|
3
3
|
import { hasBundledPrompt, readBundledPrompt } from "./bundled.js";
|
|
4
4
|
import { getModeDefinition, } from "../modes/definitions.js";
|
|
5
|
-
import { PLAN_ENTERED_AT_STATE_KEY, PLAN_ENTER_REASON_STATE_KEY, PLAN_FILE_STATE_KEY, } from "../state/plan.js";
|
|
5
|
+
import { PLAN_ENTERED_AT_STATE_KEY, PLAN_ENTER_REASON_STATE_KEY, PLAN_FILE_STATE_KEY, PLAN_LAST_FILE_STATE_KEY, } from "../state/plan.js";
|
|
6
6
|
import { getModeState, MODE_STATE_KEY, } from "../state/session-mode.js";
|
|
7
7
|
const { compile } = handlebars;
|
|
8
8
|
/** Keys exposed as `state` in session-mode Handlebars templates (e.g. plan.md). */
|
|
9
9
|
const SESSION_MODE_TEMPLATE_STATE_KEYS = [
|
|
10
10
|
MODE_STATE_KEY,
|
|
11
11
|
PLAN_FILE_STATE_KEY,
|
|
12
|
+
PLAN_LAST_FILE_STATE_KEY,
|
|
12
13
|
PLAN_ENTER_REASON_STATE_KEY,
|
|
13
14
|
PLAN_ENTERED_AT_STATE_KEY,
|
|
14
15
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-mode-appendix.js","sourceRoot":"","sources":["../../../src/core/prompts/session-mode-appendix.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EACL,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"session-mode-appendix.js","sourceRoot":"","sources":["../../../src/core/prompts/session-mode-appendix.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EACL,iBAAiB,GAElB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,cAAc,GAEf,MAAM,0BAA0B,CAAC;AAElC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;AAE/B,mFAAmF;AACnF,MAAM,gCAAgC,GAAG;IACvC,cAAc;IACd,mBAAmB;IACnB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;CACjB,CAAC;AAEX,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAsC,CAAC;AAE1E,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,iBAAiB,CAAC,GAAG,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,oCAAoC,CAAC,KAEpD;IACC,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,gCAAgC,EAAE,CAAC;QACnD,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAsB,EACtB,KAA8B;IAE9B,IAAI,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAAiB,EACjB,mBAA4C,EAAE;IAE9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,IAAI,eAAe,CAAC;QACzB,IAAI,EAAE,4BAA4B;QAClC,OAAO,EAAE,UAAU;QACnB,aAAa,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YACtC,MAAM,gBAAgB,GAAG,oCAAoC,CAAC,KAAK,CAAC,CAAC;YACrE,OAAO,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACzD,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -6,4 +6,6 @@ You have an `update_todos` tool for tracking progress on multi-step work.
|
|
|
6
6
|
- Do NOT use it for simple one-step requests, purely conversational replies, or when a single command or tiny edit solves the task.
|
|
7
7
|
- Update the list before starting tracked work and right after completing an item; prefer exactly one `in_progress` item while actively working, and mark items `completed` only when fully done.
|
|
8
8
|
- Each item needs `content` (imperative, e.g. "Check results") and `activeForm` (present continuous, e.g. "Checking results"); valid statuses are `pending`, `in_progress`, `completed`.
|
|
9
|
+
- If you are working from a Hooman plan file, derive implementation todos from the plan tasks where practical.
|
|
10
|
+
- `update_todos` does not update any plan file automatically. When you change plan-derived task status with `update_todos`, you must also update the corresponding plan file manually so its `tasks` section stays synchronized.
|
|
9
11
|
- Keep progress visible and accurate; use tracking to improve execution quality, not as busywork.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { basename, join, resolve } from "node:path";
|
|
2
|
+
import { candidateWalkUpPaths } from "./utils/discover-files.js";
|
|
2
3
|
import { Config } from "./config.js";
|
|
3
4
|
import { Config as McpConfig } from "./mcp/config.js";
|
|
4
5
|
import { APP_FOLDER, configJsonPath, mcpJsonPath } from "./utils/paths.js";
|
|
@@ -37,8 +38,11 @@ export function createRuntimeConfig(cwd = process.cwd()) {
|
|
|
37
38
|
}
|
|
38
39
|
export function createRuntimeMcpConfig(cwd = process.cwd()) {
|
|
39
40
|
const sources = runtimeConfigSources(cwd);
|
|
41
|
+
const projectPath = resolve(candidateWalkUpPaths(join(APP_FOLDER, basename(sources.mcp.primaryPath)), cwd).at(-1) ??
|
|
42
|
+
join(resolve(cwd), APP_FOLDER, basename(sources.mcp.primaryPath)));
|
|
40
43
|
return new McpConfig(sources.mcp.primaryPath, {
|
|
41
44
|
overlayPaths: sources.mcp.overlayPaths,
|
|
45
|
+
projectPath,
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
//# sourceMappingURL=runtime-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/core/runtime-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOhE,SAAS,eAAe,CACtB,QAAgB,EAChB,WAAmB,EACnB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC;SACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,OAAO;QACL,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,OAAO;QACL,MAAM,EAAE;YACN,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC;SACrE;QACD,GAAG,EAAE;YACH,WAAW,EAAE,OAAO;YACpB,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC;SAC/D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;QAC5C,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QAC5C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/core/runtime-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOhE,SAAS,eAAe,CACtB,QAAgB,EAChB,WAAmB,EACnB,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC;SACxD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC5B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,OAAO;QACL,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,OAAO;QACL,MAAM,EAAE;YACN,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC;SACrE;QACD,GAAG,EAAE;YACH,WAAW,EAAE,OAAO;YACpB,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC;SAC/D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;QAC5C,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CACzB,oBAAoB,CAClB,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EACnD,GAAG,CACJ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CACpE,CAAC;IACF,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;QAC5C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
|
package/dist/core/tools/plan.js
CHANGED
|
@@ -10,7 +10,15 @@ import { ENTER_PLAN_MODE_TOOL, EXIT_PLAN_MODE_TOOL, } from "../state/tool-approv
|
|
|
10
10
|
import { isResolvedPathInsideDir } from "../utils/normalize-user-path.js";
|
|
11
11
|
import { plansPath } from "../utils/paths.js";
|
|
12
12
|
const PLAN_PREVIEW_MAX_BYTES = 8 * 1024;
|
|
13
|
-
const ENTER_STUB_MD =
|
|
13
|
+
const ENTER_STUB_MD = `---
|
|
14
|
+
name: Plan
|
|
15
|
+
overview: ""
|
|
16
|
+
tasks: []
|
|
17
|
+
status: pending
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Plan
|
|
21
|
+
`;
|
|
14
22
|
const EnterPlanModeInputSchema = z.object({
|
|
15
23
|
reason: z.string().trim().optional(),
|
|
16
24
|
fresh: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/core/tools/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC;AAExC,MAAM,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/core/tools/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/exec/approvals.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { createInterface } from "node:readline/promises";
|
|
2
2
|
import { stdin, stdout } from "node:process";
|
|
3
3
|
import { HoomanToolApprovalIntervention } from "../core/approvals/intervention.js";
|
|
4
|
+
import { EXIT_PLAN_MODE_TOOL } from "../core/state/tool-approvals.js";
|
|
4
5
|
function canPromptForApproval() {
|
|
5
6
|
return Boolean(stdin.isTTY && stdout.isTTY);
|
|
6
7
|
}
|
|
7
8
|
async function promptForApproval(toolName, description, inputPreview) {
|
|
9
|
+
const isPlanExit = toolName === EXIT_PLAN_MODE_TOOL;
|
|
8
10
|
const rl = createInterface({ input: stdin, output: stdout });
|
|
9
11
|
try {
|
|
10
12
|
stdout.write(`\nTool approval required\n`);
|
|
@@ -13,7 +15,9 @@ async function promptForApproval(toolName, description, inputPreview) {
|
|
|
13
15
|
stdout.write(`Description: ${description}\n`);
|
|
14
16
|
}
|
|
15
17
|
stdout.write(`Input:\n${inputPreview}\n`);
|
|
16
|
-
stdout.write(
|
|
18
|
+
stdout.write(isPlanExit
|
|
19
|
+
? `Options: [a]llow once, [r]eject\n`
|
|
20
|
+
: `Options: [a]llow once, [r]eject, [A]lways allow\n`);
|
|
17
21
|
while (true) {
|
|
18
22
|
const answer = (await rl.question("> ")).trim();
|
|
19
23
|
if (answer === "a" || answer === "allow" || answer === "") {
|
|
@@ -22,10 +26,10 @@ async function promptForApproval(toolName, description, inputPreview) {
|
|
|
22
26
|
if (answer === "r" || answer === "reject") {
|
|
23
27
|
return "reject";
|
|
24
28
|
}
|
|
25
|
-
if (answer === "A" || answer === "always") {
|
|
29
|
+
if (!isPlanExit && (answer === "A" || answer === "always")) {
|
|
26
30
|
return "always";
|
|
27
31
|
}
|
|
28
|
-
stdout.write("Enter a, r, or A.\n");
|
|
32
|
+
stdout.write(isPlanExit ? "Enter a or r.\n" : "Enter a, r, or A.\n");
|
|
29
33
|
}
|
|
30
34
|
}
|
|
31
35
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/exec/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/exec/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,SAAS,oBAAoB;IAC3B,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,QAAgB,EAChB,WAA+B,EAC/B,YAAoB;IAEpB,MAAM,UAAU,GAAG,QAAQ,KAAK,mBAAmB,CAAC;IACpD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,gBAAgB,WAAW,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,WAAW,YAAY,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CACV,UAAU;YACR,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,mDAAmD,CACxD,CAAC;QACF,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBAC1D,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC1C,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;gBAC3D,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B;IAC5C,OAAO,IAAI,8BAA8B,CAAC;QACxC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrB,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAC5B,OAAO;oBACL,QAAQ,EAAE,QAAQ;oBAClB,MAAM,EAAE,SAAS,OAAO,CAAC,QAAQ,gEAAgE;iBAClG,CAAC;YACJ,CAAC;YACD,OAAO,iBAAiB,CACtB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,YAAY,CACrB,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|