@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.
- package/dist/agents/skills/refresh.js +3 -1
- package/dist/build-info.json +3 -3
- package/dist/cli/provision-cli.js +8 -1
- package/dist/infra/taskmaster-root.js +1 -1
- package/package.json +1 -1
- package/scripts/install.sh +68 -2
- package/skills/event-management/SKILL.md +5 -0
- package/skills/taskmaster/SKILL.md +5 -11
|
@@ -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
|
-
|
|
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([\\/]|$)/,
|
package/dist/build-info.json
CHANGED
|
@@ -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 (
|
|
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
package/scripts/install.sh
CHANGED
|
@@ -118,8 +118,74 @@ if [ -n "$PORT" ]; then
|
|
|
118
118
|
PROVISION_ARGS="--port $PORT"
|
|
119
119
|
fi
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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
|
|