@rubytech/taskmaster 1.0.30 → 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.
- package/dist/agents/workspace.js +7 -1
- package/dist/build-info.json +3 -3
- package/dist/cli/program/register.maintenance.js +3 -1
- package/dist/commands/uninstall.js +77 -8
- package/dist/control-ui/assets/{index-BZ2Jt_PC.js → index-D9HCutTJ.js} +294 -215
- package/dist/control-ui/assets/index-D9HCutTJ.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/gateway/server-methods/system.js +47 -0
- package/dist/gateway/server-methods.js +2 -1
- package/extensions/diagnostics-otel/node_modules/.bin/acorn +0 -0
- package/extensions/googlechat/node_modules/.bin/taskmaster +0 -0
- package/extensions/line/node_modules/.bin/taskmaster +0 -0
- package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
- package/extensions/matrix/node_modules/.bin/taskmaster +0 -0
- package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +0 -0
- package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
- package/extensions/msteams/node_modules/.bin/taskmaster +0 -0
- package/extensions/nostr/node_modules/.bin/taskmaster +0 -0
- package/extensions/nostr/node_modules/.bin/tsc +0 -0
- package/extensions/nostr/node_modules/.bin/tsserver +0 -0
- package/extensions/zalo/node_modules/.bin/taskmaster +0 -0
- package/extensions/zalouser/node_modules/.bin/taskmaster +0 -0
- package/package.json +54 -64
- package/scripts/install.sh +0 -0
- package/taskmaster-docs/USER-GUIDE.md +37 -2
- package/templates/.DS_Store +0 -0
- package/templates/customer/.DS_Store +0 -0
- package/templates/customer/agents/.DS_Store +0 -0
- package/templates/customer/agents/admin/BOOTSTRAP.md +1 -1
- package/templates/taskmaster/.gitignore +1 -0
- package/templates/taskmaster/agents/admin/BOOTSTRAP.md +1 -1
- package/templates/tradesupport/agents/admin/BOOTSTRAP.md +1 -1
- package/dist/control-ui/assets/index-BZ2Jt_PC.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-
|
|
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,4 +1,7 @@
|
|
|
1
1
|
import { resolveMainSessionKeyFromConfig } from "../../config/sessions.js";
|
|
2
|
+
import { uninstallCommand } from "../../commands/uninstall.js";
|
|
3
|
+
import { resolveGatewayService } from "../../daemon/service.js";
|
|
4
|
+
import { defaultRuntime } from "../../runtime.js";
|
|
2
5
|
import { getLastHeartbeatEvent } from "../../infra/heartbeat-events.js";
|
|
3
6
|
import { setHeartbeatsEnabled } from "../../infra/heartbeat-runner.js";
|
|
4
7
|
import { enqueueSystemEvent, isSystemEventContextChanged } from "../../infra/system-events.js";
|
|
@@ -119,4 +122,48 @@ export const systemHandlers = {
|
|
|
119
122
|
});
|
|
120
123
|
respond(true, { ok: true }, undefined);
|
|
121
124
|
},
|
|
125
|
+
"system.uninstall": async ({ params, respond, context }) => {
|
|
126
|
+
const purge = params.purge === true;
|
|
127
|
+
const validScopes = new Set(["service", "state", "workspace", "app"]);
|
|
128
|
+
const scopes = Array.isArray(params.scopes)
|
|
129
|
+
? params.scopes.filter((s) => validScopes.has(s))
|
|
130
|
+
: ["service", "state", "workspace"];
|
|
131
|
+
const log = context.logGateway;
|
|
132
|
+
log.info(`system.uninstall: scopes=${scopes.join(",")} purge=${purge}`);
|
|
133
|
+
// Respond before running uninstall — the gateway will exit afterward
|
|
134
|
+
respond(true, { ok: true, scopes, purge }, undefined);
|
|
135
|
+
// Small delay to let the response reach the client
|
|
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.
|
|
140
|
+
try {
|
|
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
|
+
});
|
|
150
|
+
}
|
|
151
|
+
catch (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
|
+
}
|
|
165
|
+
}
|
|
166
|
+
log.info("system.uninstall complete, exiting gateway");
|
|
167
|
+
process.exit(0);
|
|
168
|
+
},
|
|
122
169
|
};
|
|
@@ -175,7 +175,8 @@ function authorizeGatewayMethod(method, client) {
|
|
|
175
175
|
method === "records.deleteField" ||
|
|
176
176
|
method === "workspaces.create" ||
|
|
177
177
|
method === "workspaces.remove" ||
|
|
178
|
-
method === "memory.reindex"
|
|
178
|
+
method === "memory.reindex" ||
|
|
179
|
+
method === "system.uninstall") {
|
|
179
180
|
return errorShape(ErrorCodes.INVALID_REQUEST, "missing scope: operator.admin");
|
|
180
181
|
}
|
|
181
182
|
return errorShape(ErrorCodes.INVALID_REQUEST, "missing scope: operator.admin");
|
|
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
|
|
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.
|
|
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
|
+
}
|
package/scripts/install.sh
CHANGED
|
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
|
|
|
@@ -958,6 +958,41 @@ If the Software row shows "Unknown", tap the **refresh** button (circular arrow)
|
|
|
958
958
|
|
|
959
959
|
---
|
|
960
960
|
|
|
961
|
+
## Uninstalling Taskmaster
|
|
962
|
+
|
|
963
|
+
### From the Control Panel
|
|
964
|
+
|
|
965
|
+
1. Open the **Setup** page
|
|
966
|
+
2. Scroll to the bottom of the dashboard
|
|
967
|
+
3. Tap **Uninstall Taskmaster** (in red)
|
|
968
|
+
4. Type **UNINSTALL** in the confirmation box
|
|
969
|
+
5. Tap the **Uninstall** button
|
|
970
|
+
|
|
971
|
+
This stops the gateway, removes all configuration, workspace files, and attempts to remove the npm package. If the package could not be removed automatically (permissions), the page will show a command to run manually.
|
|
972
|
+
|
|
973
|
+
### From the command line
|
|
974
|
+
|
|
975
|
+
To remove everything in one command:
|
|
976
|
+
|
|
977
|
+
```bash
|
|
978
|
+
taskmaster uninstall --purge --yes
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
This removes the gateway service, configuration (`~/.taskmaster`), workspace files (`~/taskmaster`), and the npm package itself. If the npm package removal fails due to permissions, re-run with:
|
|
982
|
+
|
|
983
|
+
```bash
|
|
984
|
+
sudo npm uninstall -g @rubytech/taskmaster
|
|
985
|
+
```
|
|
986
|
+
|
|
987
|
+
For partial removal (keeps the CLI installed), use individual flags:
|
|
988
|
+
|
|
989
|
+
- `--service` — remove the gateway service only
|
|
990
|
+
- `--state` — remove configuration and session data
|
|
991
|
+
- `--workspace` — remove workspace files
|
|
992
|
+
- `--all` — remove service + state + workspace (but not the CLI)
|
|
993
|
+
|
|
994
|
+
---
|
|
995
|
+
|
|
961
996
|
## Getting Help
|
|
962
997
|
|
|
963
998
|
- **Email:** taskmaster@rubytech.llc
|
|
Binary file
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|