runpane 2.4.129 → 2.4.131

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 (46) hide show
  1. package/README.md +13 -0
  2. package/dist/agentTasks.d.ts +8 -0
  3. package/dist/agentTasks.d.ts.map +1 -0
  4. package/dist/agentTasks.js +123 -0
  5. package/dist/agentTasks.js.map +1 -0
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +30 -0
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands.d.ts +7 -0
  10. package/dist/commands.d.ts.map +1 -1
  11. package/dist/commands.js +73 -10
  12. package/dist/commands.js.map +1 -1
  13. package/dist/daemonActions.d.ts +16 -0
  14. package/dist/daemonActions.d.ts.map +1 -0
  15. package/dist/daemonActions.js +98 -0
  16. package/dist/daemonActions.js.map +1 -0
  17. package/dist/docs-index.json +1 -0
  18. package/dist/docs.d.ts +18 -0
  19. package/dist/docs.d.ts.map +1 -0
  20. package/dist/docs.js +123 -0
  21. package/dist/docs.js.map +1 -0
  22. package/dist/generated/contract.d.ts +1337 -12
  23. package/dist/generated/contract.d.ts.map +1 -1
  24. package/dist/generated/contract.js +3763 -1121
  25. package/dist/generated/contract.js.map +1 -1
  26. package/dist/links.d.ts +13 -0
  27. package/dist/links.d.ts.map +1 -0
  28. package/dist/links.js +57 -0
  29. package/dist/links.js.map +1 -0
  30. package/dist/localControl.d.ts +220 -1
  31. package/dist/localControl.d.ts.map +1 -1
  32. package/dist/localControl.js +36 -18
  33. package/dist/localControl.js.map +1 -1
  34. package/dist/mcp.d.ts +12 -0
  35. package/dist/mcp.d.ts.map +1 -0
  36. package/dist/mcp.js +189 -0
  37. package/dist/mcp.js.map +1 -0
  38. package/dist/mcpSdk.d.ts +3 -0
  39. package/dist/mcpSdk.d.ts.map +1 -0
  40. package/dist/mcpSdk.js +74 -0
  41. package/dist/mcpSdk.js.LEGAL.txt +8 -0
  42. package/dist/mcpTools.d.ts +78 -0
  43. package/dist/mcpTools.d.ts.map +1 -0
  44. package/dist/mcpTools.js +195 -0
  45. package/dist/mcpTools.js.map +1 -0
  46. package/package.json +5 -2
package/dist/docs.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import type { ParsedArgs } from './commands';
2
+ type DocKind = 'doc' | 'skill' | 'help' | 'command';
3
+ interface DocEntry {
4
+ path: string;
5
+ title: string;
6
+ kind: DocKind;
7
+ text: string;
8
+ }
9
+ /**
10
+ * Everything `docs search` covers: docs/*.md (indexed at build time next to this file),
11
+ * runpane help topics and per-command context from the contract, and the Pane Chat
12
+ * skills the Pane app installed in its data directory.
13
+ */
14
+ export declare function loadDocs(paneDir: string | undefined): DocEntry[];
15
+ export declare function runDocsSearch(parsed: ParsedArgs): number;
16
+ export declare function runDocsRead(parsed: ParsedArgs): number;
17
+ export {};
18
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpD,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,CAiChE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAmBxD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAatD"}
package/dist/docs.js ADDED
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadDocs = loadDocs;
7
+ exports.runDocsSearch = runDocsSearch;
8
+ exports.runDocsRead = runDocsRead;
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_os_1 = __importDefault(require("node:os"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const boundaryDecoder_1 = require("./boundaryDecoder");
13
+ const contract_1 = require("./generated/contract");
14
+ const indexedDocSchema = boundaryDecoder_1.boundary.array(boundaryDecoder_1.boundary.object({ path: boundaryDecoder_1.boundary.string, title: boundaryDecoder_1.boundary.string, text: boundaryDecoder_1.boundary.string }));
15
+ const DEFAULT_LIMIT = 5;
16
+ const EXCERPT_CHARS = 240;
17
+ /**
18
+ * Everything `docs search` covers: docs/*.md (indexed at build time next to this file),
19
+ * runpane help topics and per-command context from the contract, and the Pane Chat
20
+ * skills the Pane app installed in its data directory.
21
+ */
22
+ function loadDocs(paneDir) {
23
+ const entries = [];
24
+ const indexFile = node_path_1.default.join(__dirname, 'docs-index.json');
25
+ if (node_fs_1.default.existsSync(indexFile)) {
26
+ for (const doc of (0, boundaryDecoder_1.decodeBoundary)(JSON.parse(node_fs_1.default.readFileSync(indexFile, 'utf8')), indexedDocSchema)) {
27
+ entries.push({ ...doc, kind: 'doc' });
28
+ }
29
+ }
30
+ for (const [topic, lines] of Object.entries(contract_1.RUNPANE_CONTRACT.help.npm)) {
31
+ entries.push({ path: `help/${topic}`, title: `runpane help ${topic}`, kind: 'help', text: lines.join('\n') });
32
+ }
33
+ for (const command of Object.values(contract_1.RUNPANE_CONTRACT.agentContext.commands)) {
34
+ const text = [
35
+ command.summary,
36
+ command.details,
37
+ ...command.arguments.map((arg) => `${arg.name}${'value' in arg ? ` ${arg.value}` : ''}: ${arg.description}`),
38
+ ...('notes' in command ? command.notes : []),
39
+ ...command.examples,
40
+ ].join('\n');
41
+ entries.push({ path: `command/${command.name}`, title: `runpane ${command.name}`, kind: 'command', text });
42
+ }
43
+ const skillsDir = node_path_1.default.join(paneDir ?? process.env.PANE_DIR ?? node_path_1.default.join(node_os_1.default.homedir(), '.pane'), 'skills', 'pane-chat');
44
+ for (const [dir, prefix] of [[node_path_1.default.join(skillsDir, 'skills'), 'skills'], [skillsDir, 'skills']]) {
45
+ if (!node_fs_1.default.existsSync(dir))
46
+ continue;
47
+ for (const name of node_fs_1.default.readdirSync(dir).sort()) {
48
+ const file = node_path_1.default.join(dir, name, 'SKILL.md');
49
+ if (!node_fs_1.default.existsSync(file) || entries.some((entry) => entry.path === `${prefix}/${name}/SKILL.md`))
50
+ continue;
51
+ const text = node_fs_1.default.readFileSync(file, 'utf8');
52
+ const description = /^description:\s*"?(.+?)"?\s*$/m.exec(text);
53
+ entries.push({ path: `${prefix}/${name}/SKILL.md`, title: description ? `${name}: ${description[1]}` : name, kind: 'skill', text });
54
+ }
55
+ }
56
+ return entries;
57
+ }
58
+ function runDocsSearch(parsed) {
59
+ const query = parsed.query?.trim();
60
+ if (!query)
61
+ throw new Error('runpane docs search requires --query.');
62
+ const terms = [...new Set(query.toLowerCase().split(/[^a-z0-9]+/).filter((term) => term.length >= 2))];
63
+ const limit = Math.min(parsed.limit ?? DEFAULT_LIMIT, 20);
64
+ const results = loadDocs(parsed.paneDir)
65
+ .map((doc) => ({ doc, score: score(doc, terms) }))
66
+ .filter((hit) => hit.score > 0)
67
+ .sort((a, b) => b.score - a.score || a.doc.path.localeCompare(b.doc.path))
68
+ .slice(0, limit)
69
+ .map(({ doc }) => ({ path: doc.path, title: doc.title, kind: doc.kind, excerpt: excerpt(doc.text, terms) }));
70
+ if (parsed.json) {
71
+ console.log(JSON.stringify({ ok: true, query, results }, null, 2));
72
+ }
73
+ else if (results.length === 0) {
74
+ console.log(`No Pane docs match "${query}". Try fewer or different words.`);
75
+ }
76
+ else {
77
+ for (const result of results)
78
+ console.log(`${result.path}\t${result.title}\n ${result.excerpt}\n`);
79
+ }
80
+ return 0;
81
+ }
82
+ function runDocsRead(parsed) {
83
+ const wanted = parsed.doc?.trim().replace(/^\/+/, '');
84
+ if (!wanted)
85
+ throw new Error('runpane docs read requires --doc.');
86
+ const doc = loadDocs(parsed.paneDir).find((entry) => entry.path === wanted);
87
+ if (!doc) {
88
+ throw new Error(`No Pane doc at "${wanted}". Run \`runpane docs search --query <words>\` and use a path it returns.`);
89
+ }
90
+ if (parsed.json) {
91
+ console.log(JSON.stringify({ ok: true, path: doc.path, title: doc.title, kind: doc.kind, text: doc.text }, null, 2));
92
+ }
93
+ else {
94
+ console.log(doc.text);
95
+ }
96
+ return 0;
97
+ }
98
+ function score(doc, terms) {
99
+ if (terms.length === 0)
100
+ return 0;
101
+ const heading = `${doc.path} ${doc.title}`.toLowerCase();
102
+ const text = doc.text.toLowerCase();
103
+ let total = 0;
104
+ let matched = 0;
105
+ for (const term of terms) {
106
+ // A word in the title or path says what the doc is about; repeats in a long body say little.
107
+ const inHeading = heading.includes(term) ? 8 : 0;
108
+ const inText = Math.min(text.split(term).length - 1, 3);
109
+ if (inHeading + inText > 0)
110
+ matched++;
111
+ total += inHeading + inText;
112
+ }
113
+ return total + (matched === terms.length ? 10 : 0) - (terms.length - matched) * 4;
114
+ }
115
+ function excerpt(text, terms) {
116
+ const lower = text.toLowerCase();
117
+ const positions = terms.map((term) => lower.indexOf(term)).filter((position) => position >= 0);
118
+ const at = positions.length > 0 ? Math.min(...positions) : 0;
119
+ const start = Math.max(0, at - EXCERPT_CHARS / 3);
120
+ const slice = text.slice(start, start + EXCERPT_CHARS).replace(/\s+/g, ' ').trim();
121
+ return `${start > 0 ? '…' : ''}${slice}${start + EXCERPT_CHARS < text.length ? '…' : ''}`;
122
+ }
123
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"}