@agentkitforge/core 0.1.0 → 0.2.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.
- package/CHANGELOG.md +49 -35
- package/README.md +303 -301
- package/dist/app/loadAsDraft.js +3 -14
- package/dist/app/loadAsDraft.js.map +1 -1
- package/dist/export/onefile.js +22 -39
- package/dist/export/onefile.js.map +1 -1
- package/dist/fs/safety.js +17 -4
- package/dist/fs/safety.js.map +1 -1
- package/package.json +25 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,35 +1,49 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to AgentKitForge Core will be documented in this file.
|
|
4
|
-
|
|
5
|
-
This project follows Semantic Versioning. Before `
|
|
6
|
-
|
|
7
|
-
## Unreleased
|
|
8
|
-
|
|
9
|
-
- Added open-source governance, security, contribution, versioning, release, spec, and CLI documentation.
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
### Features
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to AgentKitForge Core will be documented in this file.
|
|
4
|
+
|
|
5
|
+
This project follows Semantic Versioning. Before `1.0.0`, minor versions may include breaking changes.
|
|
6
|
+
|
|
7
|
+
## Unreleased
|
|
8
|
+
|
|
9
|
+
- Added open-source governance, security, contribution, versioning, release, spec, and CLI documentation.
|
|
10
|
+
|
|
11
|
+
## [0.2.0](https://github.com/AgentKitProject/agentkitforge-core/compare/v0.1.1...v0.2.0) (2026-05-31)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* harden core cross-platform path handling ([a48650e](https://github.com/AgentKitProject/agentkitforge-core/commit/a48650ec907b954e7f07cab296e33fb9855bd508))
|
|
17
|
+
|
|
18
|
+
## [0.1.1](https://github.com/AgentKitProject/agentkitforge-core/compare/v0.1.0...v0.1.1) (2026-05-29)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* make core installable from source package installs ([cd63497](https://github.com/AgentKitProject/agentkitforge-core/commit/cd63497006194ef05b626e64b65f8ea24862eee2))
|
|
24
|
+
|
|
25
|
+
## 1.0.0 (2026-05-29)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
|
|
30
|
+
* prepare initial public preview ([61e8d7d](https://github.com/AgentKitProject/agentkitforge-core/commit/61e8d7d9c9a1efac31c6dc62b4ed9c42d97bf729))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Bug Fixes
|
|
34
|
+
|
|
35
|
+
* set initial release baseline ([29fc113](https://github.com/AgentKitProject/agentkitforge-core/commit/29fc11376ce64175dfb9564b5fa625dc24eb63d2))
|
|
36
|
+
|
|
37
|
+
## v0.1.0 Public Preview
|
|
38
|
+
|
|
39
|
+
- Initial public preview target.
|
|
40
|
+
- Core Agent Kit manifest validation.
|
|
41
|
+
- Validation profiles: `local-valid`, `publishable`, `trusted`, and `verified`.
|
|
42
|
+
- Agent Kit scaffolding templates.
|
|
43
|
+
- Draft rendering and draft request helpers.
|
|
44
|
+
- Prepared Prompt schema, validation, and rendering.
|
|
45
|
+
- Context Builder.
|
|
46
|
+
- One-file Markdown export.
|
|
47
|
+
- `.agentkit.zip` packaging.
|
|
48
|
+
- Codex and Claude Code target exports.
|
|
49
|
+
- CLI workflows for validation, packaging, export, prompt rendering, context building, and inspection.
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# AgentKitForge Core
|
|
2
|
-
|
|
3
|
-
AgentKitForge Core is the initial TypeScript engine for validating, exporting, and packaging portable Agent Kits. This package intentionally contains only core package/spec/validation/export logic. It does not include a desktop app, AWS infrastructure, or Agent Kit Market integration.
|
|
4
|
-
|
|
1
|
+
# AgentKitForge Core
|
|
2
|
+
|
|
3
|
+
AgentKitForge Core is the initial TypeScript engine for validating, exporting, and packaging portable Agent Kits. This package intentionally contains only core package/spec/validation/export logic. It does not include a desktop app, AWS infrastructure, or Agent Kit Market integration.
|
|
4
|
+
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```bash
|
|
@@ -22,305 +22,307 @@ The published package includes built `dist/` output. The repository does not com
|
|
|
22
22
|
- `types`: `dist/index.d.ts`
|
|
23
23
|
- `bin`: `dist/cli/index.js`
|
|
24
24
|
|
|
25
|
+
Release Please creates GitHub Releases, and the release workflow publishes `@agentkitforge/core` to npm automatically using npm Trusted Publishing.
|
|
26
|
+
|
|
25
27
|
## Build
|
|
26
28
|
|
|
27
29
|
```bash
|
|
28
30
|
npm run build
|
|
29
31
|
```
|
|
30
|
-
|
|
31
|
-
## Test
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npm test
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Smoke Test
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
npm run build
|
|
41
|
-
npm run smoke
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
The smoke test exercises the built CLI across init, validation, packaging, one-file export, prepared prompts, context building, target exports, inspection, summary, and load-as-draft workflows.
|
|
45
|
-
|
|
46
|
-
## Security Checks
|
|
47
|
-
|
|
48
|
-
GitHub Actions runs security scanning on pushes, pull requests, and manual dispatch. Blocking checks currently include `npm audit --audit-level=critical`. A non-blocking high vulnerability audit is reported in logs.
|
|
49
|
-
|
|
50
|
-
See [SECURITY_CI_POLICY.md](SECURITY_CI_POLICY.md) for the v0.1 failure policy.
|
|
51
|
-
|
|
52
|
-
## Project Documents
|
|
53
|
-
|
|
54
|
-
- [SPEC.md](SPEC.md): Agent Kit public preview package specification.
|
|
55
|
-
- [CLI.md](CLI.md): CLI command reference.
|
|
56
|
-
- [CONTRIBUTING.md](CONTRIBUTING.md): Local setup, contribution scope, and PR expectations.
|
|
57
|
-
- [SECURITY.md](SECURITY.md): Vulnerability reporting and supported versions.
|
|
58
|
-
- [VERSIONING.md](VERSIONING.md): SemVer and schema compatibility policy.
|
|
59
|
-
- [RELEASE_PROCESS.md](RELEASE_PROCESS.md): Release checklist and tagging flow.
|
|
60
|
-
- [CHANGELOG.md](CHANGELOG.md): Release notes.
|
|
61
|
-
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md): Contributor conduct expectations.
|
|
62
|
-
|
|
63
|
-
## Agent Kit Input Safety
|
|
64
|
-
|
|
65
|
-
Agent Kit folders are treated as untrusted input. Manifest-controlled paths must be safe relative paths that stay inside the kit root, and IDs used for package/export folder names must be path-safe kebab-case identifiers. Core reports validation errors for unsafe manifest paths or IDs instead of reading, copying, packaging, or exporting them.
|
|
66
|
-
|
|
67
|
-
Core never executes files from `scripts/`; it only validates whether script files are declared. Packaging, context building, and target exports reject symbolic links, skip generated or dependency-heavy folders such as `exports/`, `.git`, `node_modules`, `dist`, and `build`, and apply conservative file-count and byte limits to avoid unexpectedly large or malicious kits.
|
|
68
|
-
|
|
69
|
-
## CLI
|
|
70
|
-
|
|
71
|
-
Create a blank Agent Kit:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
npm run build
|
|
75
|
-
node dist/cli/index.js init ./my-agentkit \
|
|
76
|
-
--template blank \
|
|
77
|
-
--id my-agentkit \
|
|
78
|
-
--name "My Agent Kit" \
|
|
79
|
-
--description "A starter Agent Kit."
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Create a trusted financial review starter kit:
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
node dist/cli/index.js init ./financial-review-kit \
|
|
86
|
-
--template financial-review \
|
|
87
|
-
--id financial-review-kit \
|
|
88
|
-
--name "Financial Review Kit" \
|
|
89
|
-
--description "Review financial workbooks for structure, formulas, and follow-up risks."
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
Use `--force` to initialize into a non-empty directory and overwrite generated template files.
|
|
93
|
-
|
|
94
|
-
Render an Agent Kit draft JSON file:
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
node dist/cli/index.js render-draft ./draft.json ./rendered-agentkit --force
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
Draft rendering validates the JSON structure before writing files. Rendered kits include the standard manifest, entrypoint Markdown files, README, LICENSE, CHANGELOG, skills, and any draft policies, examples, or templates.
|
|
101
|
-
|
|
102
|
-
List prepared prompts in a kit:
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
node dist/cli/index.js list-prompts ./path/to/agentkit
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Render a prepared prompt with input values:
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
node dist/cli/index.js render-prompt ./path/to/agentkit financial-review --inputs inputs.json --out rendered-prompt.md
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Validate prepared prompt inputs:
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
node dist/cli/index.js validate-prompt-inputs ./path/to/agentkit financial-review --inputs inputs.json
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Inspect, summarize, or load an existing kit as a draft:
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
node dist/cli/index.js inspect ./path/to/repo-or-kit
|
|
124
|
-
node dist/cli/index.js summarize ./path/to/agentkit
|
|
125
|
-
node dist/cli/index.js load-as-draft ./path/to/agentkit --out draft.json
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
Prepare a provider-neutral AI draft request:
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
node dist/cli/index.js draft-request \
|
|
132
|
-
--request "Build a financial review kit for monthly workbook review." \
|
|
133
|
-
--level trusted \
|
|
134
|
-
--domain Finance \
|
|
135
|
-
--target-user analyst \
|
|
136
|
-
--out draft-request.json
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
The command writes deterministic instructions, prompt text, and the expected `AgentKitDraft` JSON schema. It does not call OpenAI or any other provider. A future app can send `draft-request.json` to an AI provider, validate the returned `AgentKitDraft` JSON, then render it:
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
node dist/cli/index.js render-draft draft.json ./my-kit --force
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
Prepare a revision request for an existing draft:
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
node dist/cli/index.js draft-revision-request ./draft.json \
|
|
149
|
-
--change "Add a reusable prepared prompt for monthly workbook review." \
|
|
150
|
-
--level trusted \
|
|
151
|
-
--out draft-revision-request.json
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Build with AI is designed as an iterative flow:
|
|
155
|
-
|
|
156
|
-
1. Create a draft request from the user's initial request.
|
|
157
|
-
2. A future app sends that request to an AI provider.
|
|
158
|
-
3. Validate the returned `AgentKitDraft`.
|
|
159
|
-
4. Create an AI Draft Session and store revision v1.
|
|
160
|
-
5. For user changes, create a draft revision request from the current draft.
|
|
161
|
-
6. Validate the returned full updated draft and add a new revision.
|
|
162
|
-
7. Render the current revision into an Agent Kit folder.
|
|
163
|
-
|
|
164
|
-
Core only builds request/session data. The app performs provider calls.
|
|
165
|
-
|
|
166
|
-
Validate an Agent Kit:
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
node dist/cli/index.js validate ./path/to/agentkit --profile local-valid
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Supported validation profiles:
|
|
173
|
-
|
|
174
|
-
- `local-valid`
|
|
175
|
-
- `publishable`
|
|
176
|
-
- `trusted`
|
|
177
|
-
- `verified`
|
|
178
|
-
|
|
179
|
-
Export a one-file Markdown bundle:
|
|
180
|
-
|
|
181
|
-
```bash
|
|
182
|
-
node dist/cli/index.js export-onefile ./path/to/agentkit --out ./bundle.md
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
Create a `.agentkit.zip` package:
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
node dist/cli/index.js package ./path/to/agentkit --out ./agentkit.agentkit.zip
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
Build AI-ready context from an Agent Kit:
|
|
192
|
-
|
|
193
|
-
```bash
|
|
194
|
-
node dist/cli/index.js build-context ./path/to/agentkit \
|
|
195
|
-
--task "Audit formulas in this workbook." \
|
|
196
|
-
--mode triggered \
|
|
197
|
-
--target generic \
|
|
198
|
-
--out context.json
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
The context builder does not call OpenAI or any other provider. It creates a JSON payload with:
|
|
202
|
-
|
|
203
|
-
- `systemContext`: Agent Kit instructions, selected skills, and requested supporting files.
|
|
204
|
-
- `userContext`: the user task, ready to pair with the system context.
|
|
205
|
-
- `includedFiles`: normalized package paths included in the context.
|
|
206
|
-
- `includedSkills`: skill ids included in the context.
|
|
207
|
-
- `warnings`: deterministic fallback or selection warnings.
|
|
208
|
-
|
|
209
|
-
Use `--mode all` to include every manifest skill. Use `--mode triggered` to match the user task against skill triggers and descriptions. If no skill matches, the builder includes all skills and records a warning.
|
|
210
|
-
|
|
211
|
-
Policies, templates, and workflows are included by default in the CLI. Use `--no-policies`, `--no-templates`, or `--no-workflows` to exclude them. References are excluded by default; pass `--include-references` when the target workflow needs them.
|
|
212
|
-
|
|
213
|
-
Export Agent Kit skills to a Codex-compatible skills directory:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
node dist/cli/index.js export-codex ./financial-review --dest ~/.codex/skills --force
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
This is the first target adapter. It copies each manifest skill into a namespaced Codex skill folder like `<kit-id>-<skill-id>`, creates an index skill for the kit, and writes AgentKitForge markers so `--force` only replaces folders generated by this adapter. It does not call Codex and does not assume your actual Codex skills path.
|
|
220
|
-
|
|
221
|
-
Export an Agent Kit to an initial Claude Code plugin-style folder:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
node dist/cli/index.js export-claude-code ./financial-review --dest ./claude-code-plugins --force
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
This adapter creates `<kit-id>-claude-code-plugin/`, writes `.claude-plugin/plugin.json`, copies manifest skills into `skills/<skill-id>/`, and includes root Agent Kit instructions plus supporting `policies/`, `templates/`, `workflows/`, and `references/` when present. The plugin manifest is intentionally conservative because Claude Code plugin loading behavior may evolve; verify loading with your Claude Code version.
|
|
228
|
-
|
|
229
|
-
After this package is installed globally or linked, the same commands are available through `agentkitforge`.
|
|
230
|
-
|
|
231
|
-
## AI Provider Metadata
|
|
232
|
-
|
|
233
|
-
AgentKitForge Core defines shared provider and model metadata only. It does not call OpenAI, Anthropic, Gemini, Ollama, OpenAI-compatible servers, or any other provider. It does not store API keys.
|
|
234
|
-
|
|
235
|
-
The exported provider helpers cover:
|
|
236
|
-
|
|
237
|
-
- provider types: `openai`, `anthropic`, `gemini`, `ollama`, `openai-compatible`
|
|
238
|
-
- starter known-model suggestions
|
|
239
|
-
- default model suggestions
|
|
240
|
-
- API key and base URL requirements
|
|
241
|
-
- structured JSON capability hints for AgentKitDraft generation
|
|
242
|
-
|
|
243
|
-
Known models are suggestions, not constraints. Apps and CLIs that consume this package must always allow custom model IDs, especially for Ollama and OpenAI-compatible providers.
|
|
244
|
-
|
|
245
|
-
## Prepared Prompts
|
|
246
|
-
|
|
247
|
-
Prepared Prompts are reusable prompt templates stored under `prompts/<prompt-id>.yaml`. They let a kit define exact prompts that can be rendered later in Use mode after an app collects required inputs.
|
|
248
|
-
|
|
249
|
-
Canonical variable syntax is `{{variable_name}}`. A simpler `{variable_name}` form is tolerated for compatibility. Whitespace is allowed inside braces, such as `{{ company_name }}`. Inputs are defined by the prepared prompt, and AgentKitForge validates/rendered prompts so unresolved variables are blocked before an app sends the prompt to an AI provider.
|
|
250
|
-
|
|
251
|
-
Prompt input types:
|
|
252
|
-
|
|
253
|
-
- `short-text`
|
|
254
|
-
- `long-text`
|
|
255
|
-
- `choice`
|
|
256
|
-
- `multi-choice`
|
|
257
|
-
- `date`
|
|
258
|
-
- `number`
|
|
259
|
-
- `boolean`
|
|
260
|
-
|
|
261
|
-
Prepared prompt paths can be referenced from `agentkit.yaml`:
|
|
262
|
-
|
|
263
|
-
```yaml
|
|
264
|
-
prompts:
|
|
265
|
-
- id: financial-review
|
|
266
|
-
path: prompts/financial-review.yaml
|
|
267
|
-
description: Review a financial workbook and produce a summary.
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
One-file export renders prepared prompts in a readable Markdown section instead of dumping raw YAML.
|
|
271
|
-
|
|
272
|
-
Default artifact naming helpers return predictable names such as:
|
|
273
|
-
|
|
274
|
-
- `<kit-id>-<version>.onefile.md`
|
|
275
|
-
- `<kit-id>-<version>.agentkit.zip`
|
|
276
|
-
- `<kit-id>-output-<timestamp>.md`
|
|
277
|
-
|
|
278
|
-
## Domains
|
|
279
|
-
|
|
280
|
-
Core includes a known domain catalog for guided builders and filtering. Domains are suggestions, not constraints. Consumers should always allow custom domains.
|
|
281
|
-
|
|
282
|
-
## App-Support Helpers
|
|
283
|
-
|
|
284
|
-
Core includes reusable helpers for app workflows:
|
|
285
|
-
|
|
286
|
-
- `inspectAgentKitCandidate(path)` for import-friendly diagnostics.
|
|
287
|
-
- `getAgentKitSummary(path)` for details, export, and install target screens.
|
|
288
|
-
- `loadAgentKitAsDraft(path)` for Edit with AI and guided editing.
|
|
289
|
-
- `requestedSections` and `excludedSections` on draft request builders for AI section control.
|
|
290
|
-
- Example input document metadata helpers for `.txt`, `.md`, `.csv`, `.xlsx`, and `.xls`.
|
|
291
|
-
- Artifact naming helpers for one-file exports, packages, and generated outputs.
|
|
292
|
-
|
|
293
|
-
Example input documents are app-provided metadata. Core does not upload files, call AI providers, or perform heavy spreadsheet parsing. Apps can use them to help AI infer formatting, terminology, expected outputs, required inputs, skill procedures, and prepared prompt variables.
|
|
294
|
-
|
|
295
|
-
## Agent Kit Structure
|
|
296
|
-
|
|
297
|
-
```text
|
|
298
|
-
agentkit.yaml
|
|
299
|
-
AGENTKIT.md
|
|
300
|
-
START_HERE.md
|
|
301
|
-
README.md
|
|
302
|
-
LICENSE
|
|
303
|
-
CHANGELOG.md
|
|
304
|
-
skills/<skill-id>/SKILL.md
|
|
305
|
-
prompts/<prompt-id>.yaml
|
|
306
|
-
workflows/
|
|
307
|
-
policies/
|
|
308
|
-
references/
|
|
309
|
-
templates/
|
|
310
|
-
examples/
|
|
311
|
-
evals/
|
|
312
|
-
adapters/
|
|
313
|
-
scripts/
|
|
314
|
-
assets/
|
|
315
|
-
exports/
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
## Validation Profiles
|
|
319
|
-
|
|
320
|
-
`local-valid` requires `agentkit.yaml`, `AGENTKIT.md`, `START_HERE.md`, `skills/`, and at least one `skills/<skill-id>/SKILL.md`.
|
|
321
|
-
|
|
322
|
-
`publishable` adds `README.md` and `LICENSE`.
|
|
323
|
-
|
|
324
|
-
`trusted` adds `CHANGELOG.md`, `policies/`, and `examples/`.
|
|
325
|
-
|
|
326
|
-
`verified` adds `evals/`.
|
|
32
|
+
|
|
33
|
+
## Test
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm test
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Smoke Test
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm run build
|
|
43
|
+
npm run smoke
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The smoke test exercises the built CLI across init, validation, packaging, one-file export, prepared prompts, context building, target exports, inspection, summary, and load-as-draft workflows.
|
|
47
|
+
|
|
48
|
+
## Security Checks
|
|
49
|
+
|
|
50
|
+
GitHub Actions runs security scanning on pushes, pull requests, and manual dispatch. Blocking checks currently include `npm audit --audit-level=critical`. A non-blocking high vulnerability audit is reported in logs.
|
|
51
|
+
|
|
52
|
+
See [SECURITY_CI_POLICY.md](SECURITY_CI_POLICY.md) for the v0.1 failure policy.
|
|
53
|
+
|
|
54
|
+
## Project Documents
|
|
55
|
+
|
|
56
|
+
- [SPEC.md](SPEC.md): Agent Kit public preview package specification.
|
|
57
|
+
- [CLI.md](CLI.md): CLI command reference.
|
|
58
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md): Local setup, contribution scope, and PR expectations.
|
|
59
|
+
- [SECURITY.md](SECURITY.md): Vulnerability reporting and supported versions.
|
|
60
|
+
- [VERSIONING.md](VERSIONING.md): SemVer and schema compatibility policy.
|
|
61
|
+
- [RELEASE_PROCESS.md](RELEASE_PROCESS.md): Release checklist and tagging flow.
|
|
62
|
+
- [CHANGELOG.md](CHANGELOG.md): Release notes.
|
|
63
|
+
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md): Contributor conduct expectations.
|
|
64
|
+
|
|
65
|
+
## Agent Kit Input Safety
|
|
66
|
+
|
|
67
|
+
Agent Kit folders are treated as untrusted input. Manifest-controlled paths must be safe relative paths that stay inside the kit root, and IDs used for package/export folder names must be path-safe kebab-case identifiers. Core reports validation errors for unsafe manifest paths or IDs instead of reading, copying, packaging, or exporting them.
|
|
68
|
+
|
|
69
|
+
Core never executes files from `scripts/`; it only validates whether script files are declared. Packaging, context building, and target exports reject symbolic links, skip generated or dependency-heavy folders such as `exports/`, `.git`, `node_modules`, `dist`, and `build`, and apply conservative file-count and byte limits to avoid unexpectedly large or malicious kits.
|
|
70
|
+
|
|
71
|
+
## CLI
|
|
72
|
+
|
|
73
|
+
Create a blank Agent Kit:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run build
|
|
77
|
+
node dist/cli/index.js init ./my-agentkit \
|
|
78
|
+
--template blank \
|
|
79
|
+
--id my-agentkit \
|
|
80
|
+
--name "My Agent Kit" \
|
|
81
|
+
--description "A starter Agent Kit."
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Create a trusted financial review starter kit:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
node dist/cli/index.js init ./financial-review-kit \
|
|
88
|
+
--template financial-review \
|
|
89
|
+
--id financial-review-kit \
|
|
90
|
+
--name "Financial Review Kit" \
|
|
91
|
+
--description "Review financial workbooks for structure, formulas, and follow-up risks."
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Use `--force` to initialize into a non-empty directory and overwrite generated template files.
|
|
95
|
+
|
|
96
|
+
Render an Agent Kit draft JSON file:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
node dist/cli/index.js render-draft ./draft.json ./rendered-agentkit --force
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Draft rendering validates the JSON structure before writing files. Rendered kits include the standard manifest, entrypoint Markdown files, README, LICENSE, CHANGELOG, skills, and any draft policies, examples, or templates.
|
|
103
|
+
|
|
104
|
+
List prepared prompts in a kit:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
node dist/cli/index.js list-prompts ./path/to/agentkit
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Render a prepared prompt with input values:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
node dist/cli/index.js render-prompt ./path/to/agentkit financial-review --inputs inputs.json --out rendered-prompt.md
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Validate prepared prompt inputs:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
node dist/cli/index.js validate-prompt-inputs ./path/to/agentkit financial-review --inputs inputs.json
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Inspect, summarize, or load an existing kit as a draft:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
node dist/cli/index.js inspect ./path/to/repo-or-kit
|
|
126
|
+
node dist/cli/index.js summarize ./path/to/agentkit
|
|
127
|
+
node dist/cli/index.js load-as-draft ./path/to/agentkit --out draft.json
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Prepare a provider-neutral AI draft request:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
node dist/cli/index.js draft-request \
|
|
134
|
+
--request "Build a financial review kit for monthly workbook review." \
|
|
135
|
+
--level trusted \
|
|
136
|
+
--domain Finance \
|
|
137
|
+
--target-user analyst \
|
|
138
|
+
--out draft-request.json
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The command writes deterministic instructions, prompt text, and the expected `AgentKitDraft` JSON schema. It does not call OpenAI or any other provider. A future app can send `draft-request.json` to an AI provider, validate the returned `AgentKitDraft` JSON, then render it:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
node dist/cli/index.js render-draft draft.json ./my-kit --force
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Prepare a revision request for an existing draft:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
node dist/cli/index.js draft-revision-request ./draft.json \
|
|
151
|
+
--change "Add a reusable prepared prompt for monthly workbook review." \
|
|
152
|
+
--level trusted \
|
|
153
|
+
--out draft-revision-request.json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Build with AI is designed as an iterative flow:
|
|
157
|
+
|
|
158
|
+
1. Create a draft request from the user's initial request.
|
|
159
|
+
2. A future app sends that request to an AI provider.
|
|
160
|
+
3. Validate the returned `AgentKitDraft`.
|
|
161
|
+
4. Create an AI Draft Session and store revision v1.
|
|
162
|
+
5. For user changes, create a draft revision request from the current draft.
|
|
163
|
+
6. Validate the returned full updated draft and add a new revision.
|
|
164
|
+
7. Render the current revision into an Agent Kit folder.
|
|
165
|
+
|
|
166
|
+
Core only builds request/session data. The app performs provider calls.
|
|
167
|
+
|
|
168
|
+
Validate an Agent Kit:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
node dist/cli/index.js validate ./path/to/agentkit --profile local-valid
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Supported validation profiles:
|
|
175
|
+
|
|
176
|
+
- `local-valid`
|
|
177
|
+
- `publishable`
|
|
178
|
+
- `trusted`
|
|
179
|
+
- `verified`
|
|
180
|
+
|
|
181
|
+
Export a one-file Markdown bundle:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
node dist/cli/index.js export-onefile ./path/to/agentkit --out ./bundle.md
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Create a `.agentkit.zip` package:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
node dist/cli/index.js package ./path/to/agentkit --out ./agentkit.agentkit.zip
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Build AI-ready context from an Agent Kit:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
node dist/cli/index.js build-context ./path/to/agentkit \
|
|
197
|
+
--task "Audit formulas in this workbook." \
|
|
198
|
+
--mode triggered \
|
|
199
|
+
--target generic \
|
|
200
|
+
--out context.json
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The context builder does not call OpenAI or any other provider. It creates a JSON payload with:
|
|
204
|
+
|
|
205
|
+
- `systemContext`: Agent Kit instructions, selected skills, and requested supporting files.
|
|
206
|
+
- `userContext`: the user task, ready to pair with the system context.
|
|
207
|
+
- `includedFiles`: normalized package paths included in the context.
|
|
208
|
+
- `includedSkills`: skill ids included in the context.
|
|
209
|
+
- `warnings`: deterministic fallback or selection warnings.
|
|
210
|
+
|
|
211
|
+
Use `--mode all` to include every manifest skill. Use `--mode triggered` to match the user task against skill triggers and descriptions. If no skill matches, the builder includes all skills and records a warning.
|
|
212
|
+
|
|
213
|
+
Policies, templates, and workflows are included by default in the CLI. Use `--no-policies`, `--no-templates`, or `--no-workflows` to exclude them. References are excluded by default; pass `--include-references` when the target workflow needs them.
|
|
214
|
+
|
|
215
|
+
Export Agent Kit skills to a Codex-compatible skills directory:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
node dist/cli/index.js export-codex ./financial-review --dest ~/.codex/skills --force
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
This is the first target adapter. It copies each manifest skill into a namespaced Codex skill folder like `<kit-id>-<skill-id>`, creates an index skill for the kit, and writes AgentKitForge markers so `--force` only replaces folders generated by this adapter. It does not call Codex and does not assume your actual Codex skills path.
|
|
222
|
+
|
|
223
|
+
Export an Agent Kit to an initial Claude Code plugin-style folder:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
node dist/cli/index.js export-claude-code ./financial-review --dest ./claude-code-plugins --force
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
This adapter creates `<kit-id>-claude-code-plugin/`, writes `.claude-plugin/plugin.json`, copies manifest skills into `skills/<skill-id>/`, and includes root Agent Kit instructions plus supporting `policies/`, `templates/`, `workflows/`, and `references/` when present. The plugin manifest is intentionally conservative because Claude Code plugin loading behavior may evolve; verify loading with your Claude Code version.
|
|
230
|
+
|
|
231
|
+
After this package is installed globally or linked, the same commands are available through `agentkitforge`.
|
|
232
|
+
|
|
233
|
+
## AI Provider Metadata
|
|
234
|
+
|
|
235
|
+
AgentKitForge Core defines shared provider and model metadata only. It does not call OpenAI, Anthropic, Gemini, Ollama, OpenAI-compatible servers, or any other provider. It does not store API keys.
|
|
236
|
+
|
|
237
|
+
The exported provider helpers cover:
|
|
238
|
+
|
|
239
|
+
- provider types: `openai`, `anthropic`, `gemini`, `ollama`, `openai-compatible`
|
|
240
|
+
- starter known-model suggestions
|
|
241
|
+
- default model suggestions
|
|
242
|
+
- API key and base URL requirements
|
|
243
|
+
- structured JSON capability hints for AgentKitDraft generation
|
|
244
|
+
|
|
245
|
+
Known models are suggestions, not constraints. Apps and CLIs that consume this package must always allow custom model IDs, especially for Ollama and OpenAI-compatible providers.
|
|
246
|
+
|
|
247
|
+
## Prepared Prompts
|
|
248
|
+
|
|
249
|
+
Prepared Prompts are reusable prompt templates stored under `prompts/<prompt-id>.yaml`. They let a kit define exact prompts that can be rendered later in Use mode after an app collects required inputs.
|
|
250
|
+
|
|
251
|
+
Canonical variable syntax is `{{variable_name}}`. A simpler `{variable_name}` form is tolerated for compatibility. Whitespace is allowed inside braces, such as `{{ company_name }}`. Inputs are defined by the prepared prompt, and AgentKitForge validates/rendered prompts so unresolved variables are blocked before an app sends the prompt to an AI provider.
|
|
252
|
+
|
|
253
|
+
Prompt input types:
|
|
254
|
+
|
|
255
|
+
- `short-text`
|
|
256
|
+
- `long-text`
|
|
257
|
+
- `choice`
|
|
258
|
+
- `multi-choice`
|
|
259
|
+
- `date`
|
|
260
|
+
- `number`
|
|
261
|
+
- `boolean`
|
|
262
|
+
|
|
263
|
+
Prepared prompt paths can be referenced from `agentkit.yaml`:
|
|
264
|
+
|
|
265
|
+
```yaml
|
|
266
|
+
prompts:
|
|
267
|
+
- id: financial-review
|
|
268
|
+
path: prompts/financial-review.yaml
|
|
269
|
+
description: Review a financial workbook and produce a summary.
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
One-file export renders prepared prompts in a readable Markdown section instead of dumping raw YAML.
|
|
273
|
+
|
|
274
|
+
Default artifact naming helpers return predictable names such as:
|
|
275
|
+
|
|
276
|
+
- `<kit-id>-<version>.onefile.md`
|
|
277
|
+
- `<kit-id>-<version>.agentkit.zip`
|
|
278
|
+
- `<kit-id>-output-<timestamp>.md`
|
|
279
|
+
|
|
280
|
+
## Domains
|
|
281
|
+
|
|
282
|
+
Core includes a known domain catalog for guided builders and filtering. Domains are suggestions, not constraints. Consumers should always allow custom domains.
|
|
283
|
+
|
|
284
|
+
## App-Support Helpers
|
|
285
|
+
|
|
286
|
+
Core includes reusable helpers for app workflows:
|
|
287
|
+
|
|
288
|
+
- `inspectAgentKitCandidate(path)` for import-friendly diagnostics.
|
|
289
|
+
- `getAgentKitSummary(path)` for details, export, and install target screens.
|
|
290
|
+
- `loadAgentKitAsDraft(path)` for Edit with AI and guided editing.
|
|
291
|
+
- `requestedSections` and `excludedSections` on draft request builders for AI section control.
|
|
292
|
+
- Example input document metadata helpers for `.txt`, `.md`, `.csv`, `.xlsx`, and `.xls`.
|
|
293
|
+
- Artifact naming helpers for one-file exports, packages, and generated outputs.
|
|
294
|
+
|
|
295
|
+
Example input documents are app-provided metadata. Core does not upload files, call AI providers, or perform heavy spreadsheet parsing. Apps can use them to help AI infer formatting, terminology, expected outputs, required inputs, skill procedures, and prepared prompt variables.
|
|
296
|
+
|
|
297
|
+
## Agent Kit Structure
|
|
298
|
+
|
|
299
|
+
```text
|
|
300
|
+
agentkit.yaml
|
|
301
|
+
AGENTKIT.md
|
|
302
|
+
START_HERE.md
|
|
303
|
+
README.md
|
|
304
|
+
LICENSE
|
|
305
|
+
CHANGELOG.md
|
|
306
|
+
skills/<skill-id>/SKILL.md
|
|
307
|
+
prompts/<prompt-id>.yaml
|
|
308
|
+
workflows/
|
|
309
|
+
policies/
|
|
310
|
+
references/
|
|
311
|
+
templates/
|
|
312
|
+
examples/
|
|
313
|
+
evals/
|
|
314
|
+
adapters/
|
|
315
|
+
scripts/
|
|
316
|
+
assets/
|
|
317
|
+
exports/
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
## Validation Profiles
|
|
321
|
+
|
|
322
|
+
`local-valid` requires `agentkit.yaml`, `AGENTKIT.md`, `START_HERE.md`, `skills/`, and at least one `skills/<skill-id>/SKILL.md`.
|
|
323
|
+
|
|
324
|
+
`publishable` adds `README.md` and `LICENSE`.
|
|
325
|
+
|
|
326
|
+
`trusted` adds `CHANGELOG.md`, `policies/`, and `examples/`.
|
|
327
|
+
|
|
328
|
+
`verified` adds `evals/`.
|
package/dist/app/loadAsDraft.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import YAML from "yaml";
|
|
4
|
-
import { resolveInside } from "../fs/safety.js";
|
|
4
|
+
import { resolveInside, safeListFilesRecursive } from "../fs/safety.js";
|
|
5
5
|
import { parseSkillMarkdown } from "../validation/skill.js";
|
|
6
6
|
import { readAgentKit } from "../package/reader.js";
|
|
7
7
|
import { listPreparedPrompts } from "../prompts/prompts.js";
|
|
@@ -120,18 +120,7 @@ async function listDirectoryFiles(directoryPath) {
|
|
|
120
120
|
if (!(await exists(directoryPath))) {
|
|
121
121
|
return [];
|
|
122
122
|
}
|
|
123
|
-
|
|
124
|
-
const files = [];
|
|
125
|
-
for (const entry of entries) {
|
|
126
|
-
const entryPath = path.join(directoryPath, entry.name);
|
|
127
|
-
if (entry.isDirectory()) {
|
|
128
|
-
files.push(...(await listDirectoryFiles(entryPath)));
|
|
129
|
-
}
|
|
130
|
-
else if (entry.isFile()) {
|
|
131
|
-
files.push(entryPath);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return files.sort();
|
|
123
|
+
return (await safeListFilesRecursive(directoryPath)).map((file) => file.absolutePath).sort();
|
|
135
124
|
}
|
|
136
125
|
async function exists(filePath) {
|
|
137
126
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadAsDraft.js","sourceRoot":"","sources":["../../src/app/loadAsDraft.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"loadAsDraft.js","sourceRoot":"","sources":["../../src/app/loadAsDraft.ts"],"names":[],"mappings":"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"}
|
package/dist/export/onefile.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { resolveInside, safeListFilesRecursive } from "../fs/safety.js";
|
|
3
4
|
import { listPreparedPrompts } from "../prompts/prompts.js";
|
|
4
5
|
const TOP_LEVEL_FILES = ["START_HERE.md", "AGENTKIT.md"];
|
|
5
6
|
const OPTIONAL_DIRECTORIES = ["workflows", "policies", "templates"];
|
|
@@ -9,14 +10,15 @@ export async function exportOneFile(rootPath, outFile) {
|
|
|
9
10
|
for (const file of TOP_LEVEL_FILES) {
|
|
10
11
|
await appendFileSection(sections, resolvedRoot, file);
|
|
11
12
|
}
|
|
12
|
-
for (const skillFile of await listSkillFiles(
|
|
13
|
-
await appendFileSection(sections, resolvedRoot,
|
|
13
|
+
for (const skillFile of await listSkillFiles(resolvedRoot)) {
|
|
14
|
+
await appendFileSection(sections, resolvedRoot, skillFile);
|
|
14
15
|
}
|
|
15
16
|
for (const directory of OPTIONAL_DIRECTORIES) {
|
|
16
17
|
await appendDirectorySections(sections, resolvedRoot, directory);
|
|
17
18
|
}
|
|
18
19
|
await appendPreparedPromptSections(sections, resolvedRoot);
|
|
19
20
|
const resolvedOut = path.resolve(outFile);
|
|
21
|
+
await mkdir(path.dirname(resolvedOut), { recursive: true });
|
|
20
22
|
await writeFile(resolvedOut, sections.join("\n\n"), "utf8");
|
|
21
23
|
return resolvedOut;
|
|
22
24
|
}
|
|
@@ -52,58 +54,39 @@ async function appendDirectorySections(sections, rootPath, relativeDirectory) {
|
|
|
52
54
|
if (!(await exists(directoryPath))) {
|
|
53
55
|
return;
|
|
54
56
|
}
|
|
55
|
-
for (const file of await listMarkdownFiles(
|
|
56
|
-
await appendFileSection(sections, rootPath,
|
|
57
|
+
for (const file of await listMarkdownFiles(rootPath, relativeDirectory)) {
|
|
58
|
+
await appendFileSection(sections, rootPath, file);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
async function appendFileSection(sections, rootPath, relativePath) {
|
|
60
62
|
const normalizedRelativePath = relativePath.replaceAll("\\", "/");
|
|
61
|
-
const content = await readFile(
|
|
63
|
+
const content = await readFile(resolveInside(rootPath, relativePath), "utf8");
|
|
62
64
|
sections.push(`<!-- BEGIN ${normalizedRelativePath} -->\n\n${content.trim()}\n\n<!-- END ${normalizedRelativePath} -->`);
|
|
63
65
|
}
|
|
64
|
-
async function listSkillFiles(
|
|
66
|
+
async function listSkillFiles(rootPath) {
|
|
67
|
+
const skillsRoot = resolveInside(rootPath, "skills");
|
|
65
68
|
if (!(await exists(skillsRoot))) {
|
|
66
69
|
return [];
|
|
67
70
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const skillFile = path.join(skillsRoot, entry.name, "SKILL.md");
|
|
73
|
-
if (await exists(skillFile)) {
|
|
74
|
-
skillFiles.push(skillFile);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return skillFiles.sort();
|
|
71
|
+
return (await safeListFilesRecursive(skillsRoot))
|
|
72
|
+
.filter((file) => file.relativePath.split("/").length === 2 && file.relativePath.endsWith("/SKILL.md"))
|
|
73
|
+
.map((file) => `skills/${file.relativePath}`)
|
|
74
|
+
.sort();
|
|
79
75
|
}
|
|
80
|
-
async function listMarkdownFiles(rootPath) {
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
files.push(...(await listMarkdownFiles(entryPath)));
|
|
87
|
-
}
|
|
88
|
-
else if (entry.isFile() && entry.name.toLowerCase().endsWith(".md")) {
|
|
89
|
-
files.push(entryPath);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return files.sort();
|
|
76
|
+
async function listMarkdownFiles(rootPath, relativeDirectory) {
|
|
77
|
+
const directoryPath = resolveInside(rootPath, relativeDirectory);
|
|
78
|
+
return (await safeListFilesRecursive(directoryPath))
|
|
79
|
+
.filter((file) => file.relativePath.toLowerCase().endsWith(".md"))
|
|
80
|
+
.map((file) => `${relativeDirectory}/${file.relativePath}`)
|
|
81
|
+
.sort();
|
|
93
82
|
}
|
|
94
83
|
async function exists(filePath) {
|
|
95
84
|
try {
|
|
96
|
-
await
|
|
85
|
+
await stat(filePath);
|
|
97
86
|
return true;
|
|
98
87
|
}
|
|
99
88
|
catch {
|
|
100
|
-
|
|
101
|
-
await readFile(filePath);
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
89
|
+
return false;
|
|
107
90
|
}
|
|
108
91
|
}
|
|
109
92
|
//# sourceMappingURL=onefile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onefile.js","sourceRoot":"","sources":["../../src/export/onefile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"onefile.js","sourceRoot":"","sources":["../../src/export/onefile.ts"],"names":[],"mappings":"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"}
|
package/dist/fs/safety.js
CHANGED
|
@@ -5,10 +5,14 @@ export const DEFAULT_MAX_FILES = 1000;
|
|
|
5
5
|
export const DEFAULT_MAX_BYTES = 25 * 1024 * 1024;
|
|
6
6
|
const DEFAULT_EXCLUDED_DIRS = new Set([".git", "node_modules", "dist", "build"]);
|
|
7
7
|
const DEFAULT_EXCLUDED_PATHS = ["exports/"];
|
|
8
|
+
const WINDOWS_RESERVED_NAMES = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i;
|
|
8
9
|
export function assertSafeId(id, label = "id") {
|
|
9
10
|
if (!/^[a-z0-9][a-z0-9-]*$/.test(id)) {
|
|
10
11
|
throw new Error(`${label} must use lowercase letters, numbers, and hyphens`);
|
|
11
12
|
}
|
|
13
|
+
if (WINDOWS_RESERVED_NAMES.test(id)) {
|
|
14
|
+
throw new Error(`${label} must not use a Windows reserved device name`);
|
|
15
|
+
}
|
|
12
16
|
}
|
|
13
17
|
export function isSafeId(id) {
|
|
14
18
|
try {
|
|
@@ -29,13 +33,22 @@ export function sanitizePathSegment(value) {
|
|
|
29
33
|
return sanitized || "agentkit";
|
|
30
34
|
}
|
|
31
35
|
export function assertSafeRelativePath(relativePath) {
|
|
32
|
-
if (!relativePath
|
|
33
|
-
throw new Error("Path must not be empty
|
|
36
|
+
if (!relativePath) {
|
|
37
|
+
throw new Error("Path must not be empty");
|
|
34
38
|
}
|
|
35
|
-
if (
|
|
36
|
-
throw new Error(
|
|
39
|
+
if (relativePath.includes("\0")) {
|
|
40
|
+
throw new Error("Path must not contain null bytes");
|
|
37
41
|
}
|
|
38
42
|
const normalized = relativePath.replaceAll("\\", "/");
|
|
43
|
+
if (normalized.startsWith("//")) {
|
|
44
|
+
throw new Error(`Path must not use UNC or extended-length syntax: ${relativePath}`);
|
|
45
|
+
}
|
|
46
|
+
if (/^[a-zA-Z]:/.test(normalized)) {
|
|
47
|
+
throw new Error(`Path must not use a Windows drive prefix: ${relativePath}`);
|
|
48
|
+
}
|
|
49
|
+
if (path.isAbsolute(relativePath) || path.posix.isAbsolute(normalized)) {
|
|
50
|
+
throw new Error(`Path must be relative: ${relativePath}`);
|
|
51
|
+
}
|
|
39
52
|
if (normalized.split("/").some((part) => part === "..")) {
|
|
40
53
|
throw new Error(`Path must not contain '..': ${relativePath}`);
|
|
41
54
|
}
|
package/dist/fs/safety.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/fs/safety.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAgB7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACjF,MAAM,sBAAsB,GAAG,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/fs/safety.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
2
|
"name": "@agentkitforge/core",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Core package, validation, export, and packaging engine for AgentKitForge.",
|
|
5
|
-
"type": "module",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Core package, validation, export, and packaging engine for AgentKitForge.",
|
|
5
|
+
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"agentkitforge": "dist/cli/index.js"
|
|
8
8
|
},
|
|
@@ -25,33 +25,33 @@
|
|
|
25
25
|
"smoke": "node scripts/smoke.mjs",
|
|
26
26
|
"test": "vitest run",
|
|
27
27
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
28
|
-
},
|
|
29
|
-
"keywords": [
|
|
30
|
-
"agentkit",
|
|
31
|
-
"agents",
|
|
32
|
-
"validation",
|
|
33
|
-
"cli"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"agentkit",
|
|
31
|
+
"agents",
|
|
32
|
+
"validation",
|
|
33
|
+
"cli"
|
|
34
34
|
],
|
|
35
35
|
"license": "Apache-2.0",
|
|
36
36
|
"repository": {
|
|
37
37
|
"type": "git",
|
|
38
|
-
"url": "
|
|
38
|
+
"url": "https://github.com/AgentKitProject/agentkitforge-core"
|
|
39
39
|
},
|
|
40
40
|
"publishConfig": {
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"commander": "^14.0.2",
|
|
45
|
-
"jszip": "^3.10.1",
|
|
46
|
-
"yaml": "^2.8.2",
|
|
47
|
-
"zod": "^4.1.13"
|
|
48
|
-
},
|
|
49
|
-
"devDependencies": {
|
|
50
|
-
"@types/node": "^24.10.1",
|
|
51
|
-
"typescript": "^5.9.3",
|
|
52
|
-
"vitest": "^4.0.14"
|
|
53
|
-
},
|
|
54
|
-
"engines": {
|
|
55
|
-
"node": ">=
|
|
56
|
-
}
|
|
57
|
-
}
|
|
44
|
+
"commander": "^14.0.2",
|
|
45
|
+
"jszip": "^3.10.1",
|
|
46
|
+
"yaml": "^2.8.2",
|
|
47
|
+
"zod": "^4.1.13"
|
|
48
|
+
},
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "^24.10.1",
|
|
51
|
+
"typescript": "^5.9.3",
|
|
52
|
+
"vitest": "^4.0.14"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=24"
|
|
56
|
+
}
|
|
57
|
+
}
|