@orbitpanel/cli 0.1.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.
Files changed (77) hide show
  1. package/README.md +100 -0
  2. package/bin/dev.js +3 -0
  3. package/bin/run.js +3 -0
  4. package/dist/commands/doctor.d.ts +6 -0
  5. package/dist/commands/doctor.js +86 -0
  6. package/dist/commands/doctor.js.map +1 -0
  7. package/dist/commands/intervention/delete.d.ts +12 -0
  8. package/dist/commands/intervention/delete.js +70 -0
  9. package/dist/commands/intervention/delete.js.map +1 -0
  10. package/dist/commands/intervention/get.d.ts +12 -0
  11. package/dist/commands/intervention/get.js +64 -0
  12. package/dist/commands/intervention/get.js.map +1 -0
  13. package/dist/commands/intervention/list.d.ts +15 -0
  14. package/dist/commands/intervention/list.js +102 -0
  15. package/dist/commands/intervention/list.js.map +1 -0
  16. package/dist/commands/intervention/update.d.ts +16 -0
  17. package/dist/commands/intervention/update.js +78 -0
  18. package/dist/commands/intervention/update.js.map +1 -0
  19. package/dist/commands/link.d.ts +13 -0
  20. package/dist/commands/link.js +77 -0
  21. package/dist/commands/link.js.map +1 -0
  22. package/dist/commands/login.d.ts +12 -0
  23. package/dist/commands/login.js +61 -0
  24. package/dist/commands/login.js.map +1 -0
  25. package/dist/commands/logout.d.ts +9 -0
  26. package/dist/commands/logout.js +23 -0
  27. package/dist/commands/logout.js.map +1 -0
  28. package/dist/commands/note/add.d.ts +13 -0
  29. package/dist/commands/note/add.js +53 -0
  30. package/dist/commands/note/add.js.map +1 -0
  31. package/dist/commands/report/send.d.ts +15 -0
  32. package/dist/commands/report/send.js +124 -0
  33. package/dist/commands/report/send.js.map +1 -0
  34. package/dist/commands/serve.d.ts +7 -0
  35. package/dist/commands/serve.js +24 -0
  36. package/dist/commands/serve.js.map +1 -0
  37. package/dist/commands/session/end.d.ts +10 -0
  38. package/dist/commands/session/end.js +61 -0
  39. package/dist/commands/session/end.js.map +1 -0
  40. package/dist/commands/session/start.d.ts +10 -0
  41. package/dist/commands/session/start.js +61 -0
  42. package/dist/commands/session/start.js.map +1 -0
  43. package/dist/commands/status.d.ts +6 -0
  44. package/dist/commands/status.js +56 -0
  45. package/dist/commands/status.js.map +1 -0
  46. package/dist/commands/unlink.d.ts +10 -0
  47. package/dist/commands/unlink.js +43 -0
  48. package/dist/commands/unlink.js.map +1 -0
  49. package/dist/hooks/prerun.d.ts +9 -0
  50. package/dist/hooks/prerun.js +13 -0
  51. package/dist/hooks/prerun.js.map +1 -0
  52. package/dist/lib/client.d.ts +34 -0
  53. package/dist/lib/client.js +151 -0
  54. package/dist/lib/client.js.map +1 -0
  55. package/dist/lib/config.d.ts +19 -0
  56. package/dist/lib/config.js +67 -0
  57. package/dist/lib/config.js.map +1 -0
  58. package/dist/lib/git.d.ts +19 -0
  59. package/dist/lib/git.js +48 -0
  60. package/dist/lib/git.js.map +1 -0
  61. package/dist/lib/report-builder.d.ts +16 -0
  62. package/dist/lib/report-builder.js +73 -0
  63. package/dist/lib/report-builder.js.map +1 -0
  64. package/dist/lib/session.d.ts +28 -0
  65. package/dist/lib/session.js +106 -0
  66. package/dist/lib/session.js.map +1 -0
  67. package/dist/lib/site.d.ts +21 -0
  68. package/dist/lib/site.js +59 -0
  69. package/dist/lib/site.js.map +1 -0
  70. package/dist/mcp/server.d.ts +16 -0
  71. package/dist/mcp/server.js +319 -0
  72. package/dist/mcp/server.js.map +1 -0
  73. package/dist/types.d.ts +68 -0
  74. package/dist/types.js +5 -0
  75. package/dist/types.js.map +1 -0
  76. package/oclif.manifest.json +732 -0
  77. package/package.json +62 -0
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Session management for @orbitpanel/cli.
3
+ * Tracks local work sessions in ~/.orbit/sessions/.
4
+ */
5
+ import { readFile, writeFile, mkdir, readdir } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ import { randomUUID } from 'node:crypto';
9
+ export const SESSIONS_DIR = join(homedir(), '.orbit', 'sessions');
10
+ const defaultIO = {
11
+ read: (path) => readFile(path, 'utf-8'),
12
+ write: (path, data) => writeFile(path, data, { encoding: 'utf-8', mode: 0o600 }),
13
+ mkdirp: (path) => mkdir(path, { recursive: true, mode: 0o700 }).then(() => { }),
14
+ list: async (dir) => {
15
+ try {
16
+ return await readdir(dir);
17
+ }
18
+ catch {
19
+ return [];
20
+ }
21
+ },
22
+ };
23
+ /** Create a new session. */
24
+ export async function createSession(siteId, opts, io = defaultIO) {
25
+ const id = randomUUID().replace(/-/g, '').slice(0, 16);
26
+ const now = new Date().toISOString();
27
+ const session = {
28
+ id,
29
+ site_id: siteId,
30
+ started_at: now,
31
+ git_branch: opts.git_branch ?? undefined,
32
+ git_commit_start: opts.git_commit ?? undefined,
33
+ notes: [],
34
+ status: 'active',
35
+ };
36
+ if (opts.note) {
37
+ session.notes.push({
38
+ text: opts.note,
39
+ timestamp: now,
40
+ priority: 'medium',
41
+ });
42
+ }
43
+ await io.mkdirp(SESSIONS_DIR);
44
+ await io.write(join(SESSIONS_DIR, `${id}.json`), JSON.stringify(session, null, 2));
45
+ return session;
46
+ }
47
+ /** Load the active session for a site_id. Returns null if none found. */
48
+ export async function loadActiveSession(siteId, io = defaultIO) {
49
+ const files = await io.list(SESSIONS_DIR);
50
+ const jsonFiles = files.filter(f => f.endsWith('.json'));
51
+ for (const file of jsonFiles) {
52
+ try {
53
+ const raw = await io.read(join(SESSIONS_DIR, file));
54
+ const session = JSON.parse(raw);
55
+ if (session.site_id === siteId && session.status === 'active') {
56
+ return session;
57
+ }
58
+ }
59
+ catch {
60
+ continue;
61
+ }
62
+ }
63
+ return null;
64
+ }
65
+ /** Load a session by ID. Throws if not found. */
66
+ async function loadSession(sessionId, io) {
67
+ if (!/^[a-zA-Z0-9_-]{1,64}$/.test(sessionId)) {
68
+ throw new Error(`Session ID non valido: ${sessionId}`);
69
+ }
70
+ const path = join(SESSIONS_DIR, `${sessionId}.json`);
71
+ try {
72
+ const raw = await io.read(path);
73
+ return JSON.parse(raw);
74
+ }
75
+ catch {
76
+ throw new Error(`Sessione ${sessionId} non trovata. Potrebbe essere stata eliminata.`);
77
+ }
78
+ }
79
+ /** Save a session back to disk. */
80
+ async function saveSession(session, io) {
81
+ await io.write(join(SESSIONS_DIR, `${session.id}.json`), JSON.stringify(session, null, 2));
82
+ }
83
+ /** Add a note to an existing session. */
84
+ export async function addNote(sessionId, text, priority = 'medium', io = defaultIO) {
85
+ const session = await loadSession(sessionId, io);
86
+ session.notes.push({
87
+ text,
88
+ timestamp: new Date().toISOString(),
89
+ priority,
90
+ });
91
+ await saveSession(session, io);
92
+ return session;
93
+ }
94
+ /** End a session, marking it as completed. */
95
+ export async function endSession(sessionId, opts = {}, io = defaultIO) {
96
+ const session = await loadSession(sessionId, io);
97
+ session.status = 'completed';
98
+ session.ended_at = new Date().toISOString();
99
+ if (opts.git_commit_end)
100
+ session.git_commit_end = opts.git_commit_end;
101
+ if (opts.summary)
102
+ session.summary = opts.summary;
103
+ await saveSession(session, io);
104
+ return session;
105
+ }
106
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Site linking for @orbitpanel/cli.
3
+ * Manages .orbit.json files in project roots.
4
+ */
5
+ import type { SiteLink } from '../types.js';
6
+ export declare const SITE_LINK_FILENAME = ".orbit.json";
7
+ /** File I/O interface — overridable for testing. */
8
+ export interface SiteIO {
9
+ read(path: string): Promise<string>;
10
+ write(path: string, data: string): Promise<void>;
11
+ remove(path: string): Promise<void>;
12
+ exists(path: string): Promise<boolean>;
13
+ }
14
+ /** Load .orbit.json from a project directory. Returns null if not found or invalid. */
15
+ export declare function loadSiteLink(projectDir: string, io?: SiteIO): Promise<SiteLink | null>;
16
+ /** Save .orbit.json in a project directory. */
17
+ export declare function saveSiteLink(projectDir: string, link: SiteLink, io?: SiteIO): Promise<void>;
18
+ /** Remove .orbit.json from a project directory. */
19
+ export declare function removeSiteLink(projectDir: string, io?: SiteIO): Promise<void>;
20
+ /** Auto-detect platform based on filesystem markers. */
21
+ export declare function detectPlatform(projectDir: string, io?: SiteIO): Promise<SiteLink['platform']>;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Site linking for @orbitpanel/cli.
3
+ * Manages .orbit.json files in project roots.
4
+ */
5
+ import { readFile, writeFile, unlink, access } from 'node:fs/promises';
6
+ import { join } from 'node:path';
7
+ export const SITE_LINK_FILENAME = '.orbit.json';
8
+ const defaultIO = {
9
+ read: (path) => readFile(path, 'utf-8'),
10
+ write: (path, data) => writeFile(path, data, { encoding: 'utf-8', mode: 0o644 }),
11
+ remove: async (path) => {
12
+ try {
13
+ await unlink(path);
14
+ }
15
+ catch {
16
+ // File doesn't exist — ignore
17
+ }
18
+ },
19
+ exists: async (path) => {
20
+ try {
21
+ await access(path);
22
+ return true;
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ },
28
+ };
29
+ /** Load .orbit.json from a project directory. Returns null if not found or invalid. */
30
+ export async function loadSiteLink(projectDir, io = defaultIO) {
31
+ try {
32
+ const raw = await io.read(join(projectDir, SITE_LINK_FILENAME));
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ /** Save .orbit.json in a project directory. */
40
+ export async function saveSiteLink(projectDir, link, io = defaultIO) {
41
+ await io.write(join(projectDir, SITE_LINK_FILENAME), JSON.stringify(link, null, 2));
42
+ }
43
+ /** Remove .orbit.json from a project directory. */
44
+ export async function removeSiteLink(projectDir, io = defaultIO) {
45
+ await io.remove(join(projectDir, SITE_LINK_FILENAME));
46
+ }
47
+ /** Auto-detect platform based on filesystem markers. */
48
+ export async function detectPlatform(projectDir, io = defaultIO) {
49
+ // WordPress: wp-config.php in root
50
+ if (await io.exists(join(projectDir, 'wp-config.php'))) {
51
+ return 'wordpress';
52
+ }
53
+ // PrestaShop: config/settings.inc.php
54
+ if (await io.exists(join(projectDir, 'config/settings.inc.php'))) {
55
+ return 'prestashop';
56
+ }
57
+ return 'custom';
58
+ }
59
+ //# sourceMappingURL=site.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"site.js","sourceRoot":"","sources":["../../src/lib/site.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAUhD,MAAM,SAAS,GAAW;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAChF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,KAAa,SAAS;IAEtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,IAAc,EACd,KAAa,SAAS;IAEtB,MAAM,EAAE,CAAC,KAAK,CACZ,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,EACpC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,KAAa,SAAS;IAEtB,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,KAAa,SAAS;IAEtB,mCAAmC;IACnC,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC;QACjE,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * MCP Server for @orbitpanel/cli.
3
+ *
4
+ * Exposes 9 tools for LLM integration (Claude Code, Cursor, etc.)
5
+ * via stdio MCP protocol. Started with `orbit serve`.
6
+ */
7
+ /** Tool definition for registration. */
8
+ export interface ToolDef {
9
+ name: string;
10
+ description: string;
11
+ inputSchema: Record<string, unknown>;
12
+ }
13
+ /** Returns the 9 MCP tool definitions (schema only, no handlers). */
14
+ export declare function getToolDefinitions(): ToolDef[];
15
+ /** Start the MCP server on stdio. */
16
+ export declare function startMcpServer(): Promise<void>;
@@ -0,0 +1,319 @@
1
+ /**
2
+ * MCP Server for @orbitpanel/cli.
3
+ *
4
+ * Exposes 9 tools for LLM integration (Claude Code, Cursor, etc.)
5
+ * via stdio MCP protocol. Started with `orbit serve`.
6
+ */
7
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
+ import { OrbitClient } from '../lib/client.js';
10
+ import { loadConfig } from '../lib/config.js';
11
+ import { loadSiteLink } from '../lib/site.js';
12
+ import { createSession, loadActiveSession, addNote, endSession } from '../lib/session.js';
13
+ import { getGitBranch, getGitCommitHead, getGitDiffStat } from '../lib/git.js';
14
+ import { buildReportPayload } from '../lib/report-builder.js';
15
+ /** Returns the 9 MCP tool definitions (schema only, no handlers). */
16
+ export function getToolDefinitions() {
17
+ return [
18
+ {
19
+ name: 'orbit_session_start',
20
+ description: 'Inizia una sessione di lavoro locale. Cattura automaticamente branch git e commit corrente.',
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ note: { type: 'string', description: 'Nota iniziale sulla sessione' },
25
+ },
26
+ },
27
+ },
28
+ {
29
+ name: 'orbit_session_end',
30
+ description: 'Chiude la sessione di lavoro corrente. Cattura commit finale e calcola diff.',
31
+ inputSchema: {
32
+ type: 'object',
33
+ properties: {
34
+ summary: { type: 'string', description: 'Summary finale del lavoro svolto' },
35
+ },
36
+ },
37
+ },
38
+ {
39
+ name: 'orbit_report_send',
40
+ description: 'Crea un intervento su Orbit con i dati della sessione. Invia report_data strutturato.',
41
+ inputSchema: {
42
+ type: 'object',
43
+ required: ['title'],
44
+ properties: {
45
+ title: { type: 'string', description: 'Titolo intervento (max 300 caratteri)' },
46
+ description: { type: 'string', description: 'Descrizione completa in markdown' },
47
+ priority: { type: 'string', enum: ['LOW', 'MEDIUM', 'HIGH', 'URGENT'], description: 'Priorita (default: MEDIUM)' },
48
+ type_tag: { type: 'string', enum: ['update', 'fix', 'security', 'feature', 'optimization', 'backup'] },
49
+ status: { type: 'string', enum: ['scheduled', 'in_progress', 'completed'], description: 'Stato iniziale (default: completed)' },
50
+ report_data: { type: 'object', description: 'Dati strutturati: findings, actions_taken, blocking_issues' },
51
+ action_items: { type: 'array', items: { type: 'string' }, description: 'Lista task (generano subtask)' },
52
+ },
53
+ },
54
+ },
55
+ {
56
+ name: 'orbit_note_add',
57
+ description: 'Aggiunge una nota alla sessione corrente.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ required: ['text'],
61
+ properties: {
62
+ text: { type: 'string', description: 'Testo della nota' },
63
+ priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], description: 'Priorita (default: medium)' },
64
+ },
65
+ },
66
+ },
67
+ {
68
+ name: 'orbit_status',
69
+ description: 'Stato corrente: sessione attiva, sito collegato, connessione API.',
70
+ inputSchema: {
71
+ type: 'object',
72
+ properties: {},
73
+ },
74
+ },
75
+ {
76
+ name: 'orbit_interventions_list',
77
+ description: 'Lista interventi del sito su Orbit con filtri opzionali.',
78
+ inputSchema: {
79
+ type: 'object',
80
+ properties: {
81
+ status: { type: 'string', enum: ['scheduled', 'in_progress', 'completed', 'verified'] },
82
+ origin: { type: 'string', enum: ['manual', 'ticket', 'protocol', 'agent', 'cli'] },
83
+ type_tag: { type: 'string' },
84
+ limit: { type: 'integer', description: 'Max risultati (default: 20)' },
85
+ search: { type: 'string', description: 'Cerca nel titolo' },
86
+ },
87
+ },
88
+ },
89
+ {
90
+ name: 'orbit_intervention_get',
91
+ description: 'Dettaglio di un singolo intervento con report_data completo.',
92
+ inputSchema: {
93
+ type: 'object',
94
+ required: ['intervention_id'],
95
+ properties: {
96
+ intervention_id: { type: 'string', description: 'UUID dell\'intervento' },
97
+ },
98
+ },
99
+ },
100
+ {
101
+ name: 'orbit_intervention_update',
102
+ description: 'Aggiorna un intervento esistente (status, priority, title, description, subtasks).',
103
+ inputSchema: {
104
+ type: 'object',
105
+ required: ['intervention_id'],
106
+ properties: {
107
+ intervention_id: { type: 'string', description: 'UUID dell\'intervento' },
108
+ status: { type: 'string', enum: ['scheduled', 'in_progress', 'completed', 'verified'] },
109
+ priority: { type: 'string', enum: ['LOW', 'MEDIUM', 'HIGH', 'URGENT'] },
110
+ title: { type: 'string' },
111
+ description: { type: 'string' },
112
+ type_tag: { type: 'string' },
113
+ report_data: { type: 'object' },
114
+ },
115
+ },
116
+ },
117
+ {
118
+ name: 'orbit_intervention_delete',
119
+ description: 'Elimina un intervento (soft delete).',
120
+ inputSchema: {
121
+ type: 'object',
122
+ required: ['intervention_id'],
123
+ properties: {
124
+ intervention_id: { type: 'string', description: 'UUID dell\'intervento' },
125
+ },
126
+ },
127
+ },
128
+ ];
129
+ }
130
+ /** Start the MCP server on stdio. */
131
+ export async function startMcpServer() {
132
+ let token = process.env.MCP_TOKEN || process.env.ORBIT_MCP_TOKEN || '';
133
+ const apiUrl = process.env.ORBIT_API_URL || 'https://api.orbit.principi.it';
134
+ const localPath = process.env.ORBIT_LOCAL_PATH || process.cwd();
135
+ // Fallback: read token from config saved by `orbit login`
136
+ if (!token) {
137
+ const config = await loadConfig();
138
+ const siteId = config.default_site;
139
+ token = siteId ? (config.tokens[siteId]?.token ?? '') : '';
140
+ }
141
+ if (!token) {
142
+ console.error('[Orbit CLI MCP] ERROR: Token non trovato.\n' +
143
+ 'Opzione 1: orbit login --token orbit_mcp_xxx\n' +
144
+ 'Opzione 2: "env": { "MCP_TOKEN": "orbit_mcp_xxx" }');
145
+ process.exit(1);
146
+ }
147
+ // Load site info
148
+ const siteLink = await loadSiteLink(localPath);
149
+ const siteDomain = siteLink?.final_url ?? siteLink?.orbit_site_id ?? 'local';
150
+ const platform = siteLink?.platform ?? 'custom';
151
+ const client = new OrbitClient(token, apiUrl);
152
+ // Create MCP server
153
+ const server = new McpServer({
154
+ name: `orbit-cli-${siteDomain}`,
155
+ version: '0.1.0',
156
+ });
157
+ // Register all 9 tools
158
+ const tools = getToolDefinitions();
159
+ for (const tool of tools) {
160
+ server.tool(tool.name, tool.description, tool.inputSchema, async (args) => {
161
+ try {
162
+ const result = await handleTool(tool.name, args, {
163
+ client,
164
+ siteLink,
165
+ localPath,
166
+ });
167
+ return {
168
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
169
+ };
170
+ }
171
+ catch (err) {
172
+ const message = err instanceof Error ? err.message : String(err);
173
+ return {
174
+ content: [{ type: 'text', text: JSON.stringify({ error: message }, null, 2) }],
175
+ isError: true,
176
+ };
177
+ }
178
+ });
179
+ }
180
+ // Connect via stdio
181
+ const transport = new StdioServerTransport();
182
+ await server.connect(transport);
183
+ console.error(`[Orbit CLI MCP] Connesso: ${siteDomain} (${platform}) — ${tools.length} tool disponibili`);
184
+ }
185
+ /** Route tool calls to the appropriate handler. */
186
+ async function handleTool(name, args, ctx) {
187
+ const siteId = ctx.siteLink?.orbit_site_id;
188
+ switch (name) {
189
+ case 'orbit_session_start': {
190
+ if (!siteId)
191
+ throw new Error('Nessun sito collegato. Esegui: orbit link --site <id>');
192
+ const branch = await getGitBranch();
193
+ const commit = await getGitCommitHead();
194
+ return createSession(siteId, {
195
+ git_branch: branch ?? undefined,
196
+ git_commit: commit ?? undefined,
197
+ note: args.note,
198
+ });
199
+ }
200
+ case 'orbit_session_end': {
201
+ if (!siteId)
202
+ throw new Error('Nessun sito collegato.');
203
+ const session = await loadActiveSession(siteId);
204
+ if (!session)
205
+ throw new Error('Nessuna sessione attiva.');
206
+ const commitEnd = await getGitCommitHead();
207
+ return endSession(session.id, {
208
+ git_commit_end: commitEnd ?? undefined,
209
+ summary: args.summary,
210
+ });
211
+ }
212
+ case 'orbit_report_send': {
213
+ if (!siteId)
214
+ throw new Error('Nessun sito collegato.');
215
+ let session = await loadActiveSession(siteId);
216
+ const commitEnd = await getGitCommitHead();
217
+ let filesChanged = 0;
218
+ if (session?.git_commit_start && commitEnd) {
219
+ const diff = await getGitDiffStat(session.git_commit_start, commitEnd);
220
+ filesChanged = diff.files_changed;
221
+ }
222
+ if (session && session.status === 'active') {
223
+ session = await endSession(session.id, { git_commit_end: commitEnd ?? undefined });
224
+ }
225
+ const payload = buildReportPayload({
226
+ session: session ?? {
227
+ id: 'no-session',
228
+ site_id: siteId,
229
+ started_at: new Date().toISOString(),
230
+ notes: [],
231
+ status: 'completed',
232
+ },
233
+ title: args.title,
234
+ description: args.description,
235
+ priority: args.priority,
236
+ type_tag: args.type_tag,
237
+ git_commit_end: commitEnd ?? undefined,
238
+ files_changed: filesChanged,
239
+ });
240
+ // Merge caller-provided report_data
241
+ if (args.report_data && typeof args.report_data === 'object') {
242
+ const rd = payload.report_data;
243
+ const provided = args.report_data;
244
+ if (Array.isArray(provided.findings))
245
+ rd.findings = provided.findings;
246
+ if (Array.isArray(provided.actions_taken)) {
247
+ rd.actions_taken = [...rd.actions_taken, ...provided.actions_taken];
248
+ }
249
+ if (Array.isArray(provided.blocking_issues))
250
+ rd.blocking_issues = provided.blocking_issues;
251
+ if (provided.environment && rd.session && typeof rd.session === 'object') {
252
+ rd.session.environment = provided.environment;
253
+ }
254
+ }
255
+ payload.site_id = siteId;
256
+ return ctx.client.createIntervention(payload);
257
+ }
258
+ case 'orbit_note_add': {
259
+ if (!siteId)
260
+ throw new Error('Nessun sito collegato.');
261
+ const session = await loadActiveSession(siteId);
262
+ if (!session)
263
+ throw new Error('Nessuna sessione attiva. Chiama orbit_session_start prima.');
264
+ return addNote(session.id, args.text, args.priority ?? 'medium');
265
+ }
266
+ case 'orbit_status': {
267
+ const session = siteId ? await loadActiveSession(siteId) : null;
268
+ const validation = await ctx.client.validateToken();
269
+ return {
270
+ connected: validation.valid,
271
+ site: ctx.siteLink ? {
272
+ id: ctx.siteLink.orbit_site_id,
273
+ platform: ctx.siteLink.platform,
274
+ url: ctx.siteLink.final_url,
275
+ } : null,
276
+ session: session ? {
277
+ active: true,
278
+ id: session.id,
279
+ started_at: session.started_at,
280
+ notes_count: session.notes.length,
281
+ branch: session.git_branch,
282
+ } : { active: false },
283
+ };
284
+ }
285
+ case 'orbit_interventions_list': {
286
+ const filters = { limit: args.limit ?? 20 };
287
+ if (siteId)
288
+ filters.site_id = siteId;
289
+ if (args.status)
290
+ filters.status = args.status;
291
+ if (args.origin)
292
+ filters.origin = args.origin;
293
+ if (args.type_tag)
294
+ filters.type_tag = args.type_tag;
295
+ if (args.search)
296
+ filters.search = args.search;
297
+ return ctx.client.listInterventions(filters);
298
+ }
299
+ case 'orbit_intervention_get': {
300
+ return ctx.client.getIntervention(args.intervention_id);
301
+ }
302
+ case 'orbit_intervention_update': {
303
+ const id = args.intervention_id;
304
+ const data = {};
305
+ for (const key of ['status', 'priority', 'title', 'description', 'type_tag', 'report_data']) {
306
+ if (args[key] !== undefined)
307
+ data[key] = args[key];
308
+ }
309
+ return ctx.client.updateIntervention(id, data);
310
+ }
311
+ case 'orbit_intervention_delete': {
312
+ await ctx.client.deleteIntervention(args.intervention_id);
313
+ return { deleted: true, intervention_id: args.intervention_id };
314
+ }
315
+ default:
316
+ throw new Error(`Tool sconosciuto: ${name}`);
317
+ }
318
+ }
319
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @orbitpanel/cli — Type definitions
3
+ */
4
+ /** Configuration stored in ~/.orbit/config.json */
5
+ export interface OrbitConfig {
6
+ api_url: string;
7
+ tokens: Record<string, TokenEntry>;
8
+ default_site?: string;
9
+ }
10
+ /** Single token entry in config */
11
+ export interface TokenEntry {
12
+ token: string;
13
+ label: string;
14
+ site_id: string;
15
+ created_at: string;
16
+ }
17
+ /** .orbit.json file in project root (committable) */
18
+ export interface SiteLink {
19
+ orbit_site_id: string;
20
+ platform: 'wordpress' | 'prestashop' | 'custom';
21
+ final_url?: string;
22
+ }
23
+ /** Local session state */
24
+ export interface SessionState {
25
+ id: string;
26
+ site_id: string;
27
+ started_at: string;
28
+ ended_at?: string;
29
+ git_branch?: string;
30
+ git_commit_start?: string;
31
+ git_commit_end?: string;
32
+ summary?: string;
33
+ notes: SessionNote[];
34
+ status: 'active' | 'completed';
35
+ }
36
+ /** Single note in a session */
37
+ export interface SessionNote {
38
+ text: string;
39
+ timestamp: string;
40
+ priority: 'low' | 'medium' | 'high' | 'critical';
41
+ }
42
+ /** Intervention from Orbit API */
43
+ export interface Intervention {
44
+ id: string;
45
+ tenant_id: string;
46
+ site_id: string;
47
+ origin: string;
48
+ status: string;
49
+ priority: string;
50
+ title: string;
51
+ description?: string;
52
+ type_tag?: string;
53
+ created_at: string;
54
+ updated_at: string;
55
+ }
56
+ /** API error response */
57
+ export interface ApiErrorResponse {
58
+ detail?: string;
59
+ message?: string;
60
+ }
61
+ /** Validation result from token check */
62
+ export interface TokenValidation {
63
+ valid: boolean;
64
+ user_email?: string;
65
+ tenant_name?: string;
66
+ site_domain?: string;
67
+ error?: string;
68
+ }
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @orbitpanel/cli — Type definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}