grounder 0.5.0 → 0.6.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 +21 -20
- package/dist/agents/claude.d.ts +4 -4
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +158 -179
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/cursor.d.ts +3 -3
- package/dist/agents/cursor.d.ts.map +1 -1
- package/dist/agents/cursor.js +97 -144
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/home-skills.d.ts +46 -0
- package/dist/agents/home-skills.d.ts.map +1 -0
- package/dist/agents/home-skills.js +83 -0
- package/dist/agents/home-skills.js.map +1 -0
- package/dist/agents/hook-fragment.d.ts +52 -0
- package/dist/agents/hook-fragment.d.ts.map +1 -0
- package/dist/agents/hook-fragment.js +76 -0
- package/dist/agents/hook-fragment.js.map +1 -0
- package/dist/agents/hook-install.d.ts +62 -0
- package/dist/agents/hook-install.d.ts.map +1 -0
- package/dist/agents/hook-install.js +74 -0
- package/dist/agents/hook-install.js.map +1 -0
- package/dist/agents/hook-runtime.d.ts +77 -10
- package/dist/agents/hook-runtime.d.ts.map +1 -1
- package/dist/agents/hook-runtime.js +274 -70
- package/dist/agents/hook-runtime.js.map +1 -1
- package/dist/agents/index.d.ts +8 -14
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +13 -19
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/types.d.ts +56 -16
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +69 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +238 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +190 -97
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/handoff/peek.d.ts +1 -1
- package/dist/commands/handoff/peek.d.ts.map +1 -1
- package/dist/commands/handoff/peek.js +28 -12
- package/dist/commands/handoff/peek.js.map +1 -1
- package/dist/commands/install-drift.d.ts +34 -0
- package/dist/commands/install-drift.d.ts.map +1 -0
- package/dist/commands/install-drift.js +72 -0
- package/dist/commands/install-drift.js.map +1 -0
- package/dist/commands/migrate.d.ts +11 -3
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +67 -33
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/overview.d.ts +33 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +150 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/render-artifact-table.d.ts +85 -0
- package/dist/commands/render-artifact-table.d.ts.map +1 -0
- package/dist/commands/render-artifact-table.js +232 -0
- package/dist/commands/render-artifact-table.js.map +1 -0
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +15 -4
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +86 -13
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +269 -88
- package/dist/commands/status.js.map +1 -1
- package/dist/connector/ledger-migrations.d.ts +55 -0
- package/dist/connector/ledger-migrations.d.ts.map +1 -0
- package/dist/connector/ledger-migrations.js +94 -0
- package/dist/connector/ledger-migrations.js.map +1 -0
- package/dist/connector/state.d.ts +96 -59
- package/dist/connector/state.d.ts.map +1 -1
- package/dist/connector/state.js +165 -107
- package/dist/connector/state.js.map +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +27 -5
- package/dist/help.js.map +1 -1
- package/dist/reconcile/apply.d.ts +31 -0
- package/dist/reconcile/apply.d.ts.map +1 -0
- package/dist/reconcile/apply.js +97 -0
- package/dist/reconcile/apply.js.map +1 -0
- package/dist/reconcile/core.d.ts +82 -0
- package/dist/reconcile/core.d.ts.map +1 -0
- package/dist/reconcile/core.js +163 -0
- package/dist/reconcile/core.js.map +1 -0
- package/dist/reconcile/disk.d.ts +13 -0
- package/dist/reconcile/disk.d.ts.map +1 -0
- package/dist/reconcile/disk.js +28 -0
- package/dist/reconcile/disk.js.map +1 -0
- package/dist/util/fs.d.ts +14 -0
- package/dist/util/fs.d.ts.map +1 -1
- package/dist/util/fs.js +27 -1
- package/dist/util/fs.js.map +1 -1
- package/dist/util/merge-json.d.ts +13 -2
- package/dist/util/merge-json.d.ts.map +1 -1
- package/dist/util/merge-json.js +24 -10
- package/dist/util/merge-json.js.map +1 -1
- package/dist/vault/list-handoffs.d.ts +13 -3
- package/dist/vault/list-handoffs.d.ts.map +1 -1
- package/dist/vault/list-handoffs.js +28 -13
- package/dist/vault/list-handoffs.js.map +1 -1
- package/dist/vault/list-notes.d.ts +12 -3
- package/dist/vault/list-notes.d.ts.map +1 -1
- package/dist/vault/list-notes.js +13 -7
- package/dist/vault/list-notes.js.map +1 -1
- package/dist/vault/list-plans.d.ts +12 -3
- package/dist/vault/list-plans.d.ts.map +1 -1
- package/dist/vault/list-plans.js +13 -7
- package/dist/vault/list-plans.js.map +1 -1
- package/dist/vault/search.d.ts.map +1 -1
- package/dist/vault/search.js +128 -24
- package/dist/vault/search.js.map +1 -1
- package/package.json +2 -2
- package/templates/agents/claude/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/claude/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
- package/templates/agents/claude/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/claude/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
- package/templates/agents/claude/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/claude/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
- package/templates/agents/cursor/skills/grounder-handoff/SKILL.md +73 -0
- package/templates/agents/cursor/{commands/grounder-note.md → skills/grounder-note/SKILL.md} +6 -0
- package/templates/agents/cursor/skills/grounder-overview/SKILL.md +21 -0
- package/templates/agents/cursor/{commands/grounder-plan.md → skills/grounder-plan/SKILL.md} +6 -0
- package/templates/agents/cursor/skills/grounder-recall/SKILL.md +34 -0
- package/templates/agents/cursor/{commands/grounder-search.md → skills/grounder-search/SKILL.md} +16 -8
- package/templates/vault/plan.md +1 -1
- package/templates/vault/session-handoff.md +2 -1
- package/dist/agents/install-command.d.ts +0 -35
- package/dist/agents/install-command.d.ts.map +0 -1
- package/dist/agents/install-command.js +0 -65
- package/dist/agents/install-command.js.map +0 -1
- package/dist/commands/apply-agent-installs.d.ts +0 -34
- package/dist/commands/apply-agent-installs.d.ts.map +0 -1
- package/dist/commands/apply-agent-installs.js +0 -137
- package/dist/commands/apply-agent-installs.js.map +0 -1
- package/templates/agents/claude/commands/grounder-task-handoff.md +0 -58
- package/templates/agents/claude/commands/grounder-task.md +0 -22
- package/templates/agents/cursor/commands/grounder-task-handoff.md +0 -58
- package/templates/agents/cursor/commands/grounder-task.md +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/cursor.d.ts
CHANGED
|
@@ -5,13 +5,13 @@ import type { AgentAdapter } from "./types.js";
|
|
|
5
5
|
* @see {@link peekHookCommand}
|
|
6
6
|
*/
|
|
7
7
|
export declare function cursorPeekHookCommand(homeDir?: string, extraArgs?: readonly string[]): string;
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function cursorSkillsDir(homeDir?: string): string;
|
|
9
9
|
/** Absolute path to Cursor's shared hooks config (`~/.cursor/hooks.json`). */
|
|
10
10
|
export declare function cursorHooksJsonPath(homeDir?: string): string;
|
|
11
11
|
export declare function grounderNoteCommandPath(homeDir?: string): string;
|
|
12
12
|
export declare function grounderPlanCommandPath(homeDir?: string): string;
|
|
13
|
-
export declare function
|
|
14
|
-
export declare function
|
|
13
|
+
export declare function grounderHandoffCommandPath(homeDir?: string): string;
|
|
14
|
+
export declare function grounderRecallCommandPath(homeDir?: string): string;
|
|
15
15
|
export declare function expectedArtifacts(homeDir?: string): string[];
|
|
16
16
|
/** Paths of hook config this adapter touches — currently just `hooks.json`. */
|
|
17
17
|
export declare function expectedHookArtifacts(homeDir?: string): string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,YAAY,CAAC;AAQxF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,GAAE,SAAS,MAAM,EAAe,GACxC,MAAM,CAER;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAE5D;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhE;AAiKD,eAAO,MAAM,MAAM,EAAE,YAapB,CAAC"}
|
package/dist/agents/cursor.js
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
3
|
import { resolveHomeDir } from "../connector/home.js";
|
|
5
4
|
import { fileExists } from "../util/fs.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"grounder-plan.md",
|
|
15
|
-
"grounder-task-handoff.md",
|
|
16
|
-
"grounder-task.md",
|
|
17
|
-
];
|
|
5
|
+
import { homeSkillsLayout } from "./home-skills.js";
|
|
6
|
+
import { isAlreadyConverged, readEventEntries, readHooksObject, removeMatchingEntries, } from "./hook-fragment.js";
|
|
7
|
+
import { installHookFragment, removeHookFragment } from "./hook-install.js";
|
|
8
|
+
import { isGrounderPeekHookCommand, isHookRuntimeStale, peekHookCommand } from "./hook-runtime.js";
|
|
9
|
+
/** Whole-file artifacts: `~/.cursor/skills/` plus the retired `~/.cursor/commands/`. */
|
|
10
|
+
const layout = homeSkillsLayout({ id: "cursor", agentDir: ".cursor" });
|
|
11
|
+
/** Hook event Grounder owns in `hooks.json`. */
|
|
12
|
+
const SESSION_START_EVENT = "sessionStart";
|
|
18
13
|
/**
|
|
19
14
|
* Canonical sessionStart command for Cursor (home-local runtime, not `npx`).
|
|
20
15
|
* Always includes `--json` so stdout matches Cursor's `additional_context` contract.
|
|
@@ -23,27 +18,27 @@ const COMMANDS = [
|
|
|
23
18
|
export function cursorPeekHookCommand(homeDir, extraArgs = ["--json"]) {
|
|
24
19
|
return peekHookCommand(homeDir, extraArgs);
|
|
25
20
|
}
|
|
26
|
-
export function
|
|
27
|
-
return
|
|
21
|
+
export function cursorSkillsDir(homeDir) {
|
|
22
|
+
return layout.skillsDir(homeDir);
|
|
28
23
|
}
|
|
29
24
|
/** Absolute path to Cursor's shared hooks config (`~/.cursor/hooks.json`). */
|
|
30
25
|
export function cursorHooksJsonPath(homeDir) {
|
|
31
26
|
return path.join(resolveHomeDir(homeDir), ".cursor", "hooks.json");
|
|
32
27
|
}
|
|
33
28
|
export function grounderNoteCommandPath(homeDir) {
|
|
34
|
-
return
|
|
29
|
+
return layout.skillPath("grounder-note", homeDir);
|
|
35
30
|
}
|
|
36
31
|
export function grounderPlanCommandPath(homeDir) {
|
|
37
|
-
return
|
|
32
|
+
return layout.skillPath("grounder-plan", homeDir);
|
|
38
33
|
}
|
|
39
|
-
export function
|
|
40
|
-
return
|
|
34
|
+
export function grounderHandoffCommandPath(homeDir) {
|
|
35
|
+
return layout.skillPath("grounder-handoff", homeDir);
|
|
41
36
|
}
|
|
42
|
-
export function
|
|
43
|
-
return
|
|
37
|
+
export function grounderRecallCommandPath(homeDir) {
|
|
38
|
+
return layout.skillPath("grounder-recall", homeDir);
|
|
44
39
|
}
|
|
45
40
|
export function expectedArtifacts(homeDir) {
|
|
46
|
-
return
|
|
41
|
+
return layout.expectedArtifacts(homeDir);
|
|
47
42
|
}
|
|
48
43
|
/** Paths of hook config this adapter touches — currently just `hooks.json`. */
|
|
49
44
|
export function expectedHookArtifacts(homeDir) {
|
|
@@ -72,37 +67,35 @@ export function expectedHookArtifacts(homeDir) {
|
|
|
72
67
|
// - hook entry → { command: string }
|
|
73
68
|
//
|
|
74
69
|
// Unlike Claude Code, Cursor has no matcher groups — sessionStart is a flat
|
|
75
|
-
// array. Idempotency: {@link isGrounderPeekHookCommand} (runtime
|
|
70
|
+
// array. Idempotency / recognizer: {@link isGrounderPeekHookCommand} (runtime
|
|
71
|
+
// path or legacy npx). Always-converge (Ansible `blockinfile` / Kubernetes
|
|
72
|
+
// Server-Side Apply sole-owner model): every recognizer match is removed and
|
|
73
|
+
// replaced with exactly one canonical entry — no conflict / `--force` gate.
|
|
76
74
|
// ---------------------------------------------------------------------------
|
|
77
|
-
function
|
|
78
|
-
return
|
|
75
|
+
function isCursorPeekEntry(item) {
|
|
76
|
+
return (item !== null &&
|
|
79
77
|
typeof item === "object" &&
|
|
80
78
|
!Array.isArray(item) &&
|
|
81
79
|
isGrounderPeekHookCommand(item.command));
|
|
82
80
|
}
|
|
83
|
-
/**
|
|
84
|
-
async function
|
|
81
|
+
/** `hooks.sessionStart` from a hooks.json on disk; `null` if absent or unreadable. */
|
|
82
|
+
async function readSessionStart(filePath) {
|
|
85
83
|
try {
|
|
86
|
-
|
|
87
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
const hooks = parsed.hooks;
|
|
91
|
-
if (!hooks || typeof hooks !== "object" || Array.isArray(hooks)) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
const sessionStart = hooks.sessionStart;
|
|
95
|
-
return Array.isArray(sessionStart) && findPeekHookIndex(sessionStart) >= 0;
|
|
84
|
+
return readEventEntries(JSON.parse(await readFile(filePath, "utf8")), SESSION_START_EVENT);
|
|
96
85
|
}
|
|
97
86
|
catch {
|
|
98
|
-
return
|
|
87
|
+
return null;
|
|
99
88
|
}
|
|
100
89
|
}
|
|
90
|
+
/** Whether `hooks.json` already lists any Grounder peek command (for status labeling). */
|
|
91
|
+
async function peekHookHadGrounderEntry(filePath) {
|
|
92
|
+
return ((await readSessionStart(filePath)) ?? []).some(isCursorPeekEntry);
|
|
93
|
+
}
|
|
101
94
|
/**
|
|
102
|
-
* Skip only when
|
|
103
|
-
* current for the running grounder version/source.
|
|
104
|
-
*
|
|
105
|
-
*
|
|
95
|
+
* Skip only when exactly one canonical entry is already present *and* the
|
|
96
|
+
* runtime is current for the running grounder version/source. Anything else
|
|
97
|
+
* — no entry, a legacy `npx` form, a drifted command, more than one match —
|
|
98
|
+
* always converges. No `--force` required to migrate or pick up an upgrade.
|
|
106
99
|
*/
|
|
107
100
|
async function peekHookUpToDate(filePath, homeDir) {
|
|
108
101
|
if (!(await fileExists(filePath))) {
|
|
@@ -111,39 +104,22 @@ async function peekHookUpToDate(filePath, homeDir) {
|
|
|
111
104
|
if (await isHookRuntimeStale(homeDir)) {
|
|
112
105
|
return false;
|
|
113
106
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
const hooks = parsed.hooks;
|
|
120
|
-
if (!hooks || typeof hooks !== "object" || Array.isArray(hooks)) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
const sessionStart = hooks.sessionStart;
|
|
124
|
-
if (!Array.isArray(sessionStart)) {
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
const idx = findPeekHookIndex(sessionStart);
|
|
128
|
-
if (idx < 0) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
const command = sessionStart[idx].command;
|
|
132
|
-
return command === cursorPeekHookCommand(homeDir);
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
107
|
+
const sessionStart = await readSessionStart(filePath);
|
|
108
|
+
if (!sessionStart) {
|
|
135
109
|
return false;
|
|
136
110
|
}
|
|
111
|
+
return isAlreadyConverged(sessionStart, isCursorPeekEntry, {
|
|
112
|
+
command: cursorPeekHookCommand(homeDir),
|
|
113
|
+
});
|
|
137
114
|
}
|
|
138
115
|
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* 1. If a Grounder peek hook already exists (runtime or legacy npx) → replace in place.
|
|
143
|
-
* 2. Else → append Grounder's entry to `hooks.sessionStart`.
|
|
116
|
+
* Converge Grounder's sessionStart hook into an existing hooks.json object:
|
|
117
|
+
* remove every recognizer match (runtime-form or legacy npx, however many),
|
|
118
|
+
* append exactly one canonical entry.
|
|
144
119
|
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
120
|
+
* Preserves every key except the nested path it owns. On a brand-new file
|
|
121
|
+
* (`isFreshFile`), also sets `version: 1` when absent. Existing files keep
|
|
122
|
+
* whatever `version` (or lack of it) they already have.
|
|
147
123
|
*
|
|
148
124
|
* @param current - Parsed hooks.json root (object). Other top-level keys untouched.
|
|
149
125
|
* @param isFreshFile - True when the file did not exist before this write
|
|
@@ -155,91 +131,68 @@ function mergeCursorHooks(current, isFreshFile, homeDir) {
|
|
|
155
131
|
if (isFreshFile && next.version === undefined) {
|
|
156
132
|
next.version = 1;
|
|
157
133
|
}
|
|
158
|
-
const hooks = next
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (idx >= 0) {
|
|
165
|
-
// Path 1: refresh existing Grounder hook entry in place
|
|
166
|
-
existing[idx] = entry;
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
// Path 2: append — first install, or file had other sessionStart hooks only
|
|
170
|
-
existing.push(entry);
|
|
171
|
-
}
|
|
172
|
-
next.hooks = { ...hooks, sessionStart: existing };
|
|
134
|
+
const hooks = readHooksObject(next, cursorHooksJsonPath(homeDir));
|
|
135
|
+
const raw = hooks[SESSION_START_EVENT];
|
|
136
|
+
const existing = Array.isArray(raw) ? raw : [];
|
|
137
|
+
const cleaned = removeMatchingEntries(existing, isCursorPeekEntry);
|
|
138
|
+
cleaned.push({ command: cursorPeekHookCommand(homeDir) });
|
|
139
|
+
next.hooks = { ...hooks, [SESSION_START_EVENT]: cleaned };
|
|
173
140
|
return next;
|
|
174
141
|
}
|
|
175
142
|
/**
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
* Force semantics:
|
|
181
|
-
* - Up-to-date canonical entry + fresh runtime and `force` false → skip
|
|
182
|
-
* - Otherwise → refresh runtime + merge host config
|
|
183
|
-
*
|
|
184
|
-
* Unparseable hooks.json: {@link mergeJsonFile} backs off and this throws (never clobbers).
|
|
143
|
+
* Remove every Grounder peek entry from `hooks.sessionStart`, touching
|
|
144
|
+
* nothing else. Returns `current` verbatim (no restructuring at all) when
|
|
145
|
+
* there's no Grounder entry to remove, so `mergeJsonFile` sees no change and
|
|
146
|
+
* leaves an unrelated `hooks.json` untouched instead of reformatting it.
|
|
185
147
|
*/
|
|
186
|
-
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
148
|
+
function removeCursorHooks(current) {
|
|
149
|
+
const hooks = current.hooks && typeof current.hooks === "object" && !Array.isArray(current.hooks)
|
|
150
|
+
? current.hooks
|
|
151
|
+
: undefined;
|
|
152
|
+
const raw = hooks?.[SESSION_START_EVENT];
|
|
153
|
+
const existing = Array.isArray(raw) ? raw : [];
|
|
154
|
+
const cleaned = removeMatchingEntries(existing, isCursorPeekEntry);
|
|
155
|
+
if (cleaned.length === existing.length) {
|
|
156
|
+
return current;
|
|
191
157
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
158
|
+
return {
|
|
159
|
+
...current,
|
|
160
|
+
hooks: { ...hooks, [SESSION_START_EVENT]: cleaned },
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Install (or converge) Grounder's sessionStart teaser hook into `~/.cursor/hooks.json`.
|
|
165
|
+
* @see {@link installHookFragment} for the shared install/report scaffolding.
|
|
166
|
+
*/
|
|
167
|
+
async function installHooks(opts) {
|
|
168
|
+
return installHookFragment({
|
|
169
|
+
dest: cursorHooksJsonPath(opts.homeDir),
|
|
170
|
+
isUpToDate: (filePath) => peekHookUpToDate(filePath, opts.homeDir),
|
|
171
|
+
hasGrounderEntry: peekHookHadGrounderEntry,
|
|
172
|
+
merge: (current, fileExisted) => mergeCursorHooks(current, !fileExisted, opts.homeDir),
|
|
173
|
+
}, opts);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Remove Grounder's sessionStart hook entry entirely (`--no-hooks`) — the
|
|
177
|
+
* opt-out must also remove the fragment, not just flip `hooksEnabled` false,
|
|
178
|
+
* or the session hook keeps firing and the next plain `migrate` would find
|
|
179
|
+
* nothing to converge against (an absent entry looks like "never installed",
|
|
180
|
+
* which is exactly what makes the tri-state's `false` sticky in the first
|
|
181
|
+
* place).
|
|
182
|
+
*/
|
|
183
|
+
async function removeHooks(opts) {
|
|
184
|
+
return removeHookFragment(cursorHooksJsonPath(opts.homeDir), removeCursorHooks, opts);
|
|
207
185
|
}
|
|
208
186
|
export const cursor = {
|
|
209
187
|
id: "cursor",
|
|
210
188
|
name: "Cursor",
|
|
211
|
-
|
|
212
|
-
hooksSchema: 1,
|
|
213
|
-
async isInstalled() {
|
|
214
|
-
return fileExists(path.join(resolveHomeDir(), ".cursor"));
|
|
215
|
-
},
|
|
189
|
+
isInstalled: layout.isInstalled,
|
|
216
190
|
expectedArtifacts,
|
|
217
191
|
expectedHookArtifacts,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
for (const filename of COMMANDS) {
|
|
222
|
-
const { dest, status, hash } = await installCommandFile({
|
|
223
|
-
...opts,
|
|
224
|
-
agentId: cursor.id,
|
|
225
|
-
templateDir,
|
|
226
|
-
commandsDir: cursorCommandsDir(opts.homeDir),
|
|
227
|
-
filename,
|
|
228
|
-
});
|
|
229
|
-
artifacts[dest] = status;
|
|
230
|
-
if (hash) {
|
|
231
|
-
files[dest] = { hash };
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
await recordCommandFileHashes({
|
|
235
|
-
agentId: cursor.id,
|
|
236
|
-
commandsSchema: cursor.commandsSchema,
|
|
237
|
-
files,
|
|
238
|
-
homeDir: opts.homeDir,
|
|
239
|
-
dryRun: opts.dryRun,
|
|
240
|
-
});
|
|
241
|
-
return { artifacts };
|
|
242
|
-
},
|
|
192
|
+
desiredArtifacts: layout.desiredArtifacts,
|
|
193
|
+
tombstones: layout.tombstones,
|
|
194
|
+
ownedPrefixes: layout.ownedPrefixes,
|
|
243
195
|
installHooks,
|
|
196
|
+
removeHooks,
|
|
244
197
|
};
|
|
245
198
|
//# sourceMappingURL=cursor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The whole-file install layout Cursor and Claude Code share: Grounder's
|
|
3
|
+
* skills live at `~/<agentDir>/skills/<skill>/SKILL.md`, and the
|
|
4
|
+
* pre-Agent-Skills command files they replaced lived at
|
|
5
|
+
* `~/<agentDir>/commands/<skill>.md`. Give {@link homeSkillsLayout} the two
|
|
6
|
+
* names that differ between the two agents and it derives every path, template
|
|
7
|
+
* render, tombstone, and owned prefix an adapter needs for those artifacts.
|
|
8
|
+
*
|
|
9
|
+
* Hook config is deliberately not here. `~/.cursor/hooks.json` and
|
|
10
|
+
* `~/.claude/settings.json` differ in filename, in JSON shape (a flat array
|
|
11
|
+
* vs. matcher groups), and in what "already converged" even means, so each
|
|
12
|
+
* adapter keeps its own fragment reconciler; `hook-fragment.ts` and
|
|
13
|
+
* `hook-install.ts` hold the parts of *that* job which genuinely are shared.
|
|
14
|
+
*/
|
|
15
|
+
/** Skill directory names. Both adapters ship the same set. */
|
|
16
|
+
declare const SKILL_NAMES: readonly ["grounder-note", "grounder-search", "grounder-overview", "grounder-plan", "grounder-handoff", "grounder-recall"];
|
|
17
|
+
export type SkillName = (typeof SKILL_NAMES)[number];
|
|
18
|
+
export interface HomeSkillsLayout {
|
|
19
|
+
/** `~/<agentDir>/skills` — where today's `SKILL.md` files live. */
|
|
20
|
+
skillsDir(homeDir?: string): string;
|
|
21
|
+
/** `~/<agentDir>/commands` — where the retired pre-skill command files lived. */
|
|
22
|
+
legacyCommandsDir(homeDir?: string): string;
|
|
23
|
+
/** Absolute path to one skill's `SKILL.md`. */
|
|
24
|
+
skillPath(skill: SkillName, homeDir?: string): string;
|
|
25
|
+
/** @see AgentAdapter.expectedArtifacts */
|
|
26
|
+
expectedArtifacts(homeDir?: string): string[];
|
|
27
|
+
/** @see AgentAdapter.desiredArtifacts */
|
|
28
|
+
desiredArtifacts(homeDir?: string, options?: {
|
|
29
|
+
invocation?: string;
|
|
30
|
+
}): Promise<Record<string, string>>;
|
|
31
|
+
/** @see AgentAdapter.tombstones */
|
|
32
|
+
tombstones(homeDir?: string): string[];
|
|
33
|
+
/** @see AgentAdapter.ownedPrefixes */
|
|
34
|
+
ownedPrefixes(homeDir?: string): string[];
|
|
35
|
+
/** @see AgentAdapter.isInstalled */
|
|
36
|
+
isInstalled(): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
export interface HomeSkillsLayoutOptions {
|
|
39
|
+
/** Adapter id — names the template directory (`templates/agents/<id>/skills`). */
|
|
40
|
+
id: string;
|
|
41
|
+
/** This agent's config directory, relative to home (e.g. `.cursor`). */
|
|
42
|
+
agentDir: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function homeSkillsLayout(options: HomeSkillsLayoutOptions): HomeSkillsLayout;
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=home-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-skills.d.ts","sourceRoot":"","sources":["../../src/agents/home-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,8DAA8D;AAC9D,QAAA,MAAM,WAAW,4HAOP,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAsBrD,MAAM,WAAW,gBAAgB;IAC/B,mEAAmE;IACnE,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,iFAAiF;IACjF,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C,+CAA+C;IAC/C,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtD,0CAA0C;IAC1C,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9C,yCAAyC;IACzC,gBAAgB,CACd,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAChC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnC,mCAAmC;IACnC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,sCAAsC;IACtC,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1C,oCAAoC;IACpC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,uBAAuB;IACtC,kFAAkF;IAClF,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CA4CnF"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The whole-file install layout Cursor and Claude Code share: Grounder's
|
|
3
|
+
* skills live at `~/<agentDir>/skills/<skill>/SKILL.md`, and the
|
|
4
|
+
* pre-Agent-Skills command files they replaced lived at
|
|
5
|
+
* `~/<agentDir>/commands/<skill>.md`. Give {@link homeSkillsLayout} the two
|
|
6
|
+
* names that differ between the two agents and it derives every path, template
|
|
7
|
+
* render, tombstone, and owned prefix an adapter needs for those artifacts.
|
|
8
|
+
*
|
|
9
|
+
* Hook config is deliberately not here. `~/.cursor/hooks.json` and
|
|
10
|
+
* `~/.claude/settings.json` differ in filename, in JSON shape (a flat array
|
|
11
|
+
* vs. matcher groups), and in what "already converged" even means, so each
|
|
12
|
+
* adapter keeps its own fragment reconciler; `hook-fragment.ts` and
|
|
13
|
+
* `hook-install.ts` hold the parts of *that* job which genuinely are shared.
|
|
14
|
+
*/
|
|
15
|
+
import { readFile } from "node:fs/promises";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
import { resolveHomeDir } from "../connector/home.js";
|
|
19
|
+
import { fileExists } from "../util/fs.js";
|
|
20
|
+
import { runtimeInvocation } from "./hook-runtime.js";
|
|
21
|
+
/** Package root (`packages/grounder`) when running from `dist/agents/`. */
|
|
22
|
+
const pkgRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
|
23
|
+
/** Skill directory names. Both adapters ship the same set. */
|
|
24
|
+
const SKILL_NAMES = [
|
|
25
|
+
"grounder-note",
|
|
26
|
+
"grounder-search",
|
|
27
|
+
"grounder-overview",
|
|
28
|
+
"grounder-plan",
|
|
29
|
+
"grounder-handoff",
|
|
30
|
+
"grounder-recall",
|
|
31
|
+
];
|
|
32
|
+
/** Relative `<skill>/SKILL.md` paths, resolved under whichever agent's skills dir. */
|
|
33
|
+
const SKILL_FILES = SKILL_NAMES.map((name) => path.join(name, "SKILL.md"));
|
|
34
|
+
/**
|
|
35
|
+
* Frozen historical fact about the schema-3 (pre-skill) install layout —
|
|
36
|
+
* deliberately spelled out rather than derived from {@link SKILL_NAMES}, which
|
|
37
|
+
* describes today's Agent Skills layout. Deriving it would rewrite history the
|
|
38
|
+
* moment a skill is added or renamed, retiring paths that never existed while
|
|
39
|
+
* forgetting one that does. Safe to delete once schema-3 installs are assumed
|
|
40
|
+
* extinct in the wild — a maintainer call, not something to automate via a
|
|
41
|
+
* version check.
|
|
42
|
+
*/
|
|
43
|
+
const LEGACY_COMMAND_FILENAMES = [
|
|
44
|
+
"grounder-note.md",
|
|
45
|
+
"grounder-search.md",
|
|
46
|
+
"grounder-plan.md",
|
|
47
|
+
"grounder-task-handoff.md",
|
|
48
|
+
"grounder-task.md",
|
|
49
|
+
];
|
|
50
|
+
export function homeSkillsLayout(options) {
|
|
51
|
+
const templateDir = path.join(pkgRoot, "templates", "agents", options.id, "skills");
|
|
52
|
+
const agentRoot = (homeDir) => path.join(resolveHomeDir(homeDir), options.agentDir);
|
|
53
|
+
const skillsDir = (homeDir) => path.join(agentRoot(homeDir), "skills");
|
|
54
|
+
const legacyCommandsDir = (homeDir) => path.join(agentRoot(homeDir), "commands");
|
|
55
|
+
return {
|
|
56
|
+
skillsDir,
|
|
57
|
+
legacyCommandsDir,
|
|
58
|
+
skillPath: (skill, homeDir) => path.join(skillsDir(homeDir), skill, "SKILL.md"),
|
|
59
|
+
expectedArtifacts: (homeDir) => SKILL_FILES.map((filename) => path.join(skillsDir(homeDir), filename)),
|
|
60
|
+
// Arrow function, not a shorthand method — every member of this object
|
|
61
|
+
// must be reachable with no bound `this` (see the file-level doc comment
|
|
62
|
+
// on why `cursor.ts`/`claude.ts` detach these off the closure), and a
|
|
63
|
+
// shorthand method is the one member shape that can silently start using
|
|
64
|
+
// `this` and type-check fine while breaking only at those detached call
|
|
65
|
+
// sites.
|
|
66
|
+
desiredArtifacts: async (homeDir, renderOptions) => {
|
|
67
|
+
const cli = renderOptions?.invocation ?? runtimeInvocation(homeDir);
|
|
68
|
+
const dir = skillsDir(homeDir);
|
|
69
|
+
const templates = await Promise.all(SKILL_FILES.map((filename) => readFile(path.join(templateDir, filename), "utf8")));
|
|
70
|
+
const desired = {};
|
|
71
|
+
SKILL_FILES.forEach((filename, i) => {
|
|
72
|
+
desired[path.join(dir, filename)] = templates[i].replaceAll("{{GROUNDER_CLI}}", cli);
|
|
73
|
+
});
|
|
74
|
+
return desired;
|
|
75
|
+
},
|
|
76
|
+
tombstones: (homeDir) => LEGACY_COMMAND_FILENAMES.map((filename) => path.join(legacyCommandsDir(homeDir), filename)),
|
|
77
|
+
ownedPrefixes: (homeDir) => [skillsDir(homeDir), legacyCommandsDir(homeDir)],
|
|
78
|
+
// No `homeDir` argument on purpose: detection runs before any per-call
|
|
79
|
+
// home override exists, off `GROUNDER_HOME` / `withHomeDir` alone.
|
|
80
|
+
isInstalled: async () => fileExists(agentRoot()),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=home-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"home-skills.js","sourceRoot":"","sources":["../../src/agents/home-skills.ts"],"names":[],"mappings":"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"}
|