@takemo101/mikan 0.0.9 → 0.0.10

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 (3) hide show
  1. package/README.md +4 -1
  2. package/dist/bin.js +105 -35
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -58,7 +58,7 @@ GitHub Mirror is one-way publication from local Markdown Issues to GitHub Issues
58
58
  mikan wires into AI coding agents two independent ways. Neither models agents or adds a runtime: mikan stays **stdio MCP only** — no HTTP server, port, auth, scheduler, or workflow engine.
59
59
 
60
60
  - `mikan mcp add --agent <agent>` registers the stdio MCP server in the agent's MCP config. Agents: `pi`, `antigravity`, `jcode`, `claude-code`, `opencode`, `codex`, `copilot-vscode`, `copilot-cli`.
61
- - `mikan skills add --agent <agent>` installs a small mikan `SKILL.md` that teaches the agent to drive the board through the MCP tools, including one-way GitHub Mirror publication tools. Agents: `claude-code`, `opencode`, `codex`. This is **separate** from MCP registration — installing skills never changes MCP config.
61
+ - `mikan skills add --agent <agent>` installs a small mikan `SKILL.md` using each agent's native Agent Skills convention. Agents: `pi`, `antigravity`, `jcode`, `claude-code`, `opencode`, `codex`, `copilot-vscode`, `copilot-cli`. This is **separate** from MCP registration — installing skills never changes MCP config.
62
62
 
63
63
  ```sh
64
64
  mikan mcp add --agent claude-code
@@ -66,7 +66,10 @@ mikan mcp add --agent opencode --no-global
66
66
  mikan mcp add --agent codex # global only
67
67
  mikan mcp add --agent copilot-vscode --no-global # VS Code workspace only
68
68
  mikan mcp add --agent copilot-cli # global only
69
+ mikan skills add --agent pi
70
+ mikan skills add --agent antigravity --no-global
69
71
  mikan skills add --agent claude-code
72
+ mikan skills add --agent copilot-cli
70
73
  mikan mcp llms # incur-backed discovery manifest
71
74
  ```
72
75
 
package/dist/bin.js CHANGED
@@ -107078,12 +107078,11 @@ function installMcpServerForAgent(agent, options = {}) {
107078
107078
  return installer.install(options);
107079
107079
  }
107080
107080
  // ../mcp/src/skills/shared.ts
107081
- var skillDocument = `---
107081
+ var skillFrontmatter = `---
107082
107082
  name: mikan
107083
107083
  description: mikan is a local-first Issue board for AI-assisted development. Use it to read the board; create, update, move, and append to Issues; and explicitly publish GitHub Mirrors through the mikan MCP tools. Trigger when the user wants to see the board, add or change an Issue, move an Issue to another Status, record a Report or Note, publish a GitHub Mirror, or decide what to work on next.
107084
- ---
107085
-
107086
- # mikan
107084
+ ---`;
107085
+ var instructionDocument = `# mikan
107087
107086
 
107088
107087
  mikan is a tiny, local-first, Markdown-backed Issue board. Each Issue has a
107089
107088
  stable Issue ID such as \`MIK-001\`, one current Status (the board Column it
@@ -107121,6 +107120,9 @@ mikan does not schedule, auto-move, or block Issues on dependencies.
107121
107120
  Use Issue, Issue ID, Status, Column, Label, Report, Note, and Dependency. Avoid
107122
107121
  Task, ticket, profile, and role.
107123
107122
  `;
107123
+ var skillDocument = `${skillFrontmatter}
107124
+
107125
+ ${instructionDocument}`;
107124
107126
  function globalSkillPath(options, ...segments) {
107125
107127
  return homePath(options, ...segments);
107126
107128
  }
@@ -107138,6 +107140,19 @@ function createSkillInstaller(adapter) {
107138
107140
  };
107139
107141
  }
107140
107142
 
107143
+ // ../mcp/src/skills/antigravity.ts
107144
+ var antigravityAdapter2 = {
107145
+ agent: "antigravity",
107146
+ resolveTarget: (options) => isGlobalScope(options) ? {
107147
+ path: globalSkillPath(options, ".gemini", "antigravity-cli", "skills", "mikan", "SKILL.md"),
107148
+ scope: "global"
107149
+ } : {
107150
+ path: workspaceSkillPath(options, ".agents", "skills", "mikan", "SKILL.md"),
107151
+ scope: "workspace"
107152
+ }
107153
+ };
107154
+ var antigravitySkillInstaller = createSkillInstaller(antigravityAdapter2);
107155
+
107141
107156
  // ../mcp/src/skills/claude-code.ts
107142
107157
  var claudeCodeAdapter2 = {
107143
107158
  agent: "claude-code",
@@ -107166,6 +107181,45 @@ var codexAdapter = {
107166
107181
  };
107167
107182
  var codexSkillInstaller = createSkillInstaller(codexAdapter);
107168
107183
 
107184
+ // ../mcp/src/skills/copilot-cli.ts
107185
+ var copilotCliAdapter2 = {
107186
+ agent: "copilot-cli",
107187
+ resolveTarget: (options) => isGlobalScope(options) ? {
107188
+ path: globalSkillPath(options, ".copilot", "skills", "mikan", "SKILL.md"),
107189
+ scope: "global"
107190
+ } : {
107191
+ path: workspaceSkillPath(options, ".github", "skills", "mikan", "SKILL.md"),
107192
+ scope: "workspace"
107193
+ }
107194
+ };
107195
+ var copilotCliSkillInstaller = createSkillInstaller(copilotCliAdapter2);
107196
+
107197
+ // ../mcp/src/skills/copilot-vscode.ts
107198
+ var copilotVscodeAdapter2 = {
107199
+ agent: "copilot-vscode",
107200
+ resolveTarget: (options) => isGlobalScope(options) ? {
107201
+ path: globalSkillPath(options, ".copilot", "skills", "mikan", "SKILL.md"),
107202
+ scope: "global"
107203
+ } : {
107204
+ path: workspaceSkillPath(options, ".github", "skills", "mikan", "SKILL.md"),
107205
+ scope: "workspace"
107206
+ }
107207
+ };
107208
+ var copilotVscodeSkillInstaller = createSkillInstaller(copilotVscodeAdapter2);
107209
+
107210
+ // ../mcp/src/skills/jcode.ts
107211
+ var jcodeAdapter2 = {
107212
+ agent: "jcode",
107213
+ resolveTarget: (options) => isGlobalScope(options) ? {
107214
+ path: globalSkillPath(options, ".jcode", "skills", "mikan", "SKILL.md"),
107215
+ scope: "global"
107216
+ } : {
107217
+ path: workspaceSkillPath(options, ".jcode", "skills", "mikan", "SKILL.md"),
107218
+ scope: "workspace"
107219
+ }
107220
+ };
107221
+ var jcodeSkillInstaller = createSkillInstaller(jcodeAdapter2);
107222
+
107169
107223
  // ../mcp/src/skills/opencode.ts
107170
107224
  var opencodeAdapter2 = {
107171
107225
  agent: "opencode",
@@ -107179,11 +107233,29 @@ var opencodeAdapter2 = {
107179
107233
  };
107180
107234
  var opencodeSkillInstaller = createSkillInstaller(opencodeAdapter2);
107181
107235
 
107236
+ // ../mcp/src/skills/pi.ts
107237
+ var piAdapter2 = {
107238
+ agent: "pi",
107239
+ resolveTarget: (options) => isGlobalScope(options) ? {
107240
+ path: globalSkillPath(options, ".pi", "agent", "skills", "mikan", "SKILL.md"),
107241
+ scope: "global"
107242
+ } : {
107243
+ path: workspaceSkillPath(options, ".pi", "skills", "mikan", "SKILL.md"),
107244
+ scope: "workspace"
107245
+ }
107246
+ };
107247
+ var piSkillInstaller = createSkillInstaller(piAdapter2);
107248
+
107182
107249
  // ../mcp/src/skills/index.ts
107183
107250
  var skillAgentInstallers = [
107251
+ piSkillInstaller,
107252
+ antigravitySkillInstaller,
107253
+ jcodeSkillInstaller,
107184
107254
  claudeCodeSkillInstaller,
107185
107255
  opencodeSkillInstaller,
107186
- codexSkillInstaller
107256
+ codexSkillInstaller,
107257
+ copilotVscodeSkillInstaller,
107258
+ copilotCliSkillInstaller
107187
107259
  ];
107188
107260
  function installSkillForAgent(agent, options = {}) {
107189
107261
  const installer = skillAgentInstallers.find((entry) => entry.agent === agent);
@@ -107461,7 +107533,7 @@ var import_react20 = __toESM(require_react(), 1);
107461
107533
  // package.json
107462
107534
  var package_default = {
107463
107535
  name: "@takemo101/mikan",
107464
- version: "0.0.9",
107536
+ version: "0.0.10",
107465
107537
  private: false,
107466
107538
  type: "module",
107467
107539
  bin: {
@@ -107522,7 +107594,7 @@ function visibleColumnCountForViewport(viewportWidth) {
107522
107594
  return Math.min(MAX_VISIBLE_COLUMNS, Math.max(MIN_VISIBLE_COLUMNS, fitted));
107523
107595
  }
107524
107596
  function visibleDetailLineCount(viewportHeight) {
107525
- return Math.max(1, viewportHeight - 8);
107597
+ return Math.max(1, viewportHeight - 7);
107526
107598
  }
107527
107599
  function footerText(mode) {
107528
107600
  if (mode === "note-modal") {
@@ -107927,10 +107999,6 @@ function detailTitleContent(page, theme) {
107927
107999
  fg(theme.base.muted)(" \u2502 "),
107928
108000
  fg(theme.base.text)(page.title)
107929
108001
  ];
107930
- if (page.lineRangeText) {
107931
- chunks.push(fg(theme.base.muted)(" \u2502 "));
107932
- chunks.push(fg(theme.base.muted)(page.lineRangeText));
107933
- }
107934
108002
  return new StyledText(chunks);
107935
108003
  }
107936
108004
  function detailMetaContent(page, theme) {
@@ -107979,22 +108047,21 @@ function DetailPage(props) {
107979
108047
  content: detailTitleContent(page, theme)
107980
108048
  }), import_react2.default.createElement("text", {
107981
108049
  content: detailMetaContent(page, theme)
107982
- })), import_react2.default.createElement("box", {
108050
+ })), import_react2.default.createElement("scrollbox", {
107983
108051
  id: "detail-markdown-body",
108052
+ ref: props.detailScrollBoxRef,
108053
+ scrollY: true,
108054
+ scrollX: false,
107984
108055
  style: {
107985
- flexDirection: "column",
107986
108056
  flexGrow: 1,
107987
108057
  minHeight: 0,
107988
108058
  overflow: "hidden"
107989
108059
  }
107990
108060
  }, import_react2.default.createElement("markdown", {
107991
108061
  id: "detail-markdown",
107992
- content: page.visibleMarkdownLines.join(`
107993
- `),
108062
+ content: page.markdown,
107994
108063
  style: {
107995
- flexGrow: 1,
107996
- minHeight: 0,
107997
- overflow: "hidden"
108064
+ width: "100%"
107998
108065
  }
107999
108066
  })));
108000
108067
  }
@@ -108003,7 +108070,7 @@ function DetailPage(props) {
108003
108070
  var import_react3 = __toESM(require_react(), 1);
108004
108071
 
108005
108072
  // ../tui/src/navigation.ts
108006
- function moveSelection(model, selection, direction, options = {}) {
108073
+ function moveSelection(model, selection, direction, _options = {}) {
108007
108074
  if (direction === "enter") {
108008
108075
  const card = model.columns[selection.columnIndex]?.cards[selection.cardIndex];
108009
108076
  if (!card) {
@@ -108018,10 +108085,7 @@ function moveSelection(model, selection, direction, options = {}) {
108018
108085
  }
108019
108086
  if (selection.detailOpen && !selection.moveOpen && !selection.noteOpen && !selection.labelOpen) {
108020
108087
  if (direction === "up" || direction === "down") {
108021
- return {
108022
- ...selection,
108023
- detailScrollOffset: clamp((selection.detailScrollOffset ?? 0) + (direction === "down" ? 1 : -1), 0, detailScrollMax(model, selection, options))
108024
- };
108088
+ return selection;
108025
108089
  }
108026
108090
  if (direction === "left" || direction === "right") {
108027
108091
  return selection;
@@ -108222,14 +108286,6 @@ function keyToTuiAction(keyName2, shift = false, ctrl = false) {
108222
108286
  return;
108223
108287
  }
108224
108288
  }
108225
- function detailScrollMax(model, selection, options = {}) {
108226
- const details = getSelectedDetails(model, selection);
108227
- if (!details)
108228
- return 0;
108229
- const visibleLineCount = options.viewportHeight ? visibleDetailLineCount(options.viewportHeight) : 40;
108230
- return Math.max(0, stripFrontmatter(details.markdown).trimEnd().split(`
108231
- `).length - visibleLineCount);
108232
- }
108233
108289
 
108234
108290
  // ../tui/src/prompt-view-model.ts
108235
108291
  function buildMovePromptViewModel(model, selection) {
@@ -108921,7 +108977,8 @@ function TuiAppView({
108921
108977
  viewportWidth,
108922
108978
  columns,
108923
108979
  noteTextareaRef,
108924
- onNoteSubmit
108980
+ onNoteSubmit,
108981
+ detailScrollBoxRef
108925
108982
  }) {
108926
108983
  const details = selection.detailOpen ? getSelectedDetails(model, selection) : undefined;
108927
108984
  return import_react20.default.createElement("box", {
@@ -108939,7 +108996,8 @@ function TuiAppView({
108939
108996
  model,
108940
108997
  selection,
108941
108998
  theme,
108942
- viewportHeight
108999
+ viewportHeight,
109000
+ detailScrollBoxRef
108943
109001
  }) : import_react20.default.createElement(BoardView, {
108944
109002
  model,
108945
109003
  selection,
@@ -108988,6 +109046,7 @@ async function launchTui(options = {}) {
108988
109046
  const selectionRef = import_react20.default.useRef(selection);
108989
109047
  const githubBusyRef = import_react20.default.useRef(false);
108990
109048
  const noteTextareaRef = import_react20.default.useRef(null);
109049
+ const detailScrollBoxRef = import_react20.default.useRef(null);
108991
109050
  const submitNote = import_react20.default.useCallback((body) => {
108992
109051
  const result = appendSelectedIssueNote({
108993
109052
  cwd: options.cwd,
@@ -109114,6 +109173,10 @@ async function launchTui(options = {}) {
109114
109173
  }
109115
109174
  if (!action)
109116
109175
  return;
109176
+ if (selection.detailOpen && !selection.moveOpen && !selection.noteOpen && !selection.labelOpen && (action === "up" || action === "down")) {
109177
+ detailScrollBoxRef.current?.scrollBy(action === "down" ? 1 : -1);
109178
+ return;
109179
+ }
109117
109180
  if (action === "quit") {
109118
109181
  stop();
109119
109182
  return;
@@ -109197,7 +109260,8 @@ async function launchTui(options = {}) {
109197
109260
  viewportWidth: renderer.width,
109198
109261
  columns: options.columns,
109199
109262
  noteTextareaRef,
109200
- onNoteSubmit: submitNote
109263
+ onNoteSubmit: submitNote,
109264
+ detailScrollBoxRef
109201
109265
  });
109202
109266
  }
109203
109267
  root.render(import_react20.default.createElement(App));
@@ -110132,17 +110196,23 @@ Usage:
110132
110196
  mikan skills add --agent <agent> [--no-global]
110133
110197
 
110134
110198
  Options:
110135
- -a, --agent <agent> Agent to install the mikan skill for: claude-code, opencode, codex
110199
+ -a, --agent <agent> Agent to install guidance for: pi, antigravity, jcode, claude-code, opencode, codex, copilot-vscode, copilot-cli
110136
110200
  --no-global Install workspace-local guidance instead of global
110137
110201
  -h, --help Show this help
110138
110202
 
110139
110203
  Notes:
110140
110204
  codex installs the skill globally only; --no-global is rejected for codex.
110205
+ antigravity also has a shared skill location at ~/.gemini/skills/; mikan's global install targets the Antigravity CLI path.
110141
110206
 
110142
110207
  Examples:
110208
+ mikan skills add --agent pi
110209
+ mikan skills add --agent antigravity --no-global
110210
+ mikan skills add --agent jcode
110143
110211
  mikan skills add --agent claude-code
110144
110212
  mikan skills add --agent opencode --no-global
110145
110213
  mikan skills add -a codex
110214
+ mikan skills add --agent copilot-vscode --no-global
110215
+ mikan skills add --agent copilot-cli
110146
110216
  `;
110147
110217
  }
110148
110218
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takemo101/mikan",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bin": {