@rubytech/taskmaster 1.0.31 → 1.0.32

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 (32) hide show
  1. package/dist/agents/workspace.js +7 -1
  2. package/dist/build-info.json +3 -3
  3. package/dist/control-ui/assets/{index-BTi4rBlY.js → index-D9HCutTJ.js} +234 -212
  4. package/dist/control-ui/assets/index-D9HCutTJ.js.map +1 -0
  5. package/dist/control-ui/index.html +1 -1
  6. package/dist/gateway/server-methods/system.js +26 -12
  7. package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -0
  8. package/extensions/googlechat/node_modules/.bin/taskmaster +0 -0
  9. package/extensions/line/node_modules/.bin/taskmaster +0 -0
  10. package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
  11. package/extensions/matrix/node_modules/.bin/taskmaster +0 -0
  12. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -0
  13. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
  14. package/extensions/msteams/node_modules/.bin/taskmaster +0 -0
  15. package/extensions/nostr/node_modules/.bin/taskmaster +0 -0
  16. package/extensions/nostr/node_modules/.bin/tsc +0 -0
  17. package/extensions/nostr/node_modules/.bin/tsserver +0 -0
  18. package/extensions/zalo/node_modules/.bin/taskmaster +0 -0
  19. package/extensions/zalouser/node_modules/.bin/taskmaster +0 -0
  20. package/package.json +54 -64
  21. package/scripts/install.sh +0 -0
  22. package/taskmaster-docs/USER-GUIDE.md +2 -2
  23. package/templates/.DS_Store +0 -0
  24. package/templates/customer/.DS_Store +0 -0
  25. package/templates/customer/agents/.DS_Store +0 -0
  26. package/templates/customer/agents/admin/BOOTSTRAP.md +1 -1
  27. package/templates/taskmaster/.gitignore +1 -0
  28. package/templates/taskmaster/agents/admin/BOOTSTRAP.md +1 -1
  29. package/templates/tradesupport/agents/admin/BOOTSTRAP.md +1 -1
  30. package/dist/control-ui/assets/index-BTi4rBlY.js.map +0 -1
  31. package/dist/control-ui/assets/uninstall-mUk7IPTt.js +0 -2
  32. package/dist/control-ui/assets/uninstall-mUk7IPTt.js.map +0 -1
@@ -6,7 +6,7 @@
6
6
  <title>Taskmaster Control</title>
7
7
  <meta name="color-scheme" content="dark light" />
8
8
  <link rel="icon" type="image/png" href="./favicon.png" />
9
- <script type="module" crossorigin src="./assets/index-BTi4rBlY.js"></script>
9
+ <script type="module" crossorigin src="./assets/index-D9HCutTJ.js"></script>
10
10
  <link rel="stylesheet" crossorigin href="./assets/index-BQEnHucA.css">
11
11
  </head>
12
12
  <body>
@@ -1,5 +1,6 @@
1
1
  import { resolveMainSessionKeyFromConfig } from "../../config/sessions.js";
2
2
  import { uninstallCommand } from "../../commands/uninstall.js";
3
+ import { resolveGatewayService } from "../../daemon/service.js";
3
4
  import { defaultRuntime } from "../../runtime.js";
4
5
  import { getLastHeartbeatEvent } from "../../infra/heartbeat-events.js";
5
6
  import { setHeartbeatsEnabled } from "../../infra/heartbeat-runner.js";
@@ -127,28 +128,41 @@ export const systemHandlers = {
127
128
  const scopes = Array.isArray(params.scopes)
128
129
  ? params.scopes.filter((s) => validScopes.has(s))
129
130
  : ["service", "state", "workspace"];
130
- const opts = {
131
- service: scopes.includes("service"),
132
- state: scopes.includes("state"),
133
- workspace: scopes.includes("workspace"),
134
- app: scopes.includes("app"),
135
- purge,
136
- yes: true,
137
- nonInteractive: true,
138
- };
139
131
  const log = context.logGateway;
140
132
  log.info(`system.uninstall: scopes=${scopes.join(",")} purge=${purge}`);
141
133
  // Respond before running uninstall — the gateway will exit afterward
142
134
  respond(true, { ok: true, scopes, purge }, undefined);
143
135
  // Small delay to let the response reach the client
144
136
  await new Promise((r) => setTimeout(r, 500));
137
+ // Run state + workspace + purge first, WITHOUT the service scope.
138
+ // We cannot stop our own service — systemd would SIGTERM this process
139
+ // before workspace/state removal runs.
145
140
  try {
146
- await uninstallCommand(defaultRuntime, opts);
141
+ await uninstallCommand(defaultRuntime, {
142
+ service: false,
143
+ state: scopes.includes("state"),
144
+ workspace: scopes.includes("workspace"),
145
+ app: scopes.includes("app"),
146
+ purge,
147
+ yes: true,
148
+ nonInteractive: true,
149
+ });
147
150
  }
148
151
  catch (err) {
149
- log.error(`system.uninstall failed: ${String(err)}`);
152
+ log.error(`system.uninstall (data removal) failed: ${String(err)}`);
153
+ }
154
+ // Now uninstall the service files (without stopping — we ARE the service).
155
+ // The process.exit below handles the actual stop.
156
+ if (scopes.includes("service")) {
157
+ try {
158
+ const service = resolveGatewayService();
159
+ await service.uninstall({ env: process.env, stdout: process.stdout });
160
+ log.info("Gateway service uninstalled");
161
+ }
162
+ catch (err) {
163
+ log.error(`Service uninstall failed: ${String(err)}`);
164
+ }
150
165
  }
151
- // Exit the gateway process — everything has been removed
152
166
  log.info("system.uninstall complete, exiting gateway");
153
167
  process.exit(0);
154
168
  },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/taskmaster",
3
- "version": "1.0.31",
3
+ "version": "1.0.32",
4
4
  "description": "AI-powered business assistant for small businesses",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -77,66 +77,12 @@
77
77
  "dist/filler/**",
78
78
  "dist/license/**"
79
79
  ],
80
- "scripts": {
81
- "dev": "node scripts/run-node.mjs",
82
- "postinstall": "node scripts/postinstall.js",
83
- "prepack": "pnpm build && pnpm ui:build",
84
- "docs:list": "node scripts/docs-list.js",
85
- "docs:bin": "node scripts/build-docs-list.mjs",
86
- "docs:dev": "cd docs && mint dev",
87
- "docs:build": "cd docs && pnpm dlx --reporter append-only mint broken-links",
88
- "build": "tsc -p tsconfig.json && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts",
89
- "plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
90
- "release:check": "node --import tsx scripts/release-check.ts",
91
- "ui:install": "node scripts/ui.js install",
92
- "ui:dev": "node scripts/ui.js dev",
93
- "ui:build": "node scripts/ui.js build",
94
- "start": "node scripts/run-node.mjs",
95
- "taskmaster": "node scripts/run-node.mjs",
96
- "gateway:watch": "node scripts/watch-node.mjs gateway --force",
97
- "logs": "npx tsx scripts/session-viewer.ts",
98
- "gateway:dev": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
99
- "gateway:dev:reset": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
100
- "tui": "node scripts/run-node.mjs tui",
101
- "tui:dev": "TASKMASTER_PROFILE=dev node scripts/run-node.mjs tui",
102
- "taskmaster:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
103
- "lint": "oxlint --type-aware src test",
104
- "lint:fix": "pnpm format:fix && oxlint --type-aware --fix src test",
105
- "format": "oxfmt --check src test",
106
- "format:fix": "oxfmt --write src test",
107
- "test": "node scripts/test-parallel.mjs",
108
- "test:watch": "vitest",
109
- "test:ui": "pnpm --dir ui test",
110
- "test:force": "node --import tsx scripts/test-force.ts",
111
- "test:coverage": "vitest run --coverage",
112
- "test:e2e": "vitest run --config vitest.e2e.config.ts",
113
- "test:live": "TASKMASTER_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
114
- "test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
115
- "test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
116
- "test:docker:live-models": "bash scripts/test-live-models-docker.sh",
117
- "test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
118
- "test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
119
- "test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
120
- "test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
121
- "test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
122
- "test:docker:all": "pnpm test:docker:live-models && pnpm test:docker:live-gateway && pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins && pnpm test:docker:cleanup",
123
- "test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
124
- "test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
125
- "test:install:smoke": "bash scripts/test-install-sh-docker.sh",
126
- "test:install:e2e:openai": "TASKMASTER_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
127
- "test:install:e2e:anthropic": "TASKMASTER_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
128
- "protocol:gen": "node --import tsx scripts/protocol-gen.ts",
129
- "protocol:check": "pnpm protocol:gen && git diff --exit-code -- dist/protocol.schema.json",
130
- "canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
131
- "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500"
132
- },
133
80
  "keywords": [],
134
81
  "author": "",
135
82
  "license": "MIT",
136
83
  "engines": {
137
84
  "node": ">=22.12.0"
138
85
  },
139
- "packageManager": "pnpm@10.23.0",
140
86
  "dependencies": {
141
87
  "@agentclientprotocol/sdk": "0.13.1",
142
88
  "@aws-sdk/client-bedrock": "^3.975.0",
@@ -226,14 +172,6 @@
226
172
  "vitest": "^4.0.18",
227
173
  "wireit": "^0.14.12"
228
174
  },
229
- "pnpm": {
230
- "minimumReleaseAge": 2880,
231
- "overrides": {
232
- "@sinclair/typebox": "0.34.47",
233
- "hono": "4.11.4",
234
- "tar": "7.5.4"
235
- }
236
- },
237
175
  "vitest": {
238
176
  "coverage": {
239
177
  "provider": "v8",
@@ -262,5 +200,57 @@
262
200
  "**/vendor/**",
263
201
  "dist/Taskmaster.app/**"
264
202
  ]
203
+ },
204
+ "scripts": {
205
+ "dev": "node scripts/run-node.mjs",
206
+ "postinstall": "node scripts/postinstall.js",
207
+ "docs:list": "node scripts/docs-list.js",
208
+ "docs:bin": "node scripts/build-docs-list.mjs",
209
+ "docs:dev": "cd docs && mint dev",
210
+ "docs:build": "cd docs && pnpm dlx --reporter append-only mint broken-links",
211
+ "build": "tsc -p tsconfig.json && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts",
212
+ "plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
213
+ "release:check": "node --import tsx scripts/release-check.ts",
214
+ "ui:install": "node scripts/ui.js install",
215
+ "ui:dev": "node scripts/ui.js dev",
216
+ "ui:build": "node scripts/ui.js build",
217
+ "start": "node scripts/run-node.mjs",
218
+ "taskmaster": "node scripts/run-node.mjs",
219
+ "gateway:watch": "node scripts/watch-node.mjs gateway --force",
220
+ "logs": "npx tsx scripts/session-viewer.ts",
221
+ "gateway:dev": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
222
+ "gateway:dev:reset": "TASKMASTER_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
223
+ "tui": "node scripts/run-node.mjs tui",
224
+ "tui:dev": "TASKMASTER_PROFILE=dev node scripts/run-node.mjs tui",
225
+ "taskmaster:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
226
+ "lint": "oxlint --type-aware src test",
227
+ "lint:fix": "pnpm format:fix && oxlint --type-aware --fix src test",
228
+ "format": "oxfmt --check src test",
229
+ "format:fix": "oxfmt --write src test",
230
+ "test": "node scripts/test-parallel.mjs",
231
+ "test:watch": "vitest",
232
+ "test:ui": "pnpm --dir ui test",
233
+ "test:force": "node --import tsx scripts/test-force.ts",
234
+ "test:coverage": "vitest run --coverage",
235
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
236
+ "test:live": "TASKMASTER_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
237
+ "test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
238
+ "test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
239
+ "test:docker:live-models": "bash scripts/test-live-models-docker.sh",
240
+ "test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
241
+ "test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
242
+ "test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
243
+ "test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
244
+ "test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
245
+ "test:docker:all": "pnpm test:docker:live-models && pnpm test:docker:live-gateway && pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins && pnpm test:docker:cleanup",
246
+ "test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
247
+ "test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
248
+ "test:install:smoke": "bash scripts/test-install-sh-docker.sh",
249
+ "test:install:e2e:openai": "TASKMASTER_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
250
+ "test:install:e2e:anthropic": "TASKMASTER_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
251
+ "protocol:gen": "node --import tsx scripts/protocol-gen.ts",
252
+ "protocol:check": "pnpm protocol:gen && git diff --exit-code -- dist/protocol.schema.json",
253
+ "canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
254
+ "check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500"
265
255
  }
266
- }
256
+ }
File without changes
@@ -45,7 +45,7 @@ curl -fsSL https://taskmaster.bot/install.sh | sudo bash
45
45
  3. Wait for it to finish (a few minutes — it installs Node.js if needed)
46
46
  4. Open a browser on any device on the same Wi-Fi network and go to: **http://taskmaster.local:18789/setup**
47
47
 
48
- > After installation, Taskmaster runs in the background and starts automatically when the Pi restarts. You can disconnect the monitor and keyboard.
48
+ > After installation, Taskmaster runs in the background and starts automatically when the Pi restarts. It can take up to 2 minutes to come back online after a power cycle. You can disconnect the monitor and keyboard.
49
49
 
50
50
  ### Option C: Install on a Mac
51
51
 
@@ -79,7 +79,7 @@ taskmaster provision
79
79
 
80
80
  4. Open your browser and go to: **http://taskmaster.local:18789/setup**
81
81
 
82
- > Taskmaster runs in the background and starts automatically when your device restarts. You can close the terminal after installation.
82
+ > Taskmaster runs in the background and starts automatically when your device restarts. It can take up to 2 minutes to come back online after a power cycle. You can close the terminal after installation.
83
83
 
84
84
  ---
85
85
 
Binary file
Binary file
@@ -56,7 +56,7 @@ Tell them:
56
56
 
57
57
  ## Step 7: Delete This File
58
58
 
59
- Once setup is complete, delete this file. You won't need it again.
59
+ Once setup is complete, create a file called `.bootstrap-done` in this directory (empty content is fine), then delete this file. The `.bootstrap-done` marker prevents this onboarding from reappearing.
60
60
 
61
61
  ---
62
62
 
@@ -0,0 +1 @@
1
+ .DS_Store
@@ -32,7 +32,7 @@ If yes, use the `authorize_admin` tool with the phone number (international form
32
32
 
33
33
  ## Step 5: Delete This File
34
34
 
35
- Once setup is complete, delete this file. You won't need it again.
35
+ Once setup is complete, create a file called `.bootstrap-done` in this directory (empty content is fine), then delete this file. The `.bootstrap-done` marker prevents this onboarding from reappearing.
36
36
 
37
37
  ---
38
38
 
@@ -57,7 +57,7 @@ Tell them:
57
57
 
58
58
  ## Step 7: Delete This File
59
59
 
60
- Once setup is complete, delete this file. You won't need it again.
60
+ Once setup is complete, create a file called `.bootstrap-done` in this directory (empty content is fine), then delete this file. The `.bootstrap-done` marker prevents this onboarding from reappearing.
61
61
 
62
62
  ---
63
63