frontier-mcp 0.1.0 → 0.2.1

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.
Files changed (59) hide show
  1. package/README.md +10 -5
  2. package/dist/driver-registry.d.ts +15 -0
  3. package/dist/driver-registry.d.ts.map +1 -0
  4. package/dist/driver-registry.js +19 -0
  5. package/dist/driver-registry.js.map +1 -0
  6. package/dist/server.d.ts +23 -4
  7. package/dist/server.d.ts.map +1 -1
  8. package/dist/server.js +81 -39
  9. package/dist/server.js.map +1 -1
  10. package/dist/storage/driver.d.ts +41 -8
  11. package/dist/storage/driver.d.ts.map +1 -1
  12. package/dist/storage/driver.js.map +1 -1
  13. package/dist/storage/markdown/create.d.ts +5 -5
  14. package/dist/storage/markdown/create.d.ts.map +1 -1
  15. package/dist/storage/markdown/create.js +17 -17
  16. package/dist/storage/markdown/create.js.map +1 -1
  17. package/dist/storage/markdown/driver.d.ts +35 -1
  18. package/dist/storage/markdown/driver.d.ts.map +1 -1
  19. package/dist/storage/markdown/driver.js +155 -84
  20. package/dist/storage/markdown/driver.js.map +1 -1
  21. package/dist/storage/markdown/migrate.d.ts +4 -4
  22. package/dist/storage/markdown/migrate.d.ts.map +1 -1
  23. package/dist/storage/markdown/migrate.js +1 -1
  24. package/dist/storage/markdown/migrate.js.map +1 -1
  25. package/dist/storage/markdown/ticket.d.ts +16 -5
  26. package/dist/storage/markdown/ticket.d.ts.map +1 -1
  27. package/dist/storage/markdown/ticket.js +19 -7
  28. package/dist/storage/markdown/ticket.js.map +1 -1
  29. package/dist/storage/markdown/watcher.d.ts +33 -0
  30. package/dist/storage/markdown/watcher.d.ts.map +1 -0
  31. package/dist/storage/markdown/watcher.js +142 -0
  32. package/dist/storage/markdown/watcher.js.map +1 -0
  33. package/dist/tools/create-tickets.d.ts +4 -4
  34. package/dist/tools/create-tickets.d.ts.map +1 -1
  35. package/dist/tools/create-tickets.js.map +1 -1
  36. package/dist/tools/list-efforts.d.ts.map +1 -1
  37. package/dist/tools/list-efforts.js +2 -1
  38. package/dist/tools/list-efforts.js.map +1 -1
  39. package/dist/tools/update-ticket.d.ts +3 -3
  40. package/dist/tools/update-ticket.d.ts.map +1 -1
  41. package/dist/tools/update-ticket.js.map +1 -1
  42. package/dist/tools/workspace-line.d.ts +18 -0
  43. package/dist/tools/workspace-line.d.ts.map +1 -0
  44. package/dist/tools/workspace-line.js +22 -0
  45. package/dist/tools/workspace-line.js.map +1 -0
  46. package/dist/workspace.d.ts +5 -1
  47. package/dist/workspace.d.ts.map +1 -1
  48. package/dist/workspace.js +42 -5
  49. package/dist/workspace.js.map +1 -1
  50. package/docs/agents/issue-tracker.md +14 -2
  51. package/package.json +1 -1
  52. package/dist/workspace-index.d.ts +0 -39
  53. package/dist/workspace-index.d.ts.map +0 -1
  54. package/dist/workspace-index.js +0 -83
  55. package/dist/workspace-index.js.map +0 -1
  56. package/dist/workspace-watcher.d.ts +0 -24
  57. package/dist/workspace-watcher.d.ts.map +0 -1
  58. package/dist/workspace-watcher.js +0 -87
  59. package/dist/workspace-watcher.js.map +0 -1
package/README.md CHANGED
@@ -36,8 +36,9 @@ Restart your editor after saving.
36
36
  ## First use in a repository
37
37
 
38
38
  1. Open the repository in your editor. FrontierMCP resolves the workspace from the session working
39
- directory — walking upward to the nearest `.scratch/` or `.git/` — so opening the project is the
40
- only setup step.
39
+ directory — walking upward to the nearest `.scratch/`, or `.git` in either form — so opening the
40
+ project is the only setup step. A git worktree is its own workspace: it carries `.git` as a file,
41
+ and it is served instead of the repository it was made from.
41
42
  2. Read the tracker configuration document once: fetch MCP resource `frontier://tracker-doc`, or read
42
43
  [`docs/agents/issue-tracker.md`](docs/agents/issue-tracker.md) in a repo that vendors it.
43
44
  3. Call `list_efforts` to see whether `.scratch/` exists yet.
@@ -53,6 +54,10 @@ Optional, per call or per session:
53
54
  - Pass `root` on any tool call to read another directory.
54
55
  - Set `FRONTIER_ROOT` in the server environment for a non-standard layout.
55
56
 
57
+ The working directory is the one your client launched the server in, and it is fixed for the session.
58
+ Moving to another worktree mid-session does not retarget it — use `root`, `FRONTIER_ROOT`, or restart
59
+ the server.
60
+
56
61
  ## Tools
57
62
 
58
63
  Eight tools: `list_efforts`, `get_board`, `get_tickets`, `create_tickets`, `update_ticket`,
@@ -82,7 +87,7 @@ to avoid.
82
87
  new build — pins stay manual on purpose.
83
88
 
84
89
  The workflow is dispatchable from any branch but refuses to run off `master`: release-it commits,
85
- tags and pushes before it publishes, so a release from a feature branch would rewrite that branch.
90
+ tags and pushes as part of the run, so a release from a feature branch would rewrite that branch.
86
91
 
87
92
  Local dry-run (no tag, no publish). It needs a clean working tree and an upstream branch, so commit
88
93
  first:
@@ -96,8 +101,8 @@ npmjs.com, so there is no `NPM_TOKEN` to rotate.
96
101
 
97
102
  Before changing `.release-it.json` or the workflow, read the release-it bullet in
98
103
  [AGENTS.md](./AGENTS.md) Work Guidance. Several settings there look removable and are not — the
99
- absent `registry-url`, `npm.skipChecks`, and the pnpm 10 pin each exist for a reason recorded in one
100
- place so it cannot drift.
104
+ absent `registry-url`, `npm.skipChecks`, `npm.publishArgs`, and the pnpm 10 pin each exist for a
105
+ reason recorded in one place so it cannot drift.
101
106
 
102
107
  ## License
103
108
 
@@ -0,0 +1,15 @@
1
+ import type { StorageDriver } from './storage/driver.ts';
2
+ /**
3
+ * One driver per resolved workspace. A call carrying an explicit `root` reads a
4
+ * different workspace from the session's own, and each keeps its own driver —
5
+ * and so its own cache, its own watcher, and its own write queue.
6
+ *
7
+ * This is a lookup, not a layer: it hands back the driver itself, and no read
8
+ * or write passes through it.
9
+ */
10
+ export interface DriverRegistry {
11
+ forWorkspace(root: string): StorageDriver;
12
+ closeAll(): void;
13
+ }
14
+ export declare function createDriverRegistry(createDriver: (root: string) => StorageDriver): DriverRegistry;
15
+ //# sourceMappingURL=driver-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-registry.d.ts","sourceRoot":"","sources":["../src/driver-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IAC1C,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,GAC5C,cAAc,CAiBhB"}
@@ -0,0 +1,19 @@
1
+ export function createDriverRegistry(createDriver) {
2
+ const drivers = new Map();
3
+ return {
4
+ forWorkspace(root) {
5
+ let driver = drivers.get(root);
6
+ if (driver === undefined) {
7
+ driver = createDriver(root);
8
+ drivers.set(root, driver);
9
+ }
10
+ return driver;
11
+ },
12
+ closeAll() {
13
+ for (const driver of drivers.values())
14
+ driver.close();
15
+ drivers.clear();
16
+ },
17
+ };
18
+ }
19
+ //# sourceMappingURL=driver-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver-registry.js","sourceRoot":"","sources":["../src/driver-registry.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,oBAAoB,CAClC,YAA6C;IAE7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD,OAAO;QACL,YAAY,CAAC,IAAI;YACf,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,QAAQ;YACN,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,7 +1,22 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { StorageDriver } from './storage/driver.ts';
3
3
  export declare const SERVER_NAME = "frontier";
4
- export declare const SERVER_VERSION = "0.1.0";
4
+ /**
5
+ * The version the handshake reports, read from `package.json` rather than
6
+ * written out here.
7
+ *
8
+ * A release bumps `package.json` and touches nothing in `src`, so a literal is
9
+ * correct only until the next release and then misreports every published
10
+ * build — silently, because nothing compares the two. The handshake is the one
11
+ * place a client learns which build it is talking to, so it has to come from
12
+ * the file that actually gets bumped.
13
+ *
14
+ * Resolved from this module rather than the working directory, for the same
15
+ * reason {@link readTrackerDoc} is: the server runs from the user's repo, not
16
+ * from its own install. `package.json` ships in every npm tarball regardless of
17
+ * the `files` field, and sits one level above both `src/` and `dist/`.
18
+ */
19
+ export declare const SERVER_VERSION: string;
5
20
  export interface CreateServerOptions {
6
21
  /** The server process's working directory. */
7
22
  readonly cwd?: string;
@@ -11,18 +26,22 @@ export interface CreateServerOptions {
11
26
  * so a SQLite driver can be swapped in without touching the tool layer.
12
27
  */
13
28
  readonly createDriver?: (root: string) => StorageDriver;
14
- /** Debounce filesystem watcher events. Tests may shorten this. */
29
+ /**
30
+ * Debounce filesystem watcher events in the default markdown driver. Tests
31
+ * may shorten it, or push it past the test to pin what a read actually read.
32
+ * Ignored when `createDriver` is supplied — a driver constructs its own.
33
+ */
15
34
  readonly watcherDebounceMs?: number;
16
35
  }
17
36
  export interface FrontierMCP {
18
37
  readonly server: McpServer;
19
38
  /**
20
- * Build the index for the session's own workspace. Calls resolve their own
39
+ * Warm the driver for the session's own workspace. Calls resolve their own
21
40
  * workspace anyway, so a failure here is not fatal — it only forfeits the
22
41
  * warm start.
23
42
  */
24
43
  warmUp(): Promise<void>;
25
- /** Stop watchers and close the transport. */
44
+ /** Close every open driver and the transport. */
26
45
  close(): Promise<void>;
27
46
  }
28
47
  export declare function createFrontierMCP(options?: CreateServerOptions): FrontierMCP;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAwC5E,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,CAAC;IACxD,kEAAkE;IAClE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAOD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,mBAAwB,GAAG,WAAW,CAmRhF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAyC5E,eAAO,MAAM,WAAW,aAAa,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,cAAc,EAAE,MAA6B,CAAC;AAU3D,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,aAAa,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,iDAAiD;IACjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAOD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,mBAAwB,GAAG,WAAW,CAoShF"}
package/dist/server.js CHANGED
@@ -1,6 +1,9 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
1
4
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
5
  import { frontierOf } from './frontier.js';
3
- import { createIndexRegistry } from './workspace-index.js';
6
+ import { createDriverRegistry } from './driver-registry.js';
4
7
  import { createMarkdownDriver } from './storage/markdown/driver.js';
5
8
  import { NoSuchMap, RevisionMismatch } from './storage/driver.js';
6
9
  import { createTicketsDescription, createTicketsInputSchema, planBatch, renderCreated, } from './tools/create-tickets.js';
@@ -10,11 +13,32 @@ import { getTicketsDescription, getTicketsInputSchema, renderTickets, } from './
10
13
  import { listEffortsDescription, listEffortsInputSchema, renderEfforts, } from './tools/list-efforts.js';
11
14
  import { migrateEffortDescription, migrateEffortInputSchema, renderMigration, } from './tools/migrate-effort.js';
12
15
  import { renderSpec, specDescription, specInputSchema } from './tools/spec.js';
16
+ import { withWorkspace } from './tools/workspace-line.js';
13
17
  import { editFor, renderUpdate, updateTicketDescription, updateTicketInputSchema, } from './tools/update-ticket.js';
14
18
  import { readTrackerDoc, TRACKER_DOC_URI } from './tracker-doc.js';
15
19
  import { resolveWorkspace } from './workspace.js';
16
20
  export const SERVER_NAME = 'frontier';
17
- export const SERVER_VERSION = '0.1.0';
21
+ /**
22
+ * The version the handshake reports, read from `package.json` rather than
23
+ * written out here.
24
+ *
25
+ * A release bumps `package.json` and touches nothing in `src`, so a literal is
26
+ * correct only until the next release and then misreports every published
27
+ * build — silently, because nothing compares the two. The handshake is the one
28
+ * place a client learns which build it is talking to, so it has to come from
29
+ * the file that actually gets bumped.
30
+ *
31
+ * Resolved from this module rather than the working directory, for the same
32
+ * reason {@link readTrackerDoc} is: the server runs from the user's repo, not
33
+ * from its own install. `package.json` ships in every npm tarball regardless of
34
+ * the `files` field, and sits one level above both `src/` and `dist/`.
35
+ */
36
+ export const SERVER_VERSION = readPackageVersion();
37
+ function readPackageVersion() {
38
+ const here = dirname(fileURLToPath(import.meta.url));
39
+ const { version } = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8'));
40
+ return version;
41
+ }
18
42
  /** Injectable so a test can pin the moment a claim was taken. */
19
43
  function now() {
20
44
  return new Date().toISOString();
@@ -24,7 +48,10 @@ export function createFrontierMCP(options = {}) {
24
48
  cwd: options.cwd ?? process.cwd(),
25
49
  env: options.env ?? process.env,
26
50
  };
27
- const registry = createIndexRegistry(options.createDriver ?? createMarkdownDriver, options.watcherDebounceMs === undefined ? {} : { watcherDebounceMs: options.watcherDebounceMs });
51
+ const registry = createDriverRegistry(options.createDriver ??
52
+ (root => createMarkdownDriver(root, options.watcherDebounceMs === undefined
53
+ ? {}
54
+ : { watcherDebounceMs: options.watcherDebounceMs })));
28
55
  const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {}, resources: {} } });
29
56
  server.registerResource('tracker-doc', TRACKER_DOC_URI, {
30
57
  title: 'Issue tracker configuration',
@@ -40,8 +67,8 @@ export function createFrontierMCP(options = {}) {
40
67
  annotations: { readOnlyHint: true },
41
68
  }, async ({ root }) => {
42
69
  const workspace = resolveWorkspace(root, context);
43
- const index = registry.forWorkspace(workspace);
44
- const [efforts, tickets] = await Promise.all([index.efforts(), index.tickets()]);
70
+ const driver = registry.forWorkspace(workspace);
71
+ const [efforts, tickets] = await Promise.all([driver.listEfforts(), driver.listTickets()]);
45
72
  return {
46
73
  content: [{ type: 'text', text: renderEfforts(workspace, efforts, frontierOf(tickets)) }],
47
74
  };
@@ -53,8 +80,8 @@ export function createFrontierMCP(options = {}) {
53
80
  annotations: { readOnlyHint: true },
54
81
  }, async ({ effort: slug, root }) => {
55
82
  const workspace = resolveWorkspace(root, context);
56
- const index = registry.forWorkspace(workspace);
57
- const [efforts, tickets] = await Promise.all([index.efforts(), index.tickets()]);
83
+ const driver = registry.forWorkspace(workspace);
84
+ const [efforts, tickets] = await Promise.all([driver.listEfforts(), driver.listTickets()]);
58
85
  const effort = efforts.find(candidate => candidate.slug === slug);
59
86
  if (effort === undefined) {
60
87
  throw new Error(`No Effort '${slug}' in ${workspace}. Known: ${efforts.map(e => e.slug).join(', ') || '(none)'}`);
@@ -68,16 +95,8 @@ export function createFrontierMCP(options = {}) {
68
95
  annotations: { readOnlyHint: true },
69
96
  }, async ({ ids, root }) => {
70
97
  const workspace = resolveWorkspace(root, context);
71
- const tickets = await registry.forWorkspace(workspace).tickets();
72
- const wanted = new Set(ids);
73
- return {
74
- content: [
75
- {
76
- type: 'text',
77
- text: renderTickets(ids, tickets.filter(ticket => wanted.has(ticket.handle) || (ticket.id !== undefined && wanted.has(ticket.id)))),
78
- },
79
- ],
80
- };
98
+ const found = await registry.forWorkspace(workspace).readTickets(ids);
99
+ return { content: [{ type: 'text', text: renderTickets(ids, found) }] };
81
100
  });
82
101
  server.registerTool('create_tickets', {
83
102
  title: 'Create Tickets',
@@ -86,17 +105,19 @@ export function createFrontierMCP(options = {}) {
86
105
  annotations: { readOnlyHint: false, idempotentHint: false },
87
106
  }, async ({ effort, create, tickets, root }) => {
88
107
  const workspace = resolveWorkspace(root, context);
89
- const index = registry.forWorkspace(workspace);
108
+ const driver = registry.forWorkspace(workspace);
90
109
  // Every reference resolves before anything is written, so a refusal —
91
110
  // an unknown key, a cycle — leaves the workspace exactly as it was. The
92
111
  // one rule that needs real ids runs under the driver's reservations,
93
112
  // still before any file lands.
94
- const { drafts, validate } = planBatch(tickets, await index.tickets());
95
- const created = await index.create(effort, drafts, {
113
+ const { drafts, validate } = planBatch(tickets, await driver.listTickets());
114
+ const created = await driver.createTickets(effort, drafts, {
96
115
  createEffort: create === true,
97
116
  validate,
98
117
  });
99
- return { content: [{ type: 'text', text: renderCreated(effort, created) }] };
118
+ return {
119
+ content: [{ type: 'text', text: withWorkspace(workspace, renderCreated(effort, created)) }],
120
+ };
100
121
  });
101
122
  server.registerTool('update_ticket', {
102
123
  title: 'Update Ticket',
@@ -105,8 +126,8 @@ export function createFrontierMCP(options = {}) {
105
126
  annotations: { readOnlyHint: false, idempotentHint: false },
106
127
  }, async ({ id, claim, resolve, drop, status, triage, blocked_by, comment, tick, root }) => {
107
128
  const workspace = resolveWorkspace(root, context);
108
- const index = registry.forWorkspace(workspace);
109
- const tickets = await index.tickets();
129
+ const driver = registry.forWorkspace(workspace);
130
+ const tickets = await driver.listTickets();
110
131
  const request = { claim, resolve, drop, status, triage, blocked_by, comment, tick };
111
132
  const find = (from) => {
112
133
  const ticket = from.find(entry => entry.id === id || entry.handle === id);
@@ -117,7 +138,7 @@ export function createFrontierMCP(options = {}) {
117
138
  const ticket = find(tickets);
118
139
  let written;
119
140
  try {
120
- written = await index.update(ticket.handle, editFor(ticket, tickets, request, now()), ticket.revision);
141
+ written = await driver.updateTicket(ticket.handle, editFor(ticket, tickets, request, now()), ticket.revision);
121
142
  }
122
143
  catch (error) {
123
144
  if (!(error instanceof RevisionMismatch))
@@ -127,12 +148,17 @@ export function createFrontierMCP(options = {}) {
127
148
  // claimed by agent-3" is the useful message. The write is never
128
149
  // retried — a mismatch may equally be somebody's hand edit, and
129
150
  // overwriting that is exactly what the check exists to prevent.
130
- const fresh = await index.tickets();
151
+ const fresh = await driver.listTickets();
131
152
  editFor(find(fresh), fresh, request, now());
132
153
  throw error;
133
154
  }
134
155
  return {
135
- content: [{ type: 'text', text: renderUpdate(written.ticket, written.warnings) }],
156
+ content: [
157
+ {
158
+ type: 'text',
159
+ text: withWorkspace(workspace, renderUpdate(written.ticket, written.warnings)),
160
+ },
161
+ ],
136
162
  };
137
163
  });
138
164
  server.registerTool('edit_map', {
@@ -142,29 +168,34 @@ export function createFrontierMCP(options = {}) {
142
168
  annotations: { readOnlyHint: false, idempotentHint: false },
143
169
  }, async ({ effort, create, destination, notes, add_fog, graduate_fog, rule_out, expected_revision, root, }) => {
144
170
  const workspace = resolveWorkspace(root, context);
145
- const index = registry.forWorkspace(workspace);
171
+ const driver = registry.forWorkspace(workspace);
146
172
  const edit = mapEditFor({ destination, notes, add_fog, graduate_fog, rule_out });
147
173
  const mutating = Object.keys(edit).length > 0;
148
174
  // create alone is for starting a missing Effort/Map — not a flag to send
149
175
  // on every call. With no section fields, an existing Map is a plain read
150
176
  // (no expected_revision); only a missing Map takes the write path.
151
177
  let document;
178
+ let wrote = mutating;
152
179
  if (!mutating) {
153
180
  try {
154
- document = await index.readMap(effort);
181
+ document = await driver.readMap(effort);
155
182
  }
156
183
  catch (error) {
157
184
  if (!(create === true && error instanceof NoSuchMap))
158
185
  throw error;
159
- document = await index.editMap(effort, edit, undefined, { createEffort: true });
186
+ document = await driver.editMap(effort, edit, undefined, { createEffort: true });
187
+ wrote = true;
160
188
  }
161
189
  }
162
190
  else {
163
- document = await index.editMap(effort, edit, expected_revision, {
191
+ document = await driver.editMap(effort, edit, expected_revision, {
164
192
  createEffort: create === true,
165
193
  });
166
194
  }
167
- return { content: [{ type: 'text', text: renderMap(effort, document) }] };
195
+ const rendered = renderMap(effort, document);
196
+ return {
197
+ content: [{ type: 'text', text: wrote ? withWorkspace(workspace, rendered) : rendered }],
198
+ };
168
199
  });
169
200
  server.registerTool('spec', {
170
201
  title: 'Spec',
@@ -173,13 +204,17 @@ export function createFrontierMCP(options = {}) {
173
204
  annotations: { readOnlyHint: false, idempotentHint: false },
174
205
  }, async ({ effort, create, content, expected_revision, root }) => {
175
206
  const workspace = resolveWorkspace(root, context);
176
- const index = registry.forWorkspace(workspace);
207
+ const driver = registry.forWorkspace(workspace);
177
208
  const document = content === undefined
178
- ? await index.readSpec(effort)
179
- : await index.putSpec(effort, content, expected_revision, {
209
+ ? await driver.readSpec(effort)
210
+ : await driver.putSpec(effort, content, expected_revision, {
180
211
  createEffort: create === true,
181
212
  });
182
- return { content: [{ type: 'text', text: renderSpec(effort, document) }] };
213
+ const wrote = content !== undefined;
214
+ const rendered = renderSpec(effort, document);
215
+ return {
216
+ content: [{ type: 'text', text: wrote ? withWorkspace(workspace, rendered) : rendered }],
217
+ };
183
218
  });
184
219
  server.registerTool('migrate_effort', {
185
220
  title: 'Migrate Effort',
@@ -188,18 +223,25 @@ export function createFrontierMCP(options = {}) {
188
223
  annotations: { readOnlyHint: false, idempotentHint: false },
189
224
  }, async ({ effort, preview, rename, root }) => {
190
225
  const workspace = resolveWorkspace(root, context);
191
- const index = registry.forWorkspace(workspace);
192
- const report = await index.migrate(effort, {
226
+ const driver = registry.forWorkspace(workspace);
227
+ const report = await driver.migrateEffort(effort, {
193
228
  preview: preview === true,
194
229
  rename: rename === true,
195
230
  });
196
- return { content: [{ type: 'text', text: renderMigration(report) }] };
231
+ // A preview writes nothing, and neither does a run that finds nothing to
232
+ // normalize — an Effort already in schema reports no changes and leaves
233
+ // every file alone. Both are reads, whatever the flag said.
234
+ const wrote = preview !== true && report.changes.length > 0;
235
+ const rendered = renderMigration(report);
236
+ return {
237
+ content: [{ type: 'text', text: wrote ? withWorkspace(workspace, rendered) : rendered }],
238
+ };
197
239
  });
198
240
  return {
199
241
  server,
200
242
  async warmUp() {
201
243
  const workspace = resolveWorkspace(undefined, context);
202
- await registry.forWorkspace(workspace).efforts();
244
+ await registry.forWorkspace(workspace).listEfforts();
203
245
  },
204
246
  async close() {
205
247
  registry.closeAll();
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Effort, MapDocument, MapEdit, MigrateOptions, MigrationReport, SpecDocument, Ticket, TicketDraft, TicketEdit } from '../domain.ts';
1
+ import type { Effort, MapDocument, MapEdit, MigrateOptions, MigrationReport, SpecDocument, Ticket, TicketDraft, TicketEdit, TicketSummary } from '../domain.ts';
2
2
  export type { MapDocument, MapEdit, MigrateOptions, MigrationReport, SpecDocument, TicketDraft, TicketEdit, };
3
3
  export interface CreateOptions {
4
4
  /**
@@ -20,7 +20,7 @@ export interface CreateOptions {
20
20
  * seam can see that coming, because nothing above the seam knows what the
21
21
  * next id will be.
22
22
  */
23
- readonly validate?: (ids: readonly string[], tickets: readonly Ticket[]) => void;
23
+ readonly validate?: (ids: readonly string[], tickets: readonly TicketSummary[]) => void;
24
24
  }
25
25
  /**
26
26
  * Whether a Header-doc write may start an Effort that does not yet exist.
@@ -38,6 +38,15 @@ export interface HeaderDocOptions {
38
38
  * markdown driver takes a directory, a SQLite driver would take a connection),
39
39
  * so no method ever takes or returns a location. The planned SQLite driver, and
40
40
  * the `md <-> db` conversion either side of it, are only writable if this holds.
41
+ *
42
+ * A driver is the workspace *cached and live*, not a bare set of queries.
43
+ * Whether to hold a scan, when it goes stale, and how it hears that another
44
+ * process wrote are all answers about one physical model — the markdown driver
45
+ * caches a full walk and watches a directory; a SQLite driver would query and
46
+ * let its own page cache do the work. A layer above the seam deciding any of
47
+ * this for both of them is one model's policy wearing a generic interface, so
48
+ * there is no such layer. Callers see none of it: every method answers as
49
+ * though it had just read.
41
50
  */
42
51
  export interface StorageDriver {
43
52
  /**
@@ -46,11 +55,24 @@ export interface StorageDriver {
46
55
  */
47
56
  listEfforts(): Promise<readonly Effort[]>;
48
57
  /**
49
- * Every Ticket in the workspace, ordered by Effort then by sort order. Ids
50
- * resolve repo-wide, so callers that need one Effort filter this rather than
51
- * asking for a subset — at these volumes the whole set is the cheap answer.
58
+ * Every Ticket in the workspace without its body, ordered by Effort then by
59
+ * sort order. Ids resolve repo-wide, so callers that need one Effort filter
60
+ * this rather than asking for a subset — at these volumes the whole set is the
61
+ * cheap answer, and it stays cheap only because no body rides along.
62
+ */
63
+ listTickets(): Promise<readonly TicketSummary[]>;
64
+ /**
65
+ * The named Tickets with their bodies, addressed by id or by the
66
+ * `<effort>#<order>` handle an id-less Legacy Ticket answers to. A name the
67
+ * workspace does not hold is simply absent: which names were asked for is the
68
+ * caller's knowledge, not the driver's.
69
+ *
70
+ * Separate from {@link listTickets} because a body is the one field almost
71
+ * nothing reads — Boards, the Frontier and Edge resolution all work from
72
+ * summary fields — so bodies are fetched for the few Tickets being worked
73
+ * rather than carried by every read of the workspace.
52
74
  */
53
- listTickets(): Promise<readonly Ticket[]>;
75
+ readTickets(handles: readonly string[]): Promise<readonly Ticket[]>;
54
76
  /**
55
77
  * Apply an edit to one Ticket and return it as written.
56
78
  *
@@ -76,7 +98,7 @@ export interface StorageDriver {
76
98
  * Ids are unique across the whole workspace, and stay unique when two sessions
77
99
  * in separate processes create at the same instant.
78
100
  */
79
- createTickets(effort: string, drafts: readonly TicketDraft[], options: CreateOptions): Promise<readonly Ticket[]>;
101
+ createTickets(effort: string, drafts: readonly TicketDraft[], options: CreateOptions): Promise<readonly TicketSummary[]>;
80
102
  /**
81
103
  * The Map's typed sections for one Effort. Decisions-so-far is not here — it
82
104
  * is derived from Tickets and never read from the file.
@@ -98,10 +120,21 @@ export interface StorageDriver {
98
120
  * nothing. Unrecognized files in the Effort directory are ignored.
99
121
  */
100
122
  migrateEffort(effort: string, options: MigrateOptions): Promise<MigrationReport>;
123
+ /**
124
+ * Release whatever this driver holds open to stay live — the markdown
125
+ * driver's filesystem watcher, a connection for a driver that has one. Reads
126
+ * and writes are not expected after it, and a driver that holds nothing may
127
+ * do nothing.
128
+ *
129
+ * Synchronous, because closing is: an `FSWatcher` closes synchronously and so
130
+ * does `node:sqlite`. Widening it to a promise the day a driver needs one is
131
+ * a change to this line and to the one caller that closes them all.
132
+ */
133
+ close(): void;
101
134
  }
102
135
  /** A Ticket write, plus any non-fatal warnings that rode along. */
103
136
  export interface TicketWriteResult {
104
- readonly ticket: Ticket;
137
+ readonly ticket: TicketSummary;
105
138
  readonly warnings: readonly string[];
106
139
  }
107
140
  /** Thrown when the stored Ticket moved on since the caller read it. */
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"AA4JA,uEAAuE;AACvE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,MAAc;QACxB,KAAK,CACH,GAAG,MAAM,iFAAiF,CAC3F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,MAAc;QACxB,KAAK,CAAC,cAAc,MAAM,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,IAAY;QACtB,KAAK,CAAC,cAAc,IAAI,+CAA+C,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,IAAY;QACtB,KAAK,CAAC,sBAAsB,IAAI,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,IAAY;QACtB,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,KAAa;QACvB,KAAK,CAAC,0BAA0B,KAAK,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/storage/driver.ts"],"names":[],"mappings":"AAgMA,uEAAuE;AACvE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,MAAc;QACxB,KAAK,CACH,GAAG,MAAM,iFAAiF,CAC3F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,MAAc;QACxB,KAAK,CAAC,cAAc,MAAM,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,IAAY;QACtB,KAAK,CAAC,cAAc,IAAI,+CAA+C,CAAC,CAAC;QACzE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,IAAY;QACtB,KAAK,CAAC,sBAAsB,IAAI,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,YAAY,IAAY;QACtB,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,KAAa;QACvB,KAAK,CAAC,0BAA0B,KAAK,4BAA4B,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -1,9 +1,9 @@
1
- import type { Ticket, TicketDraft } from '../../domain.ts';
1
+ import type { TicketDraft, TicketSummary } from '../../domain.ts';
2
2
  /** Every Ticket in the workspace, re-read rather than served from any cache. */
3
- export type Rescan = () => Promise<readonly Ticket[]>;
3
+ export type Rescan = () => Promise<readonly TicketSummary[]>;
4
4
  export interface CreateRequest {
5
5
  /** Where the id guards live: one namespace for the whole workspace. */
6
- readonly scratch: string;
6
+ readonly storage: string;
7
7
  readonly effort: string;
8
8
  /** The Effort's directory, and the directory its Tickets go in. Both owned by the driver. */
9
9
  readonly dir: string;
@@ -15,7 +15,7 @@ export interface CreateRequest {
15
15
  * The last check, run with the reserved ids and the workspace as it looks
16
16
  * under the guards. Throwing abandons the batch before anything is written.
17
17
  */
18
- readonly validate: (ids: readonly string[], tickets: readonly Ticket[]) => void;
18
+ readonly validate: (ids: readonly string[], tickets: readonly TicketSummary[]) => void;
19
19
  /** Whether the Effort's directory has to be made, and unmade if nothing lands. */
20
20
  readonly createEffort: boolean;
21
21
  }
@@ -41,7 +41,7 @@ export declare function createTicketFiles(request: CreateRequest): Promise<reado
41
41
  * Hold exclusive id guards for `count` fresh ids, run `use`, then release.
42
42
  * Migration mints through this so a parallel create_tickets cannot collide.
43
43
  */
44
- export declare function withIdReservations<T>(scratch: string, count: number, rescan: Rescan, use: (ids: readonly string[]) => Promise<T>): Promise<T>;
44
+ export declare function withIdReservations<T>(storage: string, count: number, rescan: Rescan, use: (ids: readonly string[]) => Promise<T>): Promise<T>;
45
45
  /**
46
46
  * The next `count` minted ids from a scan, without taking guards. Preview uses
47
47
  * this so a dry run never leaves `.frontier-id-*.guard` files behind.
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/create.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAyB3D,gFAAgF;AAChF,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;IAChF,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CA4B1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAWzF;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/storage/markdown/create.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAyBlE,gFAAgF;AAChF,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6FAA6F;IAC7F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,CAAC;IACvF,kFAAkF;IAClF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CA4B1F;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1C,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAWzF;AAED,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/E"}