@snoglobe/helios 0.1.0 → 0.2.1
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/README.md +1 -1
- package/dist/acp/entry.d.ts +7 -0
- package/dist/acp/entry.d.ts.map +1 -0
- package/dist/acp/entry.js +46 -0
- package/dist/acp/entry.js.map +1 -0
- package/dist/acp/server.d.ts +57 -0
- package/dist/acp/server.d.ts.map +1 -0
- package/dist/acp/server.js +434 -0
- package/dist/acp/server.js.map +1 -0
- package/dist/acp/transport.d.ts +31 -0
- package/dist/acp/transport.d.ts.map +1 -0
- package/dist/acp/transport.js +116 -0
- package/dist/acp/transport.js.map +1 -0
- package/dist/acp/types.d.ts +213 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +3 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/app.d.ts +8 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +51 -281
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +3 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +26 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/cli/auth.d.ts +20 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +62 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/doctor.d.ts +9 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +368 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/env.d.ts +13 -0
- package/dist/cli/env.d.ts.map +1 -0
- package/dist/cli/env.js +16 -0
- package/dist/cli/env.js.map +1 -0
- package/dist/cli/export.d.ts +11 -0
- package/dist/cli/export.d.ts.map +1 -0
- package/dist/cli/export.js +103 -0
- package/dist/cli/export.js.map +1 -0
- package/dist/cli/index.d.ts +22 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +71 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-cmd.d.ts +11 -0
- package/dist/cli/init-cmd.d.ts.map +1 -0
- package/dist/cli/init-cmd.js +37 -0
- package/dist/cli/init-cmd.js.map +1 -0
- package/dist/cli/kill.d.ts +8 -0
- package/dist/cli/kill.d.ts.map +1 -0
- package/dist/cli/kill.js +46 -0
- package/dist/cli/kill.js.map +1 -0
- package/dist/cli/options.d.ts +18 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +24 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/replay.d.ts +9 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +65 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/report.d.ts +11 -0
- package/dist/cli/report.d.ts.map +1 -0
- package/dist/cli/report.js +70 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/run.d.ts +17 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +120 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/search.d.ts +9 -0
- package/dist/cli/search.d.ts.map +1 -0
- package/dist/cli/search.js +52 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli/sessions.d.ts +8 -0
- package/dist/cli/sessions.d.ts.map +1 -0
- package/dist/cli/sessions.js +38 -0
- package/dist/cli/sessions.js.map +1 -0
- package/dist/cli/watch.d.ts +8 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +81 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/config/project.d.ts +63 -0
- package/dist/config/project.d.ts.map +1 -0
- package/dist/config/project.js +112 -0
- package/dist/config/project.js.map +1 -0
- package/dist/core/orchestrator.d.ts +4 -2
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +8 -3
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/task-poller.d.ts +43 -0
- package/dist/core/task-poller.d.ts.map +1 -0
- package/dist/core/task-poller.js +98 -0
- package/dist/core/task-poller.js.map +1 -0
- package/dist/experiments/branching.d.ts +38 -0
- package/dist/experiments/branching.d.ts.map +1 -0
- package/dist/experiments/branching.js +80 -0
- package/dist/experiments/branching.js.map +1 -0
- package/dist/hub/client.d.ts +70 -0
- package/dist/hub/client.d.ts.map +1 -0
- package/dist/hub/client.js +140 -0
- package/dist/hub/client.js.map +1 -0
- package/dist/hub/config.d.ts +9 -0
- package/dist/hub/config.d.ts.map +1 -0
- package/dist/hub/config.js +38 -0
- package/dist/hub/config.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +25 -3
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +44 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +387 -0
- package/dist/init.js.map +1 -0
- package/dist/memory/context-gate.d.ts.map +1 -1
- package/dist/memory/context-gate.js +1 -1
- package/dist/memory/context-gate.js.map +1 -1
- package/dist/memory/experiment-tracker.d.ts.map +1 -1
- package/dist/memory/experiment-tracker.js +2 -6
- package/dist/memory/experiment-tracker.js.map +1 -1
- package/dist/memory/memory-store.d.ts.map +1 -1
- package/dist/memory/memory-store.js +16 -20
- package/dist/memory/memory-store.js.map +1 -1
- package/dist/metrics/collector.d.ts.map +1 -1
- package/dist/metrics/collector.js +7 -7
- package/dist/metrics/collector.js.map +1 -1
- package/dist/metrics/resources.d.ts +44 -0
- package/dist/metrics/resources.d.ts.map +1 -0
- package/dist/metrics/resources.js +382 -0
- package/dist/metrics/resources.js.map +1 -0
- package/dist/metrics/store.d.ts +10 -2
- package/dist/metrics/store.d.ts.map +1 -1
- package/dist/metrics/store.js +91 -27
- package/dist/metrics/store.js.map +1 -1
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +2 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/notifier.d.ts +36 -0
- package/dist/notifications/notifier.d.ts.map +1 -0
- package/dist/notifications/notifier.js +102 -0
- package/dist/notifications/notifier.js.map +1 -0
- package/dist/paths.d.ts +3 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +5 -0
- package/dist/paths.js.map +1 -0
- package/dist/providers/claude/provider.d.ts +7 -3
- package/dist/providers/claude/provider.d.ts.map +1 -1
- package/dist/providers/claude/provider.js +48 -8
- package/dist/providers/claude/provider.js.map +1 -1
- package/dist/providers/openai/callback-server.d.ts +5 -1
- package/dist/providers/openai/callback-server.d.ts.map +1 -1
- package/dist/providers/openai/callback-server.js +42 -20
- package/dist/providers/openai/callback-server.js.map +1 -1
- package/dist/providers/openai/oauth.d.ts +4 -0
- package/dist/providers/openai/oauth.d.ts.map +1 -1
- package/dist/providers/openai/oauth.js +35 -14
- package/dist/providers/openai/oauth.js.map +1 -1
- package/dist/providers/openai/provider.d.ts +6 -3
- package/dist/providers/openai/provider.d.ts.map +1 -1
- package/dist/providers/openai/provider.js +35 -9
- package/dist/providers/openai/provider.js.map +1 -1
- package/dist/providers/types.d.ts +9 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/remote/config.d.ts.map +1 -1
- package/dist/remote/config.js +4 -8
- package/dist/remote/config.js.map +1 -1
- package/dist/remote/connection-pool.d.ts.map +1 -1
- package/dist/remote/connection-pool.js +9 -5
- package/dist/remote/connection-pool.js.map +1 -1
- package/dist/store/database.d.ts.map +1 -1
- package/dist/store/database.js +2 -2
- package/dist/store/database.js.map +1 -1
- package/dist/store/migrations.d.ts.map +1 -1
- package/dist/store/migrations.js +27 -0
- package/dist/store/migrations.js.map +1 -1
- package/dist/store/preferences.d.ts +2 -0
- package/dist/store/preferences.d.ts.map +1 -1
- package/dist/store/preferences.js +2 -2
- package/dist/store/preferences.js.map +1 -1
- package/dist/store/session-store.d.ts +6 -0
- package/dist/store/session-store.d.ts.map +1 -1
- package/dist/store/session-store.js +20 -5
- package/dist/store/session-store.js.map +1 -1
- package/dist/tools/env-snapshot.d.ts +5 -0
- package/dist/tools/env-snapshot.d.ts.map +1 -0
- package/dist/tools/env-snapshot.js +174 -0
- package/dist/tools/env-snapshot.js.map +1 -0
- package/dist/tools/experiment-branch.d.ts +7 -0
- package/dist/tools/experiment-branch.d.ts.map +1 -0
- package/dist/tools/experiment-branch.js +167 -0
- package/dist/tools/experiment-branch.js.map +1 -0
- package/dist/tools/file-ops.d.ts.map +1 -1
- package/dist/tools/file-ops.js +1 -3
- package/dist/tools/file-ops.js.map +1 -1
- package/dist/tools/hub.d.ts +5 -0
- package/dist/tools/hub.d.ts.map +1 -0
- package/dist/tools/hub.js +298 -0
- package/dist/tools/hub.js.map +1 -0
- package/dist/tools/sweep.d.ts +6 -0
- package/dist/tools/sweep.d.ts.map +1 -0
- package/dist/tools/sweep.js +153 -0
- package/dist/tools/sweep.js.map +1 -0
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +2 -1
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/writeup.d.ts +11 -0
- package/dist/tools/writeup.d.ts.map +1 -0
- package/dist/tools/writeup.js +102 -0
- package/dist/tools/writeup.js.map +1 -0
- package/dist/ui/commands.d.ts +36 -0
- package/dist/ui/commands.d.ts.map +1 -1
- package/dist/ui/commands.js +501 -1
- package/dist/ui/commands.js.map +1 -1
- package/dist/ui/components/input-bar.js.map +1 -1
- package/dist/ui/components/overlay-header.d.ts.map +1 -1
- package/dist/ui/components/overlay-header.js.map +1 -1
- package/dist/ui/components/status-bar.js +1 -1
- package/dist/ui/components/status-bar.js.map +1 -1
- package/dist/ui/format.d.ts +4 -0
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +16 -0
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/layout.d.ts +7 -42
- package/dist/ui/layout.d.ts.map +1 -1
- package/dist/ui/layout.js +71 -543
- package/dist/ui/layout.js.map +1 -1
- package/dist/ui/overlays/metrics-overlay.js.map +1 -1
- package/dist/ui/overlays/task-overlay.d.ts +1 -1
- package/dist/ui/overlays/task-overlay.d.ts.map +1 -1
- package/dist/ui/overlays/task-overlay.js.map +1 -1
- package/dist/ui/panels/conversation.d.ts +1 -1
- package/dist/ui/panels/conversation.d.ts.map +1 -1
- package/dist/ui/panels/conversation.js +1 -2
- package/dist/ui/panels/conversation.js.map +1 -1
- package/dist/ui/panels/metrics-dashboard.d.ts.map +1 -1
- package/dist/ui/panels/metrics-dashboard.js.map +1 -1
- package/dist/ui/panels/sleep-panel.js.map +1 -1
- package/dist/ui/panels/sticky-notes.d.ts.map +1 -1
- package/dist/ui/panels/sticky-notes.js.map +1 -1
- package/dist/ui/panels/task-list.d.ts +4 -2
- package/dist/ui/panels/task-list.d.ts.map +1 -1
- package/dist/ui/panels/task-list.js +41 -9
- package/dist/ui/panels/task-list.js.map +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/types.d.ts +22 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +2 -0
- package/dist/ui/types.js.map +1 -0
- package/package.json +19 -6
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { patternsFromNames, patternsFromRegexes, } from "../metrics/parser.js";
|
|
2
|
+
import { formatError, shellQuote } from "../ui/format.js";
|
|
3
|
+
/**
|
|
4
|
+
* Compute the cartesian product of a parameter grid.
|
|
5
|
+
* e.g. {lr: [0.001, 0.0001], bs: [32, 64]} → [{lr:0.001,bs:32}, {lr:0.001,bs:64}, ...]
|
|
6
|
+
*/
|
|
7
|
+
function cartesianProduct(params) {
|
|
8
|
+
const keys = Object.keys(params);
|
|
9
|
+
if (keys.length === 0)
|
|
10
|
+
return [{}];
|
|
11
|
+
const [first, ...rest] = keys;
|
|
12
|
+
const restProduct = cartesianProduct(Object.fromEntries(rest.map((k) => [k, params[k]])));
|
|
13
|
+
return params[first].flatMap((val) => restProduct.map((combo) => ({ [first]: val, ...combo })));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Replace {param_name} placeholders in a command template with concrete values.
|
|
17
|
+
*/
|
|
18
|
+
function buildCommand(template, params) {
|
|
19
|
+
let cmd = template;
|
|
20
|
+
for (const [key, value] of Object.entries(params)) {
|
|
21
|
+
const strVal = String(value);
|
|
22
|
+
// Numeric values are safe to inline; quote anything else
|
|
23
|
+
const safe = /^-?[\d.e+-]+$/.test(strVal) ? strVal : shellQuote(strVal);
|
|
24
|
+
cmd = cmd.replaceAll(`{${key}}`, safe);
|
|
25
|
+
}
|
|
26
|
+
return cmd;
|
|
27
|
+
}
|
|
28
|
+
export function createSweepTool(executor, pool, metricCollector) {
|
|
29
|
+
return {
|
|
30
|
+
name: "sweep",
|
|
31
|
+
description: "Launch a hyperparameter sweep. Defines a parameter grid and runs experiments in parallel across available machines. Each combination gets its own background process with metric tracking.",
|
|
32
|
+
parameters: {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
command_template: {
|
|
36
|
+
type: "string",
|
|
37
|
+
description: 'Command template with {param_name} placeholders. Example: "python train.py --lr {lr} --batch-size {bs}"',
|
|
38
|
+
},
|
|
39
|
+
params: {
|
|
40
|
+
type: "object",
|
|
41
|
+
additionalProperties: {
|
|
42
|
+
type: "array",
|
|
43
|
+
items: {},
|
|
44
|
+
},
|
|
45
|
+
description: 'Parameter grid. Keys are param names, values are arrays of values. Example: {"lr": [0.001, 0.0001], "bs": [32, 64]}',
|
|
46
|
+
},
|
|
47
|
+
machines: {
|
|
48
|
+
type: "array",
|
|
49
|
+
items: { type: "string" },
|
|
50
|
+
description: "Machine IDs to distribute across. Default: all connected machines.",
|
|
51
|
+
},
|
|
52
|
+
metric_names: {
|
|
53
|
+
type: "array",
|
|
54
|
+
items: { type: "string" },
|
|
55
|
+
description: 'Metrics to track for each run in key=value format. Example: ["loss", "acc"]',
|
|
56
|
+
},
|
|
57
|
+
metric_patterns: {
|
|
58
|
+
type: "object",
|
|
59
|
+
additionalProperties: { type: "string" },
|
|
60
|
+
description: 'Custom regex patterns for metric parsing. Example: {"loss": "Loss:\\\\s*([\\\\d.e+-]+)"}',
|
|
61
|
+
},
|
|
62
|
+
max_parallel: {
|
|
63
|
+
type: "number",
|
|
64
|
+
description: "Max concurrent runs. Default: number of available machines.",
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
required: ["command_template", "params"],
|
|
68
|
+
},
|
|
69
|
+
execute: async (args) => {
|
|
70
|
+
const commandTemplate = args.command_template;
|
|
71
|
+
const paramGrid = args.params;
|
|
72
|
+
const requestedMachines = args.machines;
|
|
73
|
+
const metricNames = args.metric_names;
|
|
74
|
+
const metricPatterns = args.metric_patterns;
|
|
75
|
+
const maxParallelArg = args.max_parallel;
|
|
76
|
+
// 1. Generate all parameter combinations
|
|
77
|
+
const combinations = cartesianProduct(paramGrid);
|
|
78
|
+
if (combinations.length === 0) {
|
|
79
|
+
return JSON.stringify({ error: "No parameter combinations generated. Check your params grid." });
|
|
80
|
+
}
|
|
81
|
+
// 2. Determine available machines
|
|
82
|
+
let machineIds;
|
|
83
|
+
if (requestedMachines && requestedMachines.length > 0) {
|
|
84
|
+
machineIds = requestedMachines;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
machineIds = pool
|
|
88
|
+
.getMachineIds()
|
|
89
|
+
.filter((id) => pool.getStatus(id).connected);
|
|
90
|
+
}
|
|
91
|
+
if (machineIds.length === 0) {
|
|
92
|
+
return JSON.stringify({ error: "No connected machines available for sweep." });
|
|
93
|
+
}
|
|
94
|
+
const maxParallel = maxParallelArg ?? machineIds.length;
|
|
95
|
+
const toLaunch = combinations.slice(0, maxParallel);
|
|
96
|
+
const skipped = combinations.length - toLaunch.length;
|
|
97
|
+
// Build metric patterns once (shared across all runs)
|
|
98
|
+
let patterns;
|
|
99
|
+
if (metricPatterns) {
|
|
100
|
+
patterns = patternsFromRegexes(metricPatterns);
|
|
101
|
+
}
|
|
102
|
+
else if (metricNames && metricNames.length > 0) {
|
|
103
|
+
patterns = patternsFromNames(metricNames);
|
|
104
|
+
}
|
|
105
|
+
// 3. Launch runs, distributing across machines round-robin
|
|
106
|
+
const launched = [];
|
|
107
|
+
const errors = [];
|
|
108
|
+
await Promise.all(toLaunch.map(async (combo, i) => {
|
|
109
|
+
const machineId = machineIds[i % machineIds.length];
|
|
110
|
+
const command = buildCommand(commandTemplate, combo);
|
|
111
|
+
try {
|
|
112
|
+
const proc = await executor.execBackground(machineId, command, undefined, { metricNames, metricPatterns });
|
|
113
|
+
// Register with metric collector if patterns are available
|
|
114
|
+
if (patterns && proc.logPath) {
|
|
115
|
+
try {
|
|
116
|
+
metricCollector.addSource({
|
|
117
|
+
taskId: `${machineId}:${proc.pid}`,
|
|
118
|
+
machineId,
|
|
119
|
+
logPath: proc.logPath,
|
|
120
|
+
patterns,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Metric registration failure is non-fatal
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
launched.push({
|
|
128
|
+
machineId,
|
|
129
|
+
pid: proc.pid,
|
|
130
|
+
params: combo,
|
|
131
|
+
command,
|
|
132
|
+
log_path: proc.logPath,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
errors.push({
|
|
137
|
+
params: combo,
|
|
138
|
+
error: formatError(err),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}));
|
|
142
|
+
return JSON.stringify({
|
|
143
|
+
launched,
|
|
144
|
+
skipped,
|
|
145
|
+
skipped_note: skipped > 0 ? `${skipped} combinations were not launched due to max_parallel=${maxParallel}. Call sweep again with the remaining params to run them.` : undefined,
|
|
146
|
+
total_combinations: combinations.length,
|
|
147
|
+
machines_used: machineIds,
|
|
148
|
+
...(errors.length > 0 ? { errors } : {}),
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=sweep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sweep.js","sourceRoot":"","sources":["../../src/tools/sweep.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"web-fetch.d.ts","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,wBAAgB,kBAAkB,IAAI,cAAc,CAyEnD"}
|
package/dist/tools/web-fetch.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Readability } from "@mozilla/readability";
|
|
2
2
|
import { parseHTML } from "linkedom";
|
|
3
|
+
import { formatError } from "../ui/format.js";
|
|
3
4
|
export function createWebFetchTool() {
|
|
4
5
|
return {
|
|
5
6
|
name: "web_fetch",
|
|
@@ -64,7 +65,7 @@ export function createWebFetchTool() {
|
|
|
64
65
|
}
|
|
65
66
|
catch (err) {
|
|
66
67
|
return JSON.stringify({
|
|
67
|
-
error:
|
|
68
|
+
error: formatError(err),
|
|
68
69
|
});
|
|
69
70
|
}
|
|
70
71
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"web-fetch.js","sourceRoot":"","sources":["../../src/tools/web-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ToolDefinition, ModelProvider } from "../providers/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the writeup system prompt.
|
|
4
|
+
* @param transcript - true when the input is a full session transcript (slash command),
|
|
5
|
+
* false when the input is user-provided notes (tool call).
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildWriteupSystemPrompt(options?: {
|
|
8
|
+
transcript?: boolean;
|
|
9
|
+
}): string;
|
|
10
|
+
export declare function createWriteupTool(getProvider: () => ModelProvider | null): ToolDefinition;
|
|
11
|
+
//# sourceMappingURL=writeup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeup.d.ts","sourceRoot":"","sources":["../../src/tools/writeup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3E;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAsDvF;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,aAAa,GAAG,IAAI,GACtC,cAAc,CA6ChB"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { formatError } from "../ui/format.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the writeup system prompt.
|
|
4
|
+
* @param transcript - true when the input is a full session transcript (slash command),
|
|
5
|
+
* false when the input is user-provided notes (tool call).
|
|
6
|
+
*/
|
|
7
|
+
export function buildWriteupSystemPrompt(options = {}) {
|
|
8
|
+
const inputDesc = options.transcript
|
|
9
|
+
? "the full transcript of an ML experiment session — including the researcher's goals, the agent's actions, tool calls, metric results, and conclusions"
|
|
10
|
+
: "experiment notes from an ML research agent — including goals, configurations, metric results, and observations";
|
|
11
|
+
const taskPrefix = options.transcript ? "Your task: produce" : "Produce";
|
|
12
|
+
const extraCitation = options.transcript
|
|
13
|
+
? "\n- Look for hub_fetch, hub_read, and hub_log tool calls in the transcript to identify sources"
|
|
14
|
+
: "";
|
|
15
|
+
const dataSource = options.transcript ? " from the transcript" : "";
|
|
16
|
+
return `You are a scientific writing assistant. You will receive ${inputDesc}.
|
|
17
|
+
|
|
18
|
+
${taskPrefix} a clean, structured experiment writeup. Write it as a practitioner's report, not an academic paper. Be concise but thorough.
|
|
19
|
+
|
|
20
|
+
## Format
|
|
21
|
+
|
|
22
|
+
# [Title — infer from the goal]
|
|
23
|
+
|
|
24
|
+
## Objective
|
|
25
|
+
What was the researcher trying to achieve?
|
|
26
|
+
|
|
27
|
+
## Setup
|
|
28
|
+
- Model architecture, dataset, hardware
|
|
29
|
+
- Key hyperparameters and configuration
|
|
30
|
+
|
|
31
|
+
## Experiments
|
|
32
|
+
For each distinct experiment/run:
|
|
33
|
+
- What was tried and why
|
|
34
|
+
- Key metrics (include actual numbers)
|
|
35
|
+
- Whether it improved over the previous best
|
|
36
|
+
|
|
37
|
+
## Results
|
|
38
|
+
- Best configuration found
|
|
39
|
+
- Final metric values
|
|
40
|
+
- Comparison to baseline / starting point
|
|
41
|
+
|
|
42
|
+
## Observations
|
|
43
|
+
- What worked, what didn't
|
|
44
|
+
- Surprising findings
|
|
45
|
+
- Hypotheses about why certain changes helped/hurt
|
|
46
|
+
|
|
47
|
+
## Next Steps (if applicable)
|
|
48
|
+
- Promising directions not yet explored
|
|
49
|
+
- Known limitations
|
|
50
|
+
|
|
51
|
+
## Citations
|
|
52
|
+
- If the work builds on another agent's commit, cite it: "Based on [agent_id/hash_prefix]"
|
|
53
|
+
- If referencing an AgentHub post, cite by post ID: "As noted in post #42"
|
|
54
|
+
- If reproducing or extending results from another agent, credit them explicitly${extraCitation}
|
|
55
|
+
|
|
56
|
+
Keep the writing direct and data-driven. Use actual metric values${dataSource}. Do not invent data.`;
|
|
57
|
+
}
|
|
58
|
+
export function createWriteupTool(getProvider) {
|
|
59
|
+
return {
|
|
60
|
+
name: "writeup",
|
|
61
|
+
description: "Generate a structured experiment writeup from your notes. Pass your experiment observations, metrics, and findings as input. Returns a formatted writeup suitable for posting to AgentHub.",
|
|
62
|
+
parameters: {
|
|
63
|
+
type: "object",
|
|
64
|
+
properties: {
|
|
65
|
+
notes: {
|
|
66
|
+
type: "string",
|
|
67
|
+
description: "Your experiment notes: goal, what you tried, metric values, observations, conclusions. Be thorough — the writeup is only as good as the input.",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
required: ["notes"],
|
|
71
|
+
},
|
|
72
|
+
execute: async (args) => {
|
|
73
|
+
const notes = args.notes;
|
|
74
|
+
if (!notes?.trim()) {
|
|
75
|
+
return JSON.stringify({ error: "notes is required" });
|
|
76
|
+
}
|
|
77
|
+
const provider = getProvider();
|
|
78
|
+
if (!provider) {
|
|
79
|
+
return JSON.stringify({ error: "No active provider" });
|
|
80
|
+
}
|
|
81
|
+
const session = await provider.createSession({
|
|
82
|
+
systemPrompt: buildWriteupSystemPrompt(),
|
|
83
|
+
});
|
|
84
|
+
try {
|
|
85
|
+
let writeup = "";
|
|
86
|
+
for await (const event of provider.send(session, notes, [])) {
|
|
87
|
+
if (event.type === "text" && event.delta) {
|
|
88
|
+
writeup += event.delta;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return JSON.stringify({ writeup: writeup || "(empty response)" });
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
return JSON.stringify({ error: `Writeup failed: ${formatError(err)}` });
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
await provider.closeSession(session).catch(() => { });
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=writeup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writeup.js","sourceRoot":"","sources":["../../src/tools/writeup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAoC,EAAE;IAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU;QAClC,CAAC,CAAC,sJAAsJ;QACxJ,CAAC,CAAC,gHAAgH,CAAC;IAErH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU;QACtC,CAAC,CAAC,gGAAgG;QAClG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,OAAO,4DAA4D,SAAS;;EAE5E,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kFAoCsE,aAAa;;mEAE5B,UAAU,uBAAuB,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAuC;IAEvC,OAAO;QACL,IAAI,EAAE,SAAS;QACf,WAAW,EACT,4LAA4L;QAC9L,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gJAAgJ;iBAC9J;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe,CAAC;YACnC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC;gBAC3C,YAAY,EAAE,wBAAwB,EAAE;aACzC,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;oBAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBACzC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;oBACzB,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,mBAAmB,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,CAAC;oBAAS,CAAC;gBACT,MAAM,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/ui/commands.d.ts
CHANGED
|
@@ -1,7 +1,43 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { Orchestrator } from "../core/orchestrator.js";
|
|
3
|
+
import type { ConnectionPool } from "../remote/connection-pool.js";
|
|
4
|
+
import type { RemoteExecutor } from "../remote/executor.js";
|
|
5
|
+
import type { MetricStore } from "../metrics/store.js";
|
|
6
|
+
import type { MetricCollector } from "../metrics/collector.js";
|
|
7
|
+
import type { MemoryStore } from "../memory/memory-store.js";
|
|
8
|
+
import type { StickyManager, StickyNote } from "../core/stickies.js";
|
|
9
|
+
import type { Message } from "./types.js";
|
|
1
10
|
export interface SlashCommand {
|
|
2
11
|
name: string;
|
|
3
12
|
args?: string;
|
|
4
13
|
description: string;
|
|
5
14
|
}
|
|
15
|
+
export interface CommandContext {
|
|
16
|
+
orchestrator: Orchestrator;
|
|
17
|
+
addMessage: (role: Message["role"], content: string) => number;
|
|
18
|
+
updateMessage: (id: number, updates: Partial<Message>) => void;
|
|
19
|
+
setMessages: React.Dispatch<React.SetStateAction<Message[]>>;
|
|
20
|
+
messages: Message[];
|
|
21
|
+
setIsStreaming: (v: boolean) => void;
|
|
22
|
+
connectionPool?: ConnectionPool;
|
|
23
|
+
metricStore?: MetricStore;
|
|
24
|
+
metricCollector?: MetricCollector;
|
|
25
|
+
memoryStore?: MemoryStore;
|
|
26
|
+
stickyManager?: StickyManager;
|
|
27
|
+
setStickyNotes?: React.Dispatch<React.SetStateAction<StickyNote[]>>;
|
|
28
|
+
executor?: RemoteExecutor;
|
|
29
|
+
/** Build Message[] from stored messages (needs access to the id counter). */
|
|
30
|
+
restoreMessages: (messages: Array<{
|
|
31
|
+
role: string;
|
|
32
|
+
content: string;
|
|
33
|
+
}>) => Message[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Single source of truth for all slash commands.
|
|
37
|
+
* Autocomplete (input-bar), /help text, and dispatch all derive from this.
|
|
38
|
+
*/
|
|
6
39
|
export declare const COMMANDS: SlashCommand[];
|
|
40
|
+
/** Format COMMANDS into the /help text block. */
|
|
41
|
+
export declare function formatHelpText(): string;
|
|
42
|
+
export declare function handleSlashCommand(input: string, ctx: CommandContext): Promise<void>;
|
|
7
43
|
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,QAAQ,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/ui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAsB1C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,6EAA6E;IAC7E,eAAe,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,OAAO,EAAE,CAAC;CACpF;AAID;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,YAAY,EAoBlC,CAAC;AAEF,iDAAiD;AACjD,wBAAgB,cAAc,IAAI,MAAM,CA2BvC;AAID,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|