spur-board 0.2.0 → 0.3.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 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. Nothing here is usable yet. Work is tracked in
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-D3PJf7bc.mjs";
2
- import { a as renderCliError, i as errorExitCode, n as requestTokenEnrollment, o as escapeTerminalControls, r as CliError, t as requestOperation } from "./client-8Y8bDaQw.mjs";
3
- import { n as loadEnrollmentConfig, t as loadClientConfig } from "./config-xzIjNtfV.mjs";
1
+ import { F as configSchema, I as SLACK_BOT_SCOPES, s as OPERATIONS } from "./src-BDNEze3S.mjs";
2
+ import { a as renderCliError, i as errorExitCode, n as requestTokenEnrollment, o as escapeTerminalControls, r as CliError, t as requestOperation } from "./client-C81xon5D.mjs";
3
+ import { n as loadEnrollmentConfig, t as loadClientConfig } from "./config-D8AEf8vU.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-D3PJf7bc.mjs";
1
+ import { M as errorContextSchema, N as errorEnvelopeSchema, P as successEnvelopeSchema, j as ERRORS, l as renderJsonError } from "./src-BDNEze3S.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-8Y8bDaQw.mjs";
1
+ import { n as requestTokenEnrollment, t as requestOperation } from "./client-C81xon5D.mjs";
2
2
  export { requestOperation, requestTokenEnrollment };
@@ -1,4 +1,4 @@
1
- import { r as CliError } from "./client-8Y8bDaQw.mjs";
1
+ import { r as CliError } from "./client-C81xon5D.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";