@rubytech/taskmaster 1.0.6 → 1.0.7

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.
@@ -7,7 +7,9 @@ const log = createSubsystemLogger("gateway/skills");
7
7
  const listeners = new Set();
8
8
  const workspaceVersions = new Map();
9
9
  const watchers = new Map();
10
- let globalVersion = 0;
10
+ // Start at 1 so that any cached session snapshot with version 0 is treated as
11
+ // stale on the first message after a gateway restart.
12
+ let globalVersion = 1;
11
13
  export const DEFAULT_SKILLS_WATCH_IGNORED = [
12
14
  /(^|[\\/])\.git([\\/]|$)/,
13
15
  /(^|[\\/])node_modules([\\/]|$)/,
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.6",
3
- "commit": "f50bf4225d9f628ae369ac7b6d520687095a688d",
4
- "builtAt": "2026-02-15T08:03:07.343Z"
2
+ "version": "1.0.7",
3
+ "commit": "bf449131fd6c863dbc502e6e32f116a0bf54f235",
4
+ "builtAt": "2026-02-15T08:31:28.073Z"
5
5
  }
@@ -22,6 +22,7 @@ export function registerProvisionCli(program) {
22
22
  .option("--port <port>", `Gateway port (default: ${DEFAULT_GATEWAY_PORT})`)
23
23
  .option("--workspace <path>", `Workspace path (default: ${DEFAULT_WORKSPACE})`)
24
24
  .option("--force", "Overwrite existing config and workspace")
25
+ .option("--skip-platform", "Skip platform setup (avahi, hostname, mDNS) — used by install.sh")
25
26
  .action(async (opts) => {
26
27
  await runProvision(opts);
27
28
  });
@@ -34,6 +35,7 @@ async function runProvision(opts) {
34
35
  }
35
36
  const workspace = opts.workspace ? path.resolve(opts.workspace) : DEFAULT_WORKSPACE;
36
37
  const force = Boolean(opts.force);
38
+ const skipPlatform = Boolean(opts.skipPlatform);
37
39
  const isLinux = process.platform === "linux";
38
40
  console.log("");
39
41
  console.log("Taskmaster Provision");
@@ -46,7 +48,12 @@ async function runProvision(opts) {
46
48
  // Step 3: Write agent list to config
47
49
  await writeAgentList(workspace);
48
50
  // Step 4-6: Linux-only mDNS setup
49
- if (isLinux) {
51
+ if (skipPlatform) {
52
+ console.log("[4/7] Avahi: handled by install script");
53
+ console.log("[5/7] Hostname: handled by install script");
54
+ console.log("[6/7] mDNS: handled by install script");
55
+ }
56
+ else if (isLinux) {
50
57
  await installAvahi();
51
58
  await setHostname();
52
59
  await registerMdnsService(port);
@@ -15,7 +15,7 @@ async function findPackageRoot(startDir, maxDepth = 12) {
15
15
  let current = path.resolve(startDir);
16
16
  for (let i = 0; i < maxDepth; i += 1) {
17
17
  const name = await readPackageName(current);
18
- if (name === "taskmaster")
18
+ if (name === "taskmaster" || name === "@rubytech/taskmaster")
19
19
  return current;
20
20
  const parent = path.dirname(current);
21
21
  if (parent === current)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/taskmaster",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "AI-powered business assistant for small businesses",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -118,8 +118,74 @@ if [ -n "$PORT" ]; then
118
118
  PROVISION_ARGS="--port $PORT"
119
119
  fi
120
120
 
121
- # shellcheck disable=SC2086
122
- taskmaster provision $PROVISION_ARGS
121
+ REAL_USER="${SUDO_USER:-$(whoami)}"
122
+ MDNS_PORT="${PORT:-18789}"
123
+
124
+ if [ "$(id -u)" = "0" ] && [ "$REAL_USER" != "root" ]; then
125
+ # ── Running as root via sudo ──
126
+ # Platform setup needs root. Provision (config, workspace, daemon) needs
127
+ # to run as the real user so paths resolve to their home and systemctl
128
+ # --user has a D-Bus session.
129
+
130
+ if [ "$PLATFORM" = "linux" ]; then
131
+ echo "Platform setup..."
132
+
133
+ # Avahi / mDNS
134
+ apt-get install -y avahi-daemon avahi-utils >/dev/null 2>&1 \
135
+ && echo " avahi-daemon installed" \
136
+ || echo " avahi-daemon install failed (continuing)"
137
+
138
+ # Hostname
139
+ hostnamectl set-hostname taskmaster 2>/dev/null \
140
+ && echo " hostname set to 'taskmaster'" \
141
+ || echo " hostname set failed (continuing)"
142
+
143
+ # mDNS service file
144
+ mkdir -p /etc/avahi/services
145
+ cat > /etc/avahi/services/taskmaster.service << XMLEOF
146
+ <?xml version="1.0" standalone='no'?>
147
+ <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
148
+ <service-group>
149
+ <name replace-wildcards="yes">Taskmaster on %h</name>
150
+ <service>
151
+ <type>_http._tcp</type>
152
+ <port>${MDNS_PORT}</port>
153
+ <txt-record>path=/</txt-record>
154
+ </service>
155
+ </service-group>
156
+ XMLEOF
157
+ systemctl restart avahi-daemon 2>/dev/null || true
158
+ echo " mDNS service registered on port $MDNS_PORT"
159
+
160
+ # Enable user services so systemctl --user works after logout
161
+ REAL_UID=$(id -u "$REAL_USER")
162
+ loginctl enable-linger "$REAL_USER" 2>/dev/null || true
163
+ systemctl start "user@${REAL_UID}.service" 2>/dev/null || true
164
+
165
+ # Wait for user D-Bus session bus
166
+ for _i in $(seq 1 10); do
167
+ [ -S "/run/user/$REAL_UID/bus" ] && break
168
+ sleep 0.5
169
+ done
170
+ fi
171
+
172
+ # Resolve real user's home
173
+ REAL_HOME=$(getent passwd "$REAL_USER" 2>/dev/null | cut -d: -f6)
174
+ [ -z "$REAL_HOME" ] && REAL_HOME="/home/$REAL_USER"
175
+ REAL_UID=$(id -u "$REAL_USER")
176
+
177
+ # Run provision as the real user
178
+ # shellcheck disable=SC2086
179
+ sudo -u "$REAL_USER" \
180
+ HOME="$REAL_HOME" \
181
+ XDG_RUNTIME_DIR="/run/user/$REAL_UID" \
182
+ DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$REAL_UID/bus" \
183
+ taskmaster provision --skip-platform $PROVISION_ARGS
184
+ else
185
+ # Not root, or running as actual root — run provision normally
186
+ # shellcheck disable=SC2086
187
+ taskmaster provision $PROVISION_ARGS
188
+ fi
123
189
 
124
190
  echo ""
125
191
  echo "Installation complete."
@@ -1,3 +1,8 @@
1
+ ---
2
+ name: event-management
3
+ description: "Manage anything time-bound: appointments, meetings, reminders, follow-ups, callbacks, deadlines — any scheduled action between one or more parties."
4
+ ---
5
+
1
6
  # Event Management
2
7
 
3
8
  Applies when handling anything time-bound: appointments, meetings, reminders, follow-ups, callbacks, deadlines — any commitment or scheduled action between one or more parties.
@@ -1,15 +1,9 @@
1
- # Taskmaster Product Skill
2
-
3
- <description>
4
- Handle enquiries about Taskmaster — the AI business assistant for UK tradespeople.
5
- </description>
1
+ ---
2
+ name: taskmaster
3
+ description: "Handle enquiries about Taskmaster — the AI business assistant for small businesses. Product info, pricing, signup, licensing, and support."
4
+ ---
6
5
 
7
- <triggers>
8
- - Questions about Taskmaster, the product, pricing, or signup
9
- - "What is Taskmaster?", "How does it work?", "How much does it cost?"
10
- - Interest in AI assistant for trades business
11
- - Requests for demo, trial, or signup
12
- </triggers>
6
+ # Taskmaster Product Skill
13
7
 
14
8
  ---
15
9