@pedrocivita/tocket 2.5.0 → 2.6.4

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 (102) hide show
  1. package/README.md +233 -18
  2. package/dist/commands/agents-md.cmd.d.ts +2 -0
  3. package/dist/commands/agents-md.cmd.js +166 -0
  4. package/dist/commands/agents-md.cmd.js.map +1 -0
  5. package/dist/commands/decide.cmd.d.ts +2 -0
  6. package/dist/commands/decide.cmd.js +70 -0
  7. package/dist/commands/decide.cmd.js.map +1 -0
  8. package/dist/commands/doctor.cmd.d.ts +13 -0
  9. package/dist/commands/doctor.cmd.js +135 -11
  10. package/dist/commands/doctor.cmd.js.map +1 -1
  11. package/dist/commands/eject.cmd.d.ts +1 -1
  12. package/dist/commands/eject.cmd.js +3 -1
  13. package/dist/commands/eject.cmd.js.map +1 -1
  14. package/dist/commands/init.cmd.js +67 -13
  15. package/dist/commands/init.cmd.js.map +1 -1
  16. package/dist/commands/scaffold.cmd.d.ts +2 -0
  17. package/dist/commands/scaffold.cmd.js +118 -0
  18. package/dist/commands/scaffold.cmd.js.map +1 -0
  19. package/dist/commands/suite.cmd.d.ts +2 -0
  20. package/dist/commands/suite.cmd.js +387 -0
  21. package/dist/commands/suite.cmd.js.map +1 -0
  22. package/dist/commands/validate.cmd.js +1 -0
  23. package/dist/commands/validate.cmd.js.map +1 -1
  24. package/dist/commands/work.cmd.d.ts +2 -0
  25. package/dist/commands/work.cmd.js +48 -0
  26. package/dist/commands/work.cmd.js.map +1 -0
  27. package/dist/eval/decide-eval.d.ts +28 -0
  28. package/dist/eval/decide-eval.js +34 -0
  29. package/dist/eval/decide-eval.js.map +1 -0
  30. package/dist/eval/triage-eval.d.ts +46 -0
  31. package/dist/eval/triage-eval.js +175 -0
  32. package/dist/eval/triage-eval.js.map +1 -0
  33. package/dist/index.js +11 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp/index.d.ts +2 -0
  36. package/dist/mcp/index.js +7 -0
  37. package/dist/mcp/index.js.map +1 -0
  38. package/dist/mcp/server.d.ts +4 -0
  39. package/dist/mcp/server.js +360 -0
  40. package/dist/mcp/server.js.map +1 -0
  41. package/dist/templates/memory-bank.d.ts +11 -0
  42. package/dist/templates/memory-bank.js +456 -329
  43. package/dist/templates/memory-bank.js.map +1 -1
  44. package/dist/tests/agents.test.js +73 -1
  45. package/dist/tests/agents.test.js.map +1 -1
  46. package/dist/tests/context.test.js +10 -1
  47. package/dist/tests/context.test.js.map +1 -1
  48. package/dist/tests/decide.test.d.ts +1 -0
  49. package/dist/tests/decide.test.js +483 -0
  50. package/dist/tests/decide.test.js.map +1 -0
  51. package/dist/tests/doctor.test.js +74 -1
  52. package/dist/tests/doctor.test.js.map +1 -1
  53. package/dist/tests/eject.test.js +3 -0
  54. package/dist/tests/eject.test.js.map +1 -1
  55. package/dist/tests/git.test.js +17 -0
  56. package/dist/tests/git.test.js.map +1 -1
  57. package/dist/tests/helpers.d.ts +6 -0
  58. package/dist/tests/helpers.js +13 -0
  59. package/dist/tests/helpers.js.map +1 -0
  60. package/dist/tests/helpers.test.d.ts +1 -0
  61. package/dist/tests/helpers.test.js +23 -0
  62. package/dist/tests/helpers.test.js.map +1 -0
  63. package/dist/tests/init.test.js +85 -5
  64. package/dist/tests/init.test.js.map +1 -1
  65. package/dist/tests/loop.test.d.ts +1 -0
  66. package/dist/tests/loop.test.js +153 -0
  67. package/dist/tests/loop.test.js.map +1 -0
  68. package/dist/tests/memory-bank.test.js +53 -1
  69. package/dist/tests/memory-bank.test.js.map +1 -1
  70. package/dist/tests/suite.test.d.ts +1 -0
  71. package/dist/tests/suite.test.js +199 -0
  72. package/dist/tests/suite.test.js.map +1 -0
  73. package/dist/tests/triage.test.d.ts +1 -0
  74. package/dist/tests/triage.test.js +152 -0
  75. package/dist/tests/triage.test.js.map +1 -0
  76. package/dist/tests/work.test.d.ts +1 -0
  77. package/dist/tests/work.test.js +276 -0
  78. package/dist/tests/work.test.js.map +1 -0
  79. package/dist/utils/agents.d.ts +25 -0
  80. package/dist/utils/agents.js +92 -0
  81. package/dist/utils/agents.js.map +1 -1
  82. package/dist/utils/appmaps.d.ts +65 -0
  83. package/dist/utils/appmaps.js +280 -0
  84. package/dist/utils/appmaps.js.map +1 -0
  85. package/dist/utils/context.d.ts +2 -0
  86. package/dist/utils/context.js +21 -0
  87. package/dist/utils/context.js.map +1 -1
  88. package/dist/utils/decide.d.ts +178 -0
  89. package/dist/utils/decide.js +614 -0
  90. package/dist/utils/decide.js.map +1 -0
  91. package/dist/utils/git.js +8 -1
  92. package/dist/utils/git.js.map +1 -1
  93. package/dist/utils/jev.d.ts +83 -0
  94. package/dist/utils/jev.js +190 -0
  95. package/dist/utils/jev.js.map +1 -0
  96. package/dist/utils/triage.d.ts +87 -0
  97. package/dist/utils/triage.js +241 -0
  98. package/dist/utils/triage.js.map +1 -0
  99. package/dist/utils/work.d.ts +72 -0
  100. package/dist/utils/work.js +225 -0
  101. package/dist/utils/work.js.map +1 -0
  102. package/package.json +53 -50
@@ -0,0 +1,175 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * POC C eval: heuristic/Jev triage vs human labels + stability + naive baseline.
4
+ *
5
+ * npm run eval:triage
6
+ */
7
+ import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
+ import { dirname, join } from "node:path";
9
+ import { toRepoRelative } from "../utils/context.js";
10
+ import { parseLastRun } from "../utils/appmaps.js";
11
+ import { heuristicCase, naiveIfElseChoice, selectResults, } from "../utils/triage.js";
12
+ export const AGREEMENT_HYPOTHESIS = 0.8;
13
+ export const STABILITY_KILL = 0.3;
14
+ export const CHANCE_BASELINE = 0.25;
15
+ export function loadExpected(path) {
16
+ return JSON.parse(readFileSync(path, "utf-8"));
17
+ }
18
+ export function evaluateTriage(lastRunPath, expectedPath) {
19
+ const expected = loadExpected(expectedPath);
20
+ const run = parseLastRun(readFileSync(lastRunPath, "utf-8"));
21
+ const selected = selectResults(run, expected.include_low_confidence);
22
+ const first = new Map(selected.map((result) => [result.id, heuristicCase(result).choice]));
23
+ const second = new Map(selected.map((result) => [result.id, heuristicCase(result).choice]));
24
+ const expectedById = new Map(expected.cases.map((item) => [item.id, item]));
25
+ const disagreements = [];
26
+ let agreed = 0;
27
+ let naiveAgreed = 0;
28
+ let unstable = 0;
29
+ for (const item of expected.cases) {
30
+ const result = selected.find((row) => row.id === item.id);
31
+ if (!result) {
32
+ disagreements.push({
33
+ id: item.id,
34
+ expected: item.expected,
35
+ got: "escalate",
36
+ flavor: `${item.flavor} (missing from selected results)`,
37
+ });
38
+ continue;
39
+ }
40
+ const got = first.get(item.id);
41
+ const again = second.get(item.id);
42
+ if (got !== again)
43
+ unstable += 1;
44
+ if (got === item.expected)
45
+ agreed += 1;
46
+ else if (got) {
47
+ disagreements.push({
48
+ id: item.id,
49
+ expected: item.expected,
50
+ got,
51
+ flavor: item.flavor,
52
+ });
53
+ }
54
+ if (naiveIfElseChoice(result) === item.expected)
55
+ naiveAgreed += 1;
56
+ }
57
+ const total = expected.cases.length;
58
+ const agreement = total === 0 ? 0 : agreed / total;
59
+ const naiveAgreement = total === 0 ? 0 : naiveAgreed / total;
60
+ const unstableRate = total === 0 ? 0 : unstable / total;
61
+ const reasons = [];
62
+ let verdict = "PASS";
63
+ if (unstableRate >= STABILITY_KILL) {
64
+ verdict = "FAIL";
65
+ reasons.push(`Stability kill: ${pct(unstableRate)} of cases changed across 2 identical runs (threshold ${pct(STABILITY_KILL)}).`);
66
+ }
67
+ if (agreement <= CHANCE_BASELINE || agreement <= naiveAgreement) {
68
+ verdict = "FAIL";
69
+ reasons.push(`Kill: agreement ${pct(agreement)} ≤ chance ${pct(CHANCE_BASELINE)} or naive if-else ${pct(naiveAgreement)}.`);
70
+ }
71
+ if (agreement < AGREEMENT_HYPOTHESIS && verdict !== "FAIL") {
72
+ verdict = "FAIL";
73
+ reasons.push(`Hypothesis miss: agreement ${pct(agreement)} < ${pct(AGREEMENT_HYPOTHESIS)}.`);
74
+ }
75
+ if (verdict === "PASS") {
76
+ reasons.push(`Dry-run heuristic agrees with human labels on ${agreed}/${total} (${pct(agreement)}), beats chance (${pct(CHANCE_BASELINE)}) and naive if-else (${pct(naiveAgreement)}), unstable ${pct(unstableRate)}.`);
77
+ reasons.push("Live Jev Choice was not scored (no TYPESAFE_API_KEY in this eval). Hypothesis for live Jev remains GRAY.");
78
+ }
79
+ return {
80
+ total,
81
+ agreed,
82
+ agreement,
83
+ naiveAgreed,
84
+ naiveAgreement,
85
+ chance: CHANCE_BASELINE,
86
+ unstable,
87
+ unstableRate,
88
+ disagreements,
89
+ verdict,
90
+ reasons,
91
+ };
92
+ }
93
+ export function pct(value) {
94
+ return `${(value * 100).toFixed(1)}%`;
95
+ }
96
+ export function renderResultsMd(result) {
97
+ const rows = result.disagreements.length
98
+ ? result.disagreements
99
+ .map((item) => `| ${item.id} | ${item.expected} | ${item.got} | ${item.flavor} |`)
100
+ .join("\n")
101
+ : "| _none_ | | | |";
102
+ return `# POC C — suite triage eval
103
+
104
+ ## Verdict
105
+
106
+ | Surface | Verdict | Why |
107
+ | --- | --- | --- |
108
+ | Dry-run heuristic stub | **${result.verdict}** | ${result.agreed}/${result.total} (${pct(result.agreement)}) vs ≥80%; unstable ${pct(result.unstableRate)} |
109
+ | Live Jev Choice | **GRAY** | TYPESAFE_API_KEY unset; System One was not scored |
110
+ | Hypothesis as stated (Jev ≥80%) | **GRAY** | Needs a live key run on the same fixtures |
111
+
112
+ Kill not triggered on the stub: agreement is above chance (${pct(result.chance)}) and naive if-else (${pct(result.naiveAgreement)}); instability is below 30%.
113
+
114
+ Hypothesis: a Jev Choice among {retry, escalate, ignore, rewrite-locator} agrees with a human-labeled judgment ≥80% on a small fixture set.
115
+
116
+ | Metric | Value |
117
+ | --- | --- |
118
+ | Cases | ${result.total} |
119
+ | Heuristic agreement | ${result.agreed}/${result.total} (${pct(result.agreement)}) |
120
+ | Naive if-else agreement | ${result.naiveAgreed}/${result.total} (${pct(result.naiveAgreement)}) |
121
+ | Chance (4-way) | ${pct(result.chance)} |
122
+ | Unstable (2 identical runs) | ${result.unstable}/${result.total} (${pct(result.unstableRate)}) |
123
+ | Live Jev | not scored (TYPESAFE_API_KEY unset) |
124
+
125
+ ## Reasons
126
+
127
+ ${result.reasons.map((line) => `- ${line}`).join("\n")}
128
+
129
+ ## Sample disagreements
130
+
131
+ | ID | Expected | Got | Flavor |
132
+ | --- | --- | --- | --- |
133
+ ${rows}
134
+
135
+ ## How to reproduce
136
+
137
+ \`\`\`bash
138
+ npm run eval:triage
139
+ tocket suite triage --from fixtures/triage/last-run.json --include-low-confidence --dry-run
140
+ \`\`\`
141
+ `;
142
+ }
143
+ function repoRoot() {
144
+ return join(import.meta.dirname, "..", "..");
145
+ }
146
+ function main() {
147
+ const root = repoRoot();
148
+ const lastRunPath = join(root, "fixtures", "triage", "last-run.json");
149
+ const expectedPath = join(root, "fixtures", "triage-expected.json");
150
+ const result = evaluateTriage(lastRunPath, expectedPath);
151
+ const md = renderResultsMd(result);
152
+ const outPath = join(root, "fixtures", "triage", "results.md");
153
+ mkdirSync(dirname(outPath), { recursive: true });
154
+ writeFileSync(outPath, md, "utf-8");
155
+ console.log(`agreement ${result.agreed}/${result.total} (${pct(result.agreement)})`);
156
+ console.log(`naive ${result.naiveAgreed}/${result.total} (${pct(result.naiveAgreement)})`);
157
+ console.log(`chance ${pct(result.chance)}`);
158
+ console.log(`unstable ${result.unstable}/${result.total} (${pct(result.unstableRate)})`);
159
+ console.log(`verdict ${result.verdict}`);
160
+ if (result.disagreements.length > 0) {
161
+ console.log("disagreements:");
162
+ for (const item of result.disagreements) {
163
+ console.log(` ${item.id}: expected ${item.expected}, got ${item.got} (${item.flavor})`);
164
+ }
165
+ }
166
+ console.log(`wrote ${toRepoRelative(root, outPath)}`);
167
+ if (result.verdict === "FAIL") {
168
+ process.exitCode = 1;
169
+ }
170
+ }
171
+ const invoked = process.argv[1]?.includes("triage-eval");
172
+ if (invoked) {
173
+ main();
174
+ }
175
+ //# sourceMappingURL=triage-eval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triage-eval.js","sourceRoot":"","sources":["../../src/eval/triage-eval.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -14,11 +14,16 @@ import { registerDoctorCommand } from "./commands/doctor.cmd.js";
14
14
  import { registerLintCommand } from "./commands/lint.cmd.js";
15
15
  import { registerDiffCommand } from "./commands/diff.cmd.js";
16
16
  import { registerHandoffCommand } from "./commands/handoff.cmd.js";
17
+ import { registerAgentsMdCommand } from "./commands/agents-md.cmd.js";
18
+ import { registerScaffoldCommand } from "./commands/scaffold.cmd.js";
19
+ import { registerSuiteCommand } from "./commands/suite.cmd.js";
20
+ import { registerDecideCommand } from "./commands/decide.cmd.js";
21
+ import { registerWorkCommand } from "./commands/work.cmd.js";
17
22
  const pkg = JSON.parse(readFileSync(join(import.meta.dirname, "..", "package.json"), "utf-8"));
18
23
  const program = new Command();
19
24
  program
20
25
  .name("tocket")
21
- .description("The Context Engineering Framework for Multi-Agent Workspaces")
26
+ .description("Shared project notebook (.context/). decide writes the next move; workers execute.")
22
27
  .version(pkg.version);
23
28
  registerInitCommand(program);
24
29
  registerGenerateCommand(program);
@@ -32,6 +37,11 @@ registerDoctorCommand(program);
32
37
  registerLintCommand(program);
33
38
  registerDiffCommand(program);
34
39
  registerHandoffCommand(program);
40
+ registerAgentsMdCommand(program);
41
+ registerScaffoldCommand(program);
42
+ registerSuiteCommand(program);
43
+ registerDecideCommand(program);
44
+ registerWorkCommand(program);
35
45
  // No-args: show interactive dashboard (TTY) or help (non-TTY)
36
46
  const args = process.argv.slice(2);
37
47
  if (args.length === 0 && process.stdin.isTTY) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAChD,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,8DAA8D,CAAC;KAC3E,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,8DAA8D;AAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAChD,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,oFAAoF,CAAC;KACjG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,8DAA8D;AAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC7C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAClE,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { startServer } from "./server.js";
3
+ startServer().catch((error) => {
4
+ console.error("Failed to start MCP server:", error);
5
+ process.exit(1);
6
+ });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Start the MCP server
3
+ */
4
+ export declare function startServer(): Promise<void>;
@@ -0,0 +1,360 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { ListToolsRequestSchema, CallToolRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { existsSync, readFileSync, writeFileSync, readdirSync, statSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ /**
7
+ * Context file names that can be read/written
8
+ */
9
+ const CONTEXT_FILES = [
10
+ "activeContext.md",
11
+ "systemPatterns.md",
12
+ "techContext.md",
13
+ "productContext.md",
14
+ "progress.md",
15
+ ];
16
+ /**
17
+ * Validate and normalize context file name
18
+ */
19
+ function isValidContextFile(file) {
20
+ return CONTEXT_FILES.includes(file);
21
+ }
22
+ /**
23
+ * Get absolute path to context directory
24
+ */
25
+ function getContextDir() {
26
+ const cwd = process.cwd();
27
+ return join(cwd, ".context");
28
+ }
29
+ /**
30
+ * Get absolute path to a context file
31
+ */
32
+ function getContextFilePath(file) {
33
+ return join(getContextDir(), file);
34
+ }
35
+ /**
36
+ * Check if a file exists in the context directory
37
+ */
38
+ function contextFileExists(file) {
39
+ return existsSync(getContextFilePath(file));
40
+ }
41
+ /**
42
+ * Get list of all available context files in the workspace
43
+ */
44
+ function getAvailableContextFiles() {
45
+ const contextDir = getContextDir();
46
+ if (!existsSync(contextDir)) {
47
+ return [];
48
+ }
49
+ return readdirSync(contextDir)
50
+ .filter((f) => f.endsWith(".md"))
51
+ .sort();
52
+ }
53
+ /**
54
+ * Get list of all Tocket-managed files in the workspace
55
+ */
56
+ function getTocketManagedFiles() {
57
+ const cwd = process.cwd();
58
+ const files = [];
59
+ // Add .context files
60
+ const contextDir = getContextDir();
61
+ if (existsSync(contextDir)) {
62
+ const contextFiles = readdirSync(contextDir);
63
+ contextFiles.forEach((f) => {
64
+ files.push(`.context/${f}`);
65
+ });
66
+ }
67
+ // Add TOCKET.md
68
+ if (existsSync(join(cwd, "TOCKET.md"))) {
69
+ files.push("TOCKET.md");
70
+ }
71
+ // Add agent config files
72
+ const agentFiles = ["CLAUDE.md", "GEMINI.md", "ARCHITECT.md"];
73
+ agentFiles.forEach((f) => {
74
+ if (existsSync(join(cwd, f))) {
75
+ files.push(f);
76
+ }
77
+ });
78
+ return files.sort();
79
+ }
80
+ /**
81
+ * Compute workspace status
82
+ */
83
+ function getWorkspaceStatus() {
84
+ const cwd = process.cwd();
85
+ const contextDir = getContextDir();
86
+ const hasWorkspace = existsSync(contextDir);
87
+ let currentFocus = "";
88
+ let stalenessHours = null;
89
+ if (hasWorkspace && contextFileExists("activeContext.md")) {
90
+ try {
91
+ const content = readFileSync(getContextFilePath("activeContext.md"), "utf-8");
92
+ // Extract current focus from "## Current Focus" section
93
+ const focusMatch = content.match(/## Current Focus\s*\n+(.+)/);
94
+ if (focusMatch?.[1]) {
95
+ const line = focusMatch[1].trim();
96
+ if (!line.startsWith("_") && !line.includes("No active tasks")) {
97
+ currentFocus = line.length > 100 ? line.substring(0, 97) + "..." : line;
98
+ }
99
+ }
100
+ // Compute staleness in hours
101
+ const stats = statSync(getContextFilePath("activeContext.md"));
102
+ stalenessHours = Math.floor((Date.now() - stats.mtimeMs) / (1000 * 60 * 60));
103
+ }
104
+ catch (e) {
105
+ // Ignore errors reading activeContext
106
+ }
107
+ }
108
+ // Try to extract project name from package.json
109
+ let projectName = "unknown";
110
+ try {
111
+ const pkgPath = join(cwd, "package.json");
112
+ if (existsSync(pkgPath)) {
113
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
114
+ projectName = pkg.name || "unknown";
115
+ }
116
+ }
117
+ catch (e) {
118
+ // Ignore errors
119
+ }
120
+ return {
121
+ projectName,
122
+ currentFocus,
123
+ hasWorkspace,
124
+ stalenessHours,
125
+ contextFiles: getAvailableContextFiles(),
126
+ };
127
+ }
128
+ /**
129
+ * Start the MCP server
130
+ */
131
+ export async function startServer() {
132
+ const server = new Server({
133
+ name: "tocket-context-server",
134
+ version: "1.0.0",
135
+ });
136
+ /**
137
+ * List available tools
138
+ */
139
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
140
+ const tools = [
141
+ {
142
+ name: "tocket_read_context",
143
+ description: "Read the contents of a .context/ file (activeContext, systemPatterns, techContext, productContext, or progress)",
144
+ inputSchema: {
145
+ type: "object",
146
+ properties: {
147
+ file: {
148
+ type: "string",
149
+ enum: CONTEXT_FILES,
150
+ description: "The context file to read",
151
+ },
152
+ },
153
+ required: ["file"],
154
+ },
155
+ },
156
+ {
157
+ name: "tocket_update_context",
158
+ description: "Update the contents of a .context/ file",
159
+ inputSchema: {
160
+ type: "object",
161
+ properties: {
162
+ file: {
163
+ type: "string",
164
+ enum: CONTEXT_FILES,
165
+ description: "The context file to update",
166
+ },
167
+ content: {
168
+ type: "string",
169
+ description: "The new content to write to the file",
170
+ },
171
+ },
172
+ required: ["file", "content"],
173
+ },
174
+ },
175
+ {
176
+ name: "tocket_get_status",
177
+ description: "Get a summary of the current Tocket workspace (project name, focus, staleness, file list)",
178
+ inputSchema: {
179
+ type: "object",
180
+ properties: {},
181
+ },
182
+ },
183
+ {
184
+ name: "tocket_read_protocol",
185
+ description: "Read the full Tocket protocol specification (TOCKET.md)",
186
+ inputSchema: {
187
+ type: "object",
188
+ properties: {},
189
+ },
190
+ },
191
+ {
192
+ name: "tocket_list_files",
193
+ description: "List all Tocket-managed files (.context files, TOCKET.md, agent config files)",
194
+ inputSchema: {
195
+ type: "object",
196
+ properties: {},
197
+ },
198
+ },
199
+ ];
200
+ return { tools };
201
+ });
202
+ /**
203
+ * Handle tool calls
204
+ */
205
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
206
+ const { name, arguments: args } = request.params;
207
+ const typedArgs = (args ?? {});
208
+ try {
209
+ switch (name) {
210
+ case "tocket_read_context": {
211
+ const file = typedArgs.file;
212
+ if (!isValidContextFile(file)) {
213
+ return {
214
+ content: [
215
+ {
216
+ type: "text",
217
+ text: `Invalid context file: ${file}. Valid files are: ${CONTEXT_FILES.join(", ")}`,
218
+ },
219
+ ],
220
+ isError: true,
221
+ };
222
+ }
223
+ if (!contextFileExists(file)) {
224
+ return {
225
+ content: [
226
+ {
227
+ type: "text",
228
+ text: `Context file not found: ${file}`,
229
+ },
230
+ ],
231
+ isError: true,
232
+ };
233
+ }
234
+ const content = readFileSync(getContextFilePath(file), "utf-8");
235
+ return {
236
+ content: [
237
+ {
238
+ type: "text",
239
+ text: content,
240
+ },
241
+ ],
242
+ };
243
+ }
244
+ case "tocket_update_context": {
245
+ const file = typedArgs.file;
246
+ const content = typedArgs.content;
247
+ if (!isValidContextFile(file)) {
248
+ return {
249
+ content: [
250
+ {
251
+ type: "text",
252
+ text: `Invalid context file: ${file}. Valid files are: ${CONTEXT_FILES.join(", ")}`,
253
+ },
254
+ ],
255
+ isError: true,
256
+ };
257
+ }
258
+ if (!content || typeof content !== "string") {
259
+ return {
260
+ content: [
261
+ {
262
+ type: "text",
263
+ text: "Content must be a non-empty string",
264
+ },
265
+ ],
266
+ isError: true,
267
+ };
268
+ }
269
+ const filePath = getContextFilePath(file);
270
+ writeFileSync(filePath, content, "utf-8");
271
+ return {
272
+ content: [
273
+ {
274
+ type: "text",
275
+ text: `Successfully updated ${file} (${content.length} bytes)`,
276
+ },
277
+ ],
278
+ };
279
+ }
280
+ case "tocket_get_status": {
281
+ const status = getWorkspaceStatus();
282
+ const statusText = `Project: ${status.projectName}
283
+ Has Workspace: ${status.hasWorkspace}
284
+ Current Focus: ${status.currentFocus || "(none)"}
285
+ Staleness: ${status.stalenessHours !== null ? `${status.stalenessHours} hours ago` : "N/A"}
286
+ Context Files: ${status.contextFiles.length > 0 ? status.contextFiles.join(", ") : "none"}`;
287
+ return {
288
+ content: [
289
+ {
290
+ type: "text",
291
+ text: statusText,
292
+ },
293
+ ],
294
+ };
295
+ }
296
+ case "tocket_read_protocol": {
297
+ const cwd = process.cwd();
298
+ const protocolPath = join(cwd, "TOCKET.md");
299
+ if (!existsSync(protocolPath)) {
300
+ return {
301
+ content: [
302
+ {
303
+ type: "text",
304
+ text: "TOCKET.md protocol file not found in the current directory",
305
+ },
306
+ ],
307
+ isError: true,
308
+ };
309
+ }
310
+ const content = readFileSync(protocolPath, "utf-8");
311
+ return {
312
+ content: [
313
+ {
314
+ type: "text",
315
+ text: content,
316
+ },
317
+ ],
318
+ };
319
+ }
320
+ case "tocket_list_files": {
321
+ const files = getTocketManagedFiles();
322
+ return {
323
+ content: [
324
+ {
325
+ type: "text",
326
+ text: files.length > 0 ? files.join("\n") : "(no Tocket files found)",
327
+ },
328
+ ],
329
+ };
330
+ }
331
+ default:
332
+ return {
333
+ content: [
334
+ {
335
+ type: "text",
336
+ text: `Unknown tool: ${name}`,
337
+ },
338
+ ],
339
+ isError: true,
340
+ };
341
+ }
342
+ }
343
+ catch (error) {
344
+ const errorMessage = error instanceof Error ? error.message : String(error);
345
+ return {
346
+ content: [
347
+ {
348
+ type: "text",
349
+ text: `Error: ${errorMessage}`,
350
+ },
351
+ ],
352
+ isError: true,
353
+ };
354
+ }
355
+ });
356
+ // Start the server on stdio
357
+ const transport = new StdioServerTransport();
358
+ await server.connect(transport);
359
+ }
360
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;GAEG;AACH,MAAM,aAAa,GAAG;IACpB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,aAAa;CACL,CAAC;AAIX;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAmB,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAiB;IAC1C,OAAO,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAC/B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,WAAW,CAAC,UAAU,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB;IAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,qBAAqB;IACrB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAC7C,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,yBAAyB;IACzB,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC9D,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB;IAOzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,cAAc,GAAkB,IAAI,CAAC;IAEzC,IAAI,YAAY,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAC1B,kBAAkB,CAAC,kBAAkB,CAAC,EACtC,OAAO,CACR,CAAC;YAEF,wDAAwD;YACxD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC/D,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAC/D,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC1E,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/D,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACvD,WAAW,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,gBAAgB;IAClB,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,cAAc;QACd,YAAY,EAAE,wBAAwB,EAAE;KACzC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,KAAK,GAAW;YACpB;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EACT,iHAAiH;gBACnH,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,0BAA0B;yBACxC;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE,yCAAyC;gBACtD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,aAAa;4BACnB,WAAW,EAAE,4BAA4B;yBAC1C;wBACD,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,sCAAsC;yBACpD;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;iBAC9B;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EACT,2FAA2F;gBAC7F,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,WAAW,EACT,yDAAyD;gBAC3D,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EACT,+EAA+E;gBACjF,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;SACF,CAAC;QAEF,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QAE1D,IAAI,CAAC;YACH,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAc,CAAC;oBACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,IAAI,sBAAsB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iCACpF;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC7B,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,2BAA2B,IAAI,EAAE;iCACxC;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBAED,MAAM,OAAO,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;oBAChE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,OAAO;6BACd;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;oBAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAc,CAAC;oBACtC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAiB,CAAC;oBAE5C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,IAAI,sBAAsB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iCACpF;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBAED,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAC5C,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,oCAAoC;iCAC3C;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;oBAC1C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAE1C,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,wBAAwB,IAAI,KAAK,OAAO,CAAC,MAAM,SAAS;6BAC/D;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;oBACzB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,YAAY,MAAM,CAAC,WAAW;iBAC1C,MAAM,CAAC,YAAY;iBACnB,MAAM,CAAC,YAAY,IAAI,QAAQ;aACnC,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,cAAc,YAAY,CAAC,CAAC,CAAC,KAAK;iBACzE,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBAElF,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,UAAU;6BACjB;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;oBAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;oBAE5C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC9B,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,4DAA4D;iCACnE;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBAED,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;oBACpD,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,OAAO;6BACd;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;oBACzB,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;oBACtC,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB;6BACtE;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,iBAAiB,IAAI,EAAE;6BAC9B;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,UAAU,YAAY,EAAE;qBAC/B;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
@@ -18,3 +18,14 @@ export declare const techContextMd: (projectName: string, stack?: StackInfo) =>
18
18
  export declare const progressMd: (projectName: string) => string;
19
19
  export declare const cursorrulesMd: (projectName: string, description: string, architectFile?: string) => string;
20
20
  export declare const tocketMd: (projectName: string, executorFile?: string, architectFile?: string) => string;
21
+ /** Shared decide/work/gate rules for AGENTS.md (init template and `tocket agents-md`). */
22
+ export declare function agentsProtocolSection(): string;
23
+ export declare const agentsMd: (projectName: string, description: string, executorName?: string, architectName?: string) => string;
24
+ /** Official portable skill for Cursor / Claude / Codex. Written by `tocket init`. */
25
+ export declare const TOCKET_SKILL_REL = ".agents/skills/tocket/SKILL.md";
26
+ /** Catalog path so `npx skills add pedrocivita/tocket --skill tocket` can discover it. */
27
+ export declare const TOCKET_SKILL_CATALOG_REL = "skills/tocket/SKILL.md";
28
+ export declare const TOCKET_SKILLS_ADD = "npx skills add pedrocivita/tocket --skill tocket";
29
+ export declare const TOCKET_AGENT_PHRASE = "Before expensive tools: tocket decide --dry-run, or read .context/decisions/.";
30
+ export declare function tocketConventionsHint(): string;
31
+ export declare const tocketSkillMd: () => string;