@amaster.ai/pi-attachments 0.1.2-beta.11 → 0.1.2-beta.13
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 +58 -0
- package/dist/classify.d.ts.map +1 -1
- package/dist/classify.js +70 -4
- package/dist/classify.js.map +1 -1
- package/dist/extension.d.ts +19 -0
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +126 -25
- package/dist/extension.js.map +1 -1
- package/package.json +4 -2
package/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# @amaster.ai/pi-attachments
|
|
2
|
+
|
|
3
|
+
Pi extension that intercepts user input, resolves `@`-references to local resources, and injects their content into the prompt before the model sees it.
|
|
4
|
+
|
|
5
|
+
Hooks the `input` event of `@earendil-works/pi-coding-agent`. When a recognized mention appears in the user message, the original mention is stripped and replaced with structured context (skill block, attachment listing, or `<system-reminder>`). Image attachments are passed through as multimodal `ImageContent`.
|
|
6
|
+
|
|
7
|
+
## Recognized mentions
|
|
8
|
+
|
|
9
|
+
| Syntax | Resolves to |
|
|
10
|
+
|---------------------------------|-------------------------------------------------------------------|
|
|
11
|
+
| `@path/to/file.ts` | File contents (text/doc) or base64 image |
|
|
12
|
+
| `@"/path with spaces/file.pdf"` | Same as above, supports whitespace in paths |
|
|
13
|
+
| `@path/to/file.ts#L10-20` | Line range syntax preserved in the reference (range applied downstream) |
|
|
14
|
+
| `@path/to/dir` | Directory listing (files + subdirs, ignores `.git`/`node_modules`/build outputs) |
|
|
15
|
+
| `@skill:<name>` | Loads `SKILL.md` for a registered skill |
|
|
16
|
+
|
|
17
|
+
`@http(s)://...` is **not** treated as a file reference. Unknown namespaces (e.g. `@app:erp-prod`) are left alone — neither resolved as a skill nor as a file.
|
|
18
|
+
|
|
19
|
+
## Skill resolution
|
|
20
|
+
|
|
21
|
+
`@skill:<name>` searches in this order, first hit wins:
|
|
22
|
+
|
|
23
|
+
1. `<cwd>/.pi/skills/<name>/SKILL.md` — project-level skill
|
|
24
|
+
2. `<agentDir>/skills/<name>/SKILL.md` — user-level skill (resolved via `@amaster.ai/pi-shared`'s `resolveAgentDir()`, override with `PI_AGENT_HOME`)
|
|
25
|
+
|
|
26
|
+
The order matches `loadSkillsFromAllLocations` in the pi-coding-agent SDK so a project skill overrides a user-installed one. Frontmatter is stripped; the body is wrapped in `<skill name="..." location="...">…</skill>` and prepended to the user message.
|
|
27
|
+
|
|
28
|
+
## Output assembly
|
|
29
|
+
|
|
30
|
+
When at least one mention resolves, the input is rewritten as three optional segments in this order:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
<skill name="..." location="...">…</skill> ← skill blocks (if any)
|
|
34
|
+
|
|
35
|
+
<original user text with mentions stripped>
|
|
36
|
+
|
|
37
|
+
<system-reminder>
|
|
38
|
+
## file.ts: /abs/path/file.ts
|
|
39
|
+
```text
|
|
40
|
+
…contents…
|
|
41
|
+
```
|
|
42
|
+
</system-reminder>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Pure-text inputs with no resolvable mentions are left untouched (handler returns `undefined`).
|
|
46
|
+
|
|
47
|
+
## Configuration
|
|
48
|
+
|
|
49
|
+
| Env var | Default | Meaning |
|
|
50
|
+
|----------------------------------|-------------|----------------------------------------------------------|
|
|
51
|
+
| `PI_ATTACHMENT_MAX_TEXT_CHARS` | `128000` | Max chars per text/doc attachment before truncation |
|
|
52
|
+
| `PI_AGENT_HOME` | (from pi-shared) | Override for user-level skill search root |
|
|
53
|
+
|
|
54
|
+
## Limits
|
|
55
|
+
|
|
56
|
+
- **Directory listing**: capped at 200 entries per directory; remainder is summarized as `[Listing truncated: showing 200 of N entries]`.
|
|
57
|
+
- **Ignored directory entries**: `.git`, `node_modules`, `.DS_Store`, `.next`, `.turbo`, `dist`, `build`, `.cache`.
|
|
58
|
+
- **Mention ordering**: skills are matched before files, so the resolved `mentions[]` array groups by kind rather than preserving textual order. Downstream consumers must not rely on textual order.
|
package/dist/classify.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAyEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CA+BzF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,SAAS,CAoBpB;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,cAAc,EAC1B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CA8BjB;AAyED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,cAAc,EAAE,EAC7B,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3D,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B"}
|
package/dist/classify.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
import { readFile } from 'node:fs/promises';
|
|
1
|
+
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
5
3
|
const TEXT_FILE_EXTENSIONS = /\.(csv|tsv|json|jsonl|md|markdown|mdx|txt|html|htm|xml|svg|ya?ml|js|jsx|ts|tsx|mjs|cjs|mts|cts|css|scss|sass|less|sql|log|sh|bash|zsh|fish|py|rb|go|rs|java|kt|kts|scala|swift|m|mm|c|h|hh|hpp|cpp|cxx|cc|cs|php|r|lua|toml|ini|cfg|conf|env|gitignore|dockerfile|makefile|gradle|properties|tf|hcl|nix|patch|diff|proto|graphql|gql)$/i;
|
|
6
4
|
const DOC_EXTENSIONS = /\.(pdf|docx|doc|pptx|ppt|xlsx|xls)$/i;
|
|
7
5
|
const FENCE_BY_EXT = {
|
|
@@ -135,6 +133,9 @@ export async function renderAttachmentBlock(attachment, maxTextChars) {
|
|
|
135
133
|
if (kind === 'image') {
|
|
136
134
|
return `## ${name}${fsPath ? `: ${fsPath}` : ''}`;
|
|
137
135
|
}
|
|
136
|
+
if (mimeType === 'inode/directory' && fsPath) {
|
|
137
|
+
return await renderDirectoryBlock(name, fsPath, maxTextChars);
|
|
138
|
+
}
|
|
138
139
|
if (kind === 'text' && fsPath) {
|
|
139
140
|
try {
|
|
140
141
|
const buffer = await readFile(fsPath, 'utf8');
|
|
@@ -153,6 +154,71 @@ export async function renderAttachmentBlock(attachment, maxTextChars) {
|
|
|
153
154
|
}
|
|
154
155
|
return `## ${name}${fsPath ? `: ${fsPath}` : url ? `: ${url}` : ''}`;
|
|
155
156
|
}
|
|
157
|
+
const DIRECTORY_LISTING_LIMIT = 200;
|
|
158
|
+
const DIRECTORY_IGNORE = new Set([
|
|
159
|
+
'.git',
|
|
160
|
+
'node_modules',
|
|
161
|
+
'.DS_Store',
|
|
162
|
+
'.next',
|
|
163
|
+
'.turbo',
|
|
164
|
+
'dist',
|
|
165
|
+
'build',
|
|
166
|
+
'.cache',
|
|
167
|
+
]);
|
|
168
|
+
async function renderDirectoryBlock(name, fsPath, maxTextChars) {
|
|
169
|
+
const heading = `## ${name}: ${fsPath} (directory)`;
|
|
170
|
+
let entries;
|
|
171
|
+
try {
|
|
172
|
+
entries = await readdir(fsPath, { withFileTypes: true });
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
return `${heading}\n[Failed to list directory: ${error.message}]`;
|
|
176
|
+
}
|
|
177
|
+
const filtered = entries
|
|
178
|
+
.filter((e) => !DIRECTORY_IGNORE.has(e.name))
|
|
179
|
+
.sort((a, b) => {
|
|
180
|
+
const ad = a.isDirectory() ? 0 : 1;
|
|
181
|
+
const bd = b.isDirectory() ? 0 : 1;
|
|
182
|
+
if (ad !== bd)
|
|
183
|
+
return ad - bd;
|
|
184
|
+
return a.name.localeCompare(b.name);
|
|
185
|
+
});
|
|
186
|
+
const truncatedNote = filtered.length > DIRECTORY_LISTING_LIMIT
|
|
187
|
+
? `\n[Listing truncated: showing ${DIRECTORY_LISTING_LIMIT} of ${filtered.length} entries]`
|
|
188
|
+
: '';
|
|
189
|
+
const slice = filtered.slice(0, DIRECTORY_LISTING_LIMIT);
|
|
190
|
+
const lines = [];
|
|
191
|
+
for (const entry of slice) {
|
|
192
|
+
if (entry.isDirectory()) {
|
|
193
|
+
lines.push(`${entry.name}/`);
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (entry.isSymbolicLink()) {
|
|
197
|
+
lines.push(`${entry.name}@`);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
let size;
|
|
201
|
+
try {
|
|
202
|
+
const s = await stat(path.join(fsPath, entry.name));
|
|
203
|
+
size = s.size;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
// ignore
|
|
207
|
+
}
|
|
208
|
+
lines.push(size !== undefined ? `${entry.name} (${formatBytes(size)})` : entry.name);
|
|
209
|
+
}
|
|
210
|
+
const body = truncateText(lines.join('\n'), maxTextChars);
|
|
211
|
+
return `${heading}\n\`\`\`\n${body}\n\`\`\`${truncatedNote}`;
|
|
212
|
+
}
|
|
213
|
+
function formatBytes(bytes) {
|
|
214
|
+
if (bytes < 1024)
|
|
215
|
+
return `${bytes}B`;
|
|
216
|
+
if (bytes < 1024 * 1024)
|
|
217
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
218
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
219
|
+
return `${(bytes / 1024 / 1024).toFixed(1)}MB`;
|
|
220
|
+
return `${(bytes / 1024 / 1024 / 1024).toFixed(1)}GB`;
|
|
221
|
+
}
|
|
156
222
|
export async function renderAttachmentContext(attachments, options = {}) {
|
|
157
223
|
const maxTextChars = options.maxTextChars ?? 128_000;
|
|
158
224
|
const fileAttachments = attachments.filter((a) => classifyAttachment(a.name, a.mimeType) !== 'image');
|
package/dist/classify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../src/classify.ts"],"names":[],"mappings":"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"}
|
package/dist/extension.d.ts
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
1
|
import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
|
|
2
|
+
type Mention = {
|
|
3
|
+
kind: 'skill';
|
|
4
|
+
name: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'file';
|
|
7
|
+
ref: string;
|
|
8
|
+
};
|
|
2
9
|
export default function piAttachmentsExtension(pi: ExtensionAPI): void;
|
|
10
|
+
export declare function extractMentions(content: string): {
|
|
11
|
+
mentions: Mention[];
|
|
12
|
+
raw: string[];
|
|
13
|
+
};
|
|
14
|
+
export declare function stripMentions(content: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Search order for `@skill:<name>`: project-level (`<cwd>/.pi/skills`) before
|
|
17
|
+
* user-level (`<agentDir>/skills`). Matches `loadSkillsFromAllLocations` in
|
|
18
|
+
* the pi-coding-agent SDK so a project skill overrides a user-installed one.
|
|
19
|
+
*/
|
|
20
|
+
export declare function skillSearchPaths(name: string, cwd: string): string[];
|
|
21
|
+
export {};
|
|
3
22
|
//# sourceMappingURL=extension.d.ts.map
|
package/dist/extension.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,iCAAiC,CAAC;AAUtF,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA+FrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,CAiDvF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMrD;AAuBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIpE"}
|
package/dist/extension.js
CHANGED
|
@@ -1,32 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pi Attachments Extension
|
|
3
3
|
*
|
|
4
|
-
* Intercepts user input containing
|
|
5
|
-
*
|
|
6
|
-
* Image files are encoded as base64 ImageContent for multimodal input.
|
|
4
|
+
* Intercepts user input containing @-references, reads referenced resources,
|
|
5
|
+
* and injects their content into the prompt as context.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
7
|
+
* Recognized references:
|
|
8
|
+
* - @skill:<name> — load SKILL.md for a registered skill (project > user > global agent dir)
|
|
9
9
|
* - @path/to/file.ts — unquoted file reference
|
|
10
10
|
* - @"/path with spaces/file.pdf" — quoted file reference
|
|
11
11
|
* - @file.ts#L10-20 — line range (parsed but range applied by LLM tools)
|
|
12
|
+
*
|
|
13
|
+
* Image files are encoded as base64 ImageContent for multimodal input.
|
|
12
14
|
*/
|
|
13
|
-
import {
|
|
15
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
14
16
|
import path from 'node:path';
|
|
17
|
+
import { resolveAgentDir } from '@amaster.ai/pi-shared/settings';
|
|
15
18
|
import { classifyAttachment, renderAttachmentContext } from './classify.js';
|
|
19
|
+
const SKILL_NAMESPACE = 'skill';
|
|
20
|
+
const NAMESPACE_AT_RE = /(^|\s)@([a-z][a-z0-9_-]*):([^\s@"]+)/gi;
|
|
16
21
|
const QUOTED_AT_RE = /(^|\s)@"([^"]+)"/g;
|
|
17
22
|
const REGULAR_AT_RE = /(^|\s)@([^\s@"]+)/g;
|
|
18
23
|
export default function piAttachmentsExtension(pi) {
|
|
19
24
|
const maxTextChars = Number(process.env.PI_ATTACHMENT_MAX_TEXT_CHARS) || 128_000;
|
|
20
25
|
pi.on('input', async (event, ctx) => {
|
|
21
|
-
const mentions =
|
|
26
|
+
const { mentions } = extractMentions(event.text);
|
|
22
27
|
if (mentions.length === 0)
|
|
23
28
|
return;
|
|
24
29
|
const cwd = ctx.cwd;
|
|
25
30
|
const attachments = [];
|
|
26
31
|
const images = [...(event.images ?? [])];
|
|
32
|
+
const skillBlocks = [];
|
|
27
33
|
const resolvedPaths = new Set();
|
|
34
|
+
const resolvedSkills = new Set();
|
|
28
35
|
for (const mention of mentions) {
|
|
29
|
-
|
|
36
|
+
if (mention.kind === 'skill') {
|
|
37
|
+
if (resolvedSkills.has(mention.name))
|
|
38
|
+
continue;
|
|
39
|
+
resolvedSkills.add(mention.name);
|
|
40
|
+
const block = await loadSkillBlock(mention.name, cwd);
|
|
41
|
+
if (block)
|
|
42
|
+
skillBlocks.push(block);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const { filename } = parseFileReference(mention.ref);
|
|
30
46
|
const absolutePath = path.isAbsolute(filename) ? filename : path.resolve(cwd, filename);
|
|
31
47
|
if (resolvedPaths.has(absolutePath))
|
|
32
48
|
continue;
|
|
@@ -34,7 +50,6 @@ export default function piAttachmentsExtension(pi) {
|
|
|
34
50
|
try {
|
|
35
51
|
const stats = await stat(absolutePath);
|
|
36
52
|
if (stats.isDirectory()) {
|
|
37
|
-
const entries = await readdir(absolutePath);
|
|
38
53
|
attachments.push({
|
|
39
54
|
id: absolutePath,
|
|
40
55
|
name: path.basename(absolutePath),
|
|
@@ -73,17 +88,24 @@ export default function piAttachmentsExtension(pi) {
|
|
|
73
88
|
// skip files that don't exist or can't be accessed
|
|
74
89
|
}
|
|
75
90
|
}
|
|
76
|
-
if (attachments.length === 0 &&
|
|
91
|
+
if (attachments.length === 0 &&
|
|
92
|
+
skillBlocks.length === 0 &&
|
|
93
|
+
images.length === (event.images?.length ?? 0)) {
|
|
77
94
|
return;
|
|
78
95
|
}
|
|
79
|
-
const cleanText =
|
|
96
|
+
const cleanText = stripMentions(event.text);
|
|
80
97
|
const context = await renderAttachmentContext(attachments, {
|
|
81
98
|
maxTextChars,
|
|
82
99
|
hasImages: images.length > 0,
|
|
83
100
|
});
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
101
|
+
const parts = [];
|
|
102
|
+
if (skillBlocks.length > 0)
|
|
103
|
+
parts.push(skillBlocks.join('\n\n'));
|
|
104
|
+
if (cleanText)
|
|
105
|
+
parts.push(cleanText);
|
|
106
|
+
if (context)
|
|
107
|
+
parts.push(`<system-reminder>\n${context}\n</system-reminder>`);
|
|
108
|
+
const text = parts.join('\n\n');
|
|
87
109
|
return {
|
|
88
110
|
action: 'transform',
|
|
89
111
|
text,
|
|
@@ -91,27 +113,60 @@ export default function piAttachmentsExtension(pi) {
|
|
|
91
113
|
};
|
|
92
114
|
});
|
|
93
115
|
}
|
|
94
|
-
function
|
|
116
|
+
export function extractMentions(content) {
|
|
95
117
|
const mentions = [];
|
|
96
|
-
const
|
|
118
|
+
const raw = [];
|
|
119
|
+
const seenSkills = new Set();
|
|
120
|
+
const seenFiles = new Set();
|
|
121
|
+
const namespaceSpans = [];
|
|
122
|
+
for (const match of content.matchAll(NAMESPACE_AT_RE)) {
|
|
123
|
+
const ns = match[2].toLowerCase();
|
|
124
|
+
const value = match[3];
|
|
125
|
+
const start = match.index + (match[1]?.length ?? 0);
|
|
126
|
+
namespaceSpans.push([start, start + 1 + ns.length + 1 + value.length]);
|
|
127
|
+
if (ns === SKILL_NAMESPACE) {
|
|
128
|
+
if (!seenSkills.has(value)) {
|
|
129
|
+
seenSkills.add(value);
|
|
130
|
+
mentions.push({ kind: 'skill', name: value });
|
|
131
|
+
raw.push(`@${ns}:${value}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const isInsideNamespace = (start, end) => namespaceSpans.some(([s, e]) => start >= s && end <= e);
|
|
97
136
|
for (const match of content.matchAll(QUOTED_AT_RE)) {
|
|
98
137
|
const value = match[2];
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
138
|
+
const start = match.index + (match[1]?.length ?? 0);
|
|
139
|
+
const end = start + 2 + value.length + 1;
|
|
140
|
+
if (isInsideNamespace(start, end))
|
|
141
|
+
continue;
|
|
142
|
+
if (!seenFiles.has(value)) {
|
|
143
|
+
seenFiles.add(value);
|
|
144
|
+
mentions.push({ kind: 'file', ref: value });
|
|
145
|
+
raw.push(`@"${value}"`);
|
|
102
146
|
}
|
|
103
147
|
}
|
|
104
148
|
for (const match of content.matchAll(REGULAR_AT_RE)) {
|
|
105
149
|
const value = match[2];
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
150
|
+
const start = match.index + (match[1]?.length ?? 0);
|
|
151
|
+
const end = start + 1 + value.length;
|
|
152
|
+
if (isInsideNamespace(start, end))
|
|
153
|
+
continue;
|
|
154
|
+
if (value.startsWith('http'))
|
|
155
|
+
continue;
|
|
156
|
+
if (seenFiles.has(value))
|
|
157
|
+
continue;
|
|
158
|
+
seenFiles.add(value);
|
|
159
|
+
mentions.push({ kind: 'file', ref: value });
|
|
160
|
+
raw.push(`@${value}`);
|
|
110
161
|
}
|
|
111
|
-
return mentions;
|
|
162
|
+
return { mentions, raw };
|
|
112
163
|
}
|
|
113
|
-
function
|
|
114
|
-
return content
|
|
164
|
+
export function stripMentions(content) {
|
|
165
|
+
return content
|
|
166
|
+
.replace(NAMESPACE_AT_RE, '$1')
|
|
167
|
+
.replace(QUOTED_AT_RE, '$1')
|
|
168
|
+
.replace(REGULAR_AT_RE, '$1')
|
|
169
|
+
.trim();
|
|
115
170
|
}
|
|
116
171
|
function parseFileReference(mention) {
|
|
117
172
|
const hashIdx = mention.indexOf('#L');
|
|
@@ -129,6 +184,52 @@ function parseFileReference(mention) {
|
|
|
129
184
|
...(lineEnd ? { lineEnd } : {}),
|
|
130
185
|
};
|
|
131
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Search order for `@skill:<name>`: project-level (`<cwd>/.pi/skills`) before
|
|
189
|
+
* user-level (`<agentDir>/skills`). Matches `loadSkillsFromAllLocations` in
|
|
190
|
+
* the pi-coding-agent SDK so a project skill overrides a user-installed one.
|
|
191
|
+
*/
|
|
192
|
+
export function skillSearchPaths(name, cwd) {
|
|
193
|
+
const projectDir = path.resolve(cwd, '.pi', 'skills', name);
|
|
194
|
+
const userDir = path.resolve(resolveAgentDir(), 'skills', name);
|
|
195
|
+
return [projectDir, userDir].map((dir) => path.join(dir, 'SKILL.md'));
|
|
196
|
+
}
|
|
197
|
+
async function loadSkillBlock(name, cwd) {
|
|
198
|
+
for (const filePath of skillSearchPaths(name, cwd)) {
|
|
199
|
+
try {
|
|
200
|
+
const content = await readFile(filePath, 'utf8');
|
|
201
|
+
const baseDir = path.dirname(filePath);
|
|
202
|
+
const body = stripFrontmatter(content).trim();
|
|
203
|
+
return [
|
|
204
|
+
`<skill name="${escapeXmlAttribute(name)}" location="${escapeXmlAttribute(filePath)}">`,
|
|
205
|
+
`References are relative to ${baseDir}.`,
|
|
206
|
+
'',
|
|
207
|
+
body,
|
|
208
|
+
'</skill>',
|
|
209
|
+
].join('\n');
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// try next candidate
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
function stripFrontmatter(content) {
|
|
218
|
+
if (!content.startsWith('---'))
|
|
219
|
+
return content;
|
|
220
|
+
const close = content.indexOf('\n---', 3);
|
|
221
|
+
if (close === -1)
|
|
222
|
+
return content;
|
|
223
|
+
const after = close + '\n---'.length;
|
|
224
|
+
return content.slice(content[after] === '\n' ? after + 1 : after);
|
|
225
|
+
}
|
|
226
|
+
function escapeXmlAttribute(value) {
|
|
227
|
+
return value
|
|
228
|
+
.replace(/&/g, '&')
|
|
229
|
+
.replace(/"/g, '"')
|
|
230
|
+
.replace(/</g, '<')
|
|
231
|
+
.replace(/>/g, '>');
|
|
232
|
+
}
|
|
132
233
|
const MIME_BY_EXT = {
|
|
133
234
|
png: 'image/png',
|
|
134
235
|
jpg: 'image/jpeg',
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-attachments",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.13",
|
|
4
4
|
"description": "Pi extension for attachment processing — classifies, parses, and renders file attachments into LLM-visible prompt context",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
"url": "https://github.com/TGYD-helige/pi.git",
|
|
42
42
|
"directory": "packages/pi-attachments"
|
|
43
43
|
},
|
|
44
|
-
"dependencies": {
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@amaster.ai/pi-shared": "0.1.2-beta.13"
|
|
46
|
+
},
|
|
45
47
|
"peerDependencies": {
|
|
46
48
|
"@earendil-works/pi-coding-agent": ">=0.74.0"
|
|
47
49
|
},
|