spur-board 0.2.0 → 0.4.0
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 +12 -1
- package/dist/cli.mjs +3 -3
- package/dist/{client-8Y8bDaQw.mjs → client-sGJ4fzQ4.mjs} +2 -2
- package/dist/client.mjs +1 -1
- package/dist/{config-xzIjNtfV.mjs → config-DPXFxZQy.mjs} +1 -1
- package/dist/daemon.mjs +8485 -535
- package/dist/mcp.mjs +3 -3
- package/dist/migrations/0010_manual_links.sql +40 -0
- package/dist/{src-D3PJf7bc.mjs → src-Cf78bzK5.mjs} +140 -52
- package/package.json +1 -1
- package/skills/setup/SKILL.md +43 -0
- package/skills/setup/references/secrets.md +9 -0
- package/skills/setup/references/slack.md +9 -0
- package/skills/setup/references/update.md +11 -0
- package/skills/spur-board/SKILL.md +36 -10
- package/skills/spur-board/references/commands.md +1 -1
package/README.md
CHANGED
|
@@ -4,9 +4,20 @@ A kanban board for agent-driven development on top of [Spur](https://github.com/
|
|
|
4
4
|
a local daemon that tracks tasks across GitHub, Jira and agent sessions, a `board` CLI and MCP
|
|
5
5
|
server for agents, and Slack for the human operator.
|
|
6
6
|
|
|
7
|
-
**Status:** early development.
|
|
7
|
+
**Status:** early development. Work is tracked in
|
|
8
8
|
[GitHub Issues](https://github.com/AnDeVerin/spur-board/issues).
|
|
9
9
|
|
|
10
|
+
## Setup with an agent
|
|
11
|
+
|
|
12
|
+
Ask your agent to check whether `spur-board-setup` is already installed. If it is missing, the
|
|
13
|
+
agent asks your approval to write its skill folders before running
|
|
14
|
+
`npx -y spur-board@latest skills install`. It then reads the installed `spur-board-setup` skill
|
|
15
|
+
and follows it through a green `board doctor` and the live announcement. The agent checks state
|
|
16
|
+
before each action, asks one question at a time, and asks before changing package, config,
|
|
17
|
+
secret, service, token, skill-folder, or project-checkout state or enabling lingering. You create
|
|
18
|
+
the Slack app and supply Jira and GitHub tokens through private local input; never paste tokens
|
|
19
|
+
into chat.
|
|
20
|
+
|
|
10
21
|
## License
|
|
11
22
|
|
|
12
23
|
[MIT](LICENSE)
|
package/dist/cli.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { F as configSchema, I as SLACK_BOT_SCOPES, s as OPERATIONS } from "./src-
|
|
2
|
-
import { a as renderCliError, i as errorExitCode, n as requestTokenEnrollment, o as escapeTerminalControls, r as CliError, t as requestOperation } from "./client-
|
|
3
|
-
import { n as loadEnrollmentConfig, t as loadClientConfig } from "./config-
|
|
1
|
+
import { F as configSchema, I as SLACK_BOT_SCOPES, s as OPERATIONS } from "./src-Cf78bzK5.mjs";
|
|
2
|
+
import { a as renderCliError, i as errorExitCode, n as requestTokenEnrollment, o as escapeTerminalControls, r as CliError, t as requestOperation } from "./client-sGJ4fzQ4.mjs";
|
|
3
|
+
import { n as loadEnrollmentConfig, t as loadClientConfig } from "./config-DPXFxZQy.mjs";
|
|
4
4
|
import { createHash, randomBytes, randomUUID } from "node:crypto";
|
|
5
5
|
import { chmodSync, closeSync, constants, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, readlinkSync, realpathSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
6
6
|
import { homedir, hostname, userInfo } from "node:os";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as errorContextSchema, N as errorEnvelopeSchema, P as successEnvelopeSchema, j as ERRORS, l as renderJsonError } from "./src-
|
|
1
|
+
import { M as errorContextSchema, N as errorEnvelopeSchema, P as successEnvelopeSchema, j as ERRORS, l as renderJsonError } from "./src-Cf78bzK5.mjs";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { request } from "node:http";
|
|
@@ -64,7 +64,7 @@ function problemError(status, contentType, body) {
|
|
|
64
64
|
const code = problem["code"];
|
|
65
65
|
if (typeof code === "string" && Object.hasOwn(ERRORS, code) && ERRORS[code].status === status) {
|
|
66
66
|
const context = errorContextSchema.safeParse(problem["context"]);
|
|
67
|
-
return new CliError(code, context.success ? context.data : void 0, requestId);
|
|
67
|
+
return new CliError(code, context.success ? context.data : void 0, requestId, typeof problem["hint"] === "string" && problem["hint"] ? problem["hint"] : void 0);
|
|
68
68
|
}
|
|
69
69
|
return new CliError("outcome_unknown", void 0, requestId);
|
|
70
70
|
}
|
package/dist/client.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as requestTokenEnrollment, t as requestOperation } from "./client-
|
|
1
|
+
import { n as requestTokenEnrollment, t as requestOperation } from "./client-sGJ4fzQ4.mjs";
|
|
2
2
|
export { requestOperation, requestTokenEnrollment };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as CliError } from "./client-
|
|
1
|
+
import { r as CliError } from "./client-sGJ4fzQ4.mjs";
|
|
2
2
|
import { closeSync, constants, fstatSync, lstatSync, openSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { dirname, isAbsolute, join, relative, sep } from "node:path";
|