goto-assistant 0.1.4 → 0.1.6

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 CHANGED
@@ -23,6 +23,35 @@ Custom location: `GOTO_DATA_DIR=/path/to/data npx goto-assistant`
23
23
  PORT=3001 npx goto-assistant
24
24
  ```
25
25
 
26
+ ## Why goto-assistant?
27
+
28
+ One command, no Docker, no framework — just MCP.
29
+
30
+ ```
31
+ You
32
+
33
+ chat / ask
34
+
35
+
36
+ ┌───────────┐
37
+ │ AI │
38
+ │ Assistant │
39
+ └──┬──┬──┬──┘
40
+ │ │ │ │
41
+ │ │ │ └── create / update / run / ──▶ ┌───────┐
42
+ │ │ │ schedule / get results │ Cron │─ ─ ┐
43
+ │ │ └───── read / write ────────────▶ ┌─┴───────┴┐ │
44
+ │ │ │ Files │ │ AI tasks
45
+ │ └──────── remember / recall ───────▶ ┌┴──────────┴┐ │ w/ MCP
46
+ │ │ Memory │◀─┘ access
47
+ │ ├────────────┤
48
+ └────────── do anything ──────────────▶ │ + your │
49
+ │ MCP servers│
50
+ └────────────┘
51
+ ```
52
+
53
+ That one `npx` command gives you an AI assistant that can remember across conversations, manage your files, and run tasks on a schedule or on-demand — all through the standard [MCP protocol](https://modelcontextprotocol.io). Add any MCP server to extend it further.
54
+
26
55
  ## Architecture
27
56
 
28
57
  ```
@@ -103,7 +132,7 @@ The assistant comes pre-configured with these MCP servers:
103
132
  |--------|---------|-------------|
104
133
  | **memory** | [`@modelcontextprotocol/server-memory`](https://github.com/modelcontextprotocol/servers/tree/main/src/memory) | Persistent knowledge graph across conversations |
105
134
  | **filesystem** | [`@modelcontextprotocol/server-filesystem`](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) | Read, write, and manage local files |
106
- | **cron** | [`mcp-cron`](https://github.com/jolks/mcp-cron) | Schedule shell commands and AI prompts with access to MCP servers |
135
+ | **cron** | [`mcp-cron`](https://github.com/jolks/mcp-cron) | Schedule or run on-demand shell commands and AI prompts with access to MCP servers |
107
136
 
108
137
  Add your own through the setup page or by editing `data/mcp.json` directly. Any MCP server that supports stdio transport will work — browse the [MCP server directory](https://github.com/modelcontextprotocol/servers) for more.
109
138
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "goto-assistant",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Lightweight, self-hosted personal AI assistant",
5
5
  "license": "MIT",
6
6
  "packageManager": "pnpm@10.29.3",
package/public/setup.html CHANGED
@@ -81,7 +81,7 @@
81
81
  // Thin wrapper that passes mutable state to the extracted syncCronConfig
82
82
  function doSyncCronConfig() {
83
83
  servers = readServers();
84
- servers = syncCronConfig(servers, isEditing, buildCronConfig);
84
+ servers = syncCronConfig(servers, isEditing, buildCronConfig, window._savedConfig);
85
85
  renderServers(servers);
86
86
  }
87
87
 
package/public/setup.js CHANGED
@@ -72,7 +72,7 @@ function readServers() {
72
72
  // Sync cron server config. Takes servers array, isEditing flag, and buildCronConfigFn.
73
73
  // Returns updated servers array (mutates in place for convenience, also returns).
74
74
  // eslint-disable-next-line no-unused-vars
75
- function syncCronConfig(servers, isEditing, buildCronConfigFn) {
75
+ function syncCronConfig(servers, isEditing, buildCronConfigFn, savedConfig) {
76
76
  var cron = servers.find(function (s) { return s.name === 'cron'; });
77
77
  if (!cron) return servers;
78
78
 
@@ -98,9 +98,14 @@ function syncCronConfig(servers, isEditing, buildCronConfigFn) {
98
98
  oldKeys.forEach(function (k) { delete cron.env[k]; });
99
99
  cron.env[result.envKey] = result.envValue;
100
100
  } else if (oldKeys.length > 0 && oldKeys[0] !== result.envKey) {
101
- var existingValue = cron.env[oldKeys[0]];
101
+ // Use the target provider's masked key from savedConfig when available
102
+ var targetValue = cron.env[oldKeys[0]];
103
+ if (savedConfig) {
104
+ var pc = savedConfig[provider] || {};
105
+ if (pc.apiKey) targetValue = pc.apiKey;
106
+ }
102
107
  oldKeys.forEach(function (k) { delete cron.env[k]; });
103
- cron.env[result.envKey] = existingValue;
108
+ cron.env[result.envKey] = targetValue;
104
109
  }
105
110
 
106
111
  return servers;