neoctl 0.2.36 → 0.2.38
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/dist/agents/agent-definition.d.ts +2 -0
- package/dist/agents/agent-definition.js +10 -0
- package/dist/agents/agent-definition.js.map +1 -1
- package/dist/agents/agent-report-security.test.d.ts +1 -0
- package/dist/agents/agent-report-security.test.js +301 -0
- package/dist/agents/agent-report-security.test.js.map +1 -0
- package/dist/agents/agent-tool-persistence.test.js +9 -3
- package/dist/agents/agent-tool-persistence.test.js.map +1 -1
- package/dist/agents/agent-tool.d.ts +3 -0
- package/dist/agents/agent-tool.js +131 -34
- package/dist/agents/agent-tool.js.map +1 -1
- package/dist/agents/coordination-boundary.test.d.ts +1 -0
- package/dist/agents/coordination-boundary.test.js +58 -0
- package/dist/agents/coordination-boundary.test.js.map +1 -0
- package/dist/agents/live-preview-redaction-security.test.d.ts +1 -0
- package/dist/agents/live-preview-redaction-security.test.js +286 -0
- package/dist/agents/live-preview-redaction-security.test.js.map +1 -0
- package/dist/agents/local-agent-task.d.ts +27 -1
- package/dist/agents/local-agent-task.js +75 -5
- package/dist/agents/local-agent-task.js.map +1 -1
- package/dist/agents/obs07-11-run-facts.test.d.ts +1 -0
- package/dist/agents/obs07-11-run-facts.test.js +459 -0
- package/dist/agents/obs07-11-run-facts.test.js.map +1 -0
- package/dist/agents/smoke-agent-lifecycle.js +8 -4
- package/dist/agents/smoke-agent-lifecycle.js.map +1 -1
- package/dist/agents/smoke-agents.js +7 -3
- package/dist/agents/smoke-agents.js.map +1 -1
- package/dist/context/context-manager.d.ts +5 -0
- package/dist/context/context-manager.js +14 -7
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/prompt-config.d.ts +35 -0
- package/dist/context/prompt-config.js +151 -0
- package/dist/context/prompt-config.js.map +1 -0
- package/dist/context/prompt-config.test.d.ts +1 -0
- package/dist/context/prompt-config.test.js +124 -0
- package/dist/context/prompt-config.test.js.map +1 -0
- package/dist/context/prompts.d.ts +1 -1
- package/dist/context/prompts.js +4 -27
- package/dist/context/prompts.js.map +1 -1
- package/dist/context/smoke-context.js +49 -4
- package/dist/context/smoke-context.js.map +1 -1
- package/dist/context/system.md +16 -0
- package/dist/core/image-registry.js +1 -1
- package/dist/core/image-registry.js.map +1 -1
- package/dist/core/obs04-visible-data.test.d.ts +1 -0
- package/dist/core/obs04-visible-data.test.js +147 -0
- package/dist/core/obs04-visible-data.test.js.map +1 -0
- package/dist/core/query-engine.d.ts +32 -1
- package/dist/core/query-engine.js +320 -95
- package/dist/core/query-engine.js.map +1 -1
- package/dist/core/query-session-settings.test.d.ts +1 -0
- package/dist/core/query-session-settings.test.js +252 -0
- package/dist/core/query-session-settings.test.js.map +1 -0
- package/dist/core/query.d.ts +18 -0
- package/dist/core/query.js +134 -15
- package/dist/core/query.js.map +1 -1
- package/dist/core/run-agent.d.ts +2 -0
- package/dist/core/run-agent.js +23 -15
- package/dist/core/run-agent.js.map +1 -1
- package/dist/core/session-settings-prompt.d.ts +35 -0
- package/dist/core/session-settings-prompt.js +61 -0
- package/dist/core/session-settings-prompt.js.map +1 -0
- package/dist/core/session-settings-prompt.test.d.ts +1 -0
- package/dist/core/session-settings-prompt.test.js +257 -0
- package/dist/core/session-settings-prompt.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/model-gateway.d.ts +1 -0
- package/dist/model/model-metadata.json +97 -99
- package/dist/model/openai-native-image-guard.test.d.ts +1 -0
- package/dist/model/openai-native-image-guard.test.js +101 -0
- package/dist/model/openai-native-image-guard.test.js.map +1 -0
- package/dist/model/openai-responses-instructions.test.d.ts +1 -0
- package/dist/model/openai-responses-instructions.test.js +64 -0
- package/dist/model/openai-responses-instructions.test.js.map +1 -0
- package/dist/model/openai-responses-mapper.js +96 -32
- package/dist/model/openai-responses-mapper.js.map +1 -1
- package/dist/model/smoke-responses-mapper.js +8 -5
- package/dist/model/smoke-responses-mapper.js.map +1 -1
- package/dist/plugins/smoke-plugin-system.js +14 -14
- package/dist/repl/index.js +2 -2
- package/dist/repl/index.js.map +1 -1
- package/dist/secrets/secret-redaction.d.ts +6 -5
- package/dist/secrets/secret-redaction.js +7 -79
- package/dist/secrets/secret-redaction.js.map +1 -1
- package/dist/secrets/secret-types.d.ts +4 -1
- package/dist/secrets/secret-types.js.map +1 -1
- package/dist/session/session-export.d.ts +6 -0
- package/dist/session/session-export.js.map +1 -1
- package/dist/session/session-store.d.ts +15 -1
- package/dist/session/session-store.js +30 -2
- package/dist/session/session-store.js.map +1 -1
- package/dist/tasks/subagent-tools.test.js +1 -0
- package/dist/tasks/subagent-tools.test.js.map +1 -1
- package/dist/tasks/task-ack-size.test.js +6 -5
- package/dist/tasks/task-ack-size.test.js.map +1 -1
- package/dist/tasks/task-persistence.d.ts +1 -0
- package/dist/tasks/task-persistence.js +31 -9
- package/dist/tasks/task-persistence.js.map +1 -1
- package/dist/tasks/task-store.d.ts +6 -4
- package/dist/tasks/task-store.js +46 -20
- package/dist/tasks/task-store.js.map +1 -1
- package/dist/tools/builtins/exec-process-manager.d.ts +97 -2
- package/dist/tools/builtins/exec-process-manager.js +221 -19
- package/dist/tools/builtins/exec-process-manager.js.map +1 -1
- package/dist/tools/builtins/exec-tool.js +14 -1
- package/dist/tools/builtins/exec-tool.js.map +1 -1
- package/dist/tools/builtins/image-generation-tool.js +24 -24
- package/dist/tools/builtins/image-generation-tool.js.map +1 -1
- package/dist/tools/smoke-exec-process.js +2 -1
- package/dist/tools/smoke-exec-process.js.map +1 -1
- package/dist/tools/smoke-terminal-output-chain.d.ts +1 -0
- package/dist/tools/smoke-terminal-output-chain.js +245 -0
- package/dist/tools/smoke-terminal-output-chain.js.map +1 -0
- package/dist/tools/smoke-tool-system.js +6 -6
- package/dist/tools/smoke-tool-system.js.map +1 -1
- package/dist/tools/terminal-background-history.test.d.ts +1 -0
- package/dist/tools/terminal-background-history.test.js +77 -0
- package/dist/tools/terminal-background-history.test.js.map +1 -0
- package/dist/tools/terminal-output-persistence.test.d.ts +1 -0
- package/dist/tools/terminal-output-persistence.test.js +50 -0
- package/dist/tools/terminal-output-persistence.test.js.map +1 -0
- package/dist/tools/terminal-output-store.d.ts +154 -0
- package/dist/tools/terminal-output-store.js +580 -0
- package/dist/tools/terminal-output-store.js.map +1 -0
- package/dist/tools/terminal-output-store.test.d.ts +1 -0
- package/dist/tools/terminal-output-store.test.js +364 -0
- package/dist/tools/terminal-output-store.test.js.map +1 -0
- package/dist/types/events.d.ts +1 -0
- package/dist/types/messages.d.ts +1 -0
- package/dist/web/agent-content-detail.d.ts +78 -0
- package/dist/web/agent-content-detail.js +495 -0
- package/dist/web/agent-content-detail.js.map +1 -0
- package/dist/web/agent-content-detail.test.d.ts +1 -0
- package/dist/web/agent-content-detail.test.js +307 -0
- package/dist/web/agent-content-detail.test.js.map +1 -0
- package/dist/web/agent-parent-messages.test.d.ts +1 -0
- package/dist/web/agent-parent-messages.test.js +58 -0
- package/dist/web/agent-parent-messages.test.js.map +1 -0
- package/dist/web/agent-tool-payload-security.test.d.ts +1 -0
- package/dist/web/agent-tool-payload-security.test.js +120 -0
- package/dist/web/agent-tool-payload-security.test.js.map +1 -0
- package/dist/web/index.d.ts +136 -4
- package/dist/web/index.js +303 -78
- package/dist/web/index.js.map +1 -1
- package/dist/web/prompt-config-protocol.d.ts +4 -0
- package/dist/web/prompt-config-protocol.js +57 -0
- package/dist/web/prompt-config-protocol.js.map +1 -0
- package/dist/web/prompt-config-protocol.test.d.ts +1 -0
- package/dist/web/prompt-config-protocol.test.js +78 -0
- package/dist/web/prompt-config-protocol.test.js.map +1 -0
- package/dist/web/runtime-context-protocol.d.ts +1 -0
- package/dist/web/runtime-context-protocol.js +1 -0
- package/dist/web/runtime-context-protocol.js.map +1 -1
- package/dist/web/session-prompt-integration.test.d.ts +1 -0
- package/dist/web/session-prompt-integration.test.js +57 -0
- package/dist/web/session-prompt-integration.test.js.map +1 -0
- package/dist/web/session-prompt-protocol.d.ts +8 -0
- package/dist/web/session-prompt-protocol.js +11 -0
- package/dist/web/session-prompt-protocol.js.map +1 -0
- package/dist/web/session-settings.test.d.ts +1 -0
- package/dist/web/session-settings.test.js +254 -0
- package/dist/web/session-settings.test.js.map +1 -0
- package/dist/web/smoke-agent-content-http.d.ts +1 -0
- package/dist/web/smoke-agent-content-http.js +446 -0
- package/dist/web/smoke-agent-content-http.js.map +1 -0
- package/dist/web/smoke-status-semantics.d.ts +1 -0
- package/dist/web/smoke-status-semantics.js +90 -0
- package/dist/web/smoke-status-semantics.js.map +1 -0
- package/dist/web/smoke-task-session-entrypoints.js +22 -1
- package/dist/web/smoke-task-session-entrypoints.js.map +1 -1
- package/dist/web/smoke-terminal-output-http.d.ts +1 -0
- package/dist/web/smoke-terminal-output-http.js +377 -0
- package/dist/web/smoke-terminal-output-http.js.map +1 -0
- package/dist/web/smoke-tool-call-detail.d.ts +1 -0
- package/dist/web/smoke-tool-call-detail.js +106 -0
- package/dist/web/smoke-tool-call-detail.js.map +1 -0
- package/dist/web/smoke-tool-call-http.d.ts +1 -0
- package/dist/web/smoke-tool-call-http.js +100 -0
- package/dist/web/smoke-tool-call-http.js.map +1 -0
- package/dist/web/smoke-tool-detail-fields-http.d.ts +1 -0
- package/dist/web/smoke-tool-detail-fields-http.js +121 -0
- package/dist/web/smoke-tool-detail-fields-http.js.map +1 -0
- package/dist/web/smoke-web-terminal-tasks.js +223 -76
- package/dist/web/smoke-web-terminal-tasks.js.map +1 -1
- package/dist/web/status-semantics.d.ts +11 -0
- package/dist/web/status-semantics.js +59 -0
- package/dist/web/status-semantics.js.map +1 -0
- package/dist/web/terminal-presentation.d.ts +15 -0
- package/dist/web/terminal-presentation.js +61 -0
- package/dist/web/terminal-presentation.js.map +1 -0
- package/dist/web/terminal-presentation.test.d.ts +1 -0
- package/dist/web/terminal-presentation.test.js +33 -0
- package/dist/web/terminal-presentation.test.js.map +1 -0
- package/dist/web/tool-call-detail.d.ts +40 -0
- package/dist/web/tool-call-detail.js +167 -0
- package/dist/web/tool-call-detail.js.map +1 -0
- package/dist/web/tool-detail-fields.d.ts +59 -0
- package/dist/web/tool-detail-fields.js +119 -0
- package/dist/web/tool-detail-fields.js.map +1 -0
- package/dist/web/tool-detail-fields.test.d.ts +1 -0
- package/dist/web/tool-detail-fields.test.js +121 -0
- package/dist/web/tool-detail-fields.test.js.map +1 -0
- package/docs/prompt-config.md +71 -0
- package/package.json +94 -93
- package/scripts/build-standalone.mjs +3 -0
- package/scripts/copy-prompt-resources.mjs +5 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Versioned global system prompt configuration
|
|
2
|
+
|
|
3
|
+
The core runtime, not the browser, owns the global base system prompt. `DefaultContextManager` (including the default used by `QueryEngine`, CLI and web runtimes) reads it on **every context build**. Saving affects future builds in all sessions using this baseline, without a restart. It does not mutate a request already sent to a provider. Session-specific prompt controls, when used, are a separate scope and do not write this file.
|
|
4
|
+
|
|
5
|
+
## Files and packaging
|
|
6
|
+
|
|
7
|
+
- The current version's complete natural-language baseline is `src/context/system.md`, not a TypeScript string or an empty override.
|
|
8
|
+
- `npm run build` copies it to `dist/context/system.md`; npm's existing `files: ["dist", ...]` includes that file. `prepare`/`prepack` run the build. The standalone distribution verifies and copies it with `dist`, and copies `package.json` for the version identity.
|
|
9
|
+
- On the first GET/build, core copies this Markdown into `~/.neoctl/prompts/<package-version>/system.md` (`%USERPROFILE%\.neoctl` on Windows). Subsequent reads and saves use **that same writable file**. Existing files, including invalid/empty files, are never reset to defaults. Each package version initializes its own file and leaves older versions untouched; migration between versions is an explicit user action.
|
|
10
|
+
- Trusted hosts/tests can set `NEO_SYSTEM_PROMPT_PATH` to an isolated file, or construct `PromptConfigStore({filePath})` and pass it as `DefaultContextManager({promptConfigStore})`. `homeDir`/`version` are also host-only store options. The HTTP client cannot select a path or version.
|
|
11
|
+
|
|
12
|
+
The Markdown contains Agent Scaffold, Doing Tasks, generic tool-use etiquette, and Tone And Output. Core still appends current tool availability, tool-result budgets, image loading/generation capability instructions, and secret-handling instructions. Plugin sections, application prompts, and Runtime agent/session context retain their existing composition chain. Global editing is **not** implemented with `overrideSystemPrompt`, so changing the baseline does not replace plugin/app/runtime sections.
|
|
13
|
+
|
|
14
|
+
## HTTP protocol
|
|
15
|
+
|
|
16
|
+
Handled by the engine's actual HTTP router **before** selecting/initializing a session. The outer web proxy needs no special route.
|
|
17
|
+
|
|
18
|
+
### `GET /api/prompt-config`
|
|
19
|
+
|
|
20
|
+
200 JSON, `Cache-Control: no-store`:
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{"content":"## Agent Scaffold\n...","revision":"<64 lowercase SHA-256 hex characters>","version":"0.2.37","path":"<absolute server-owned system.md path>"}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### `POST /api/prompt-config`
|
|
27
|
+
|
|
28
|
+
Accepts only `{"content":"...","revision":"<revision from GET>"}`. Content must be a string, contain non-whitespace text, and occupy at most **200000 UTF-8 bytes**. Original whitespace/newlines are preserved. Success is 200 JSON:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{"ok":true,"content":"...","revision":"<new SHA-256>","version":"0.2.37","path":"<same path>"}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Errors always use non-2xx HTTP status and `{"errorCode":"...","error":"..."}`:
|
|
35
|
+
|
|
36
|
+
| HTTP | errorCode | Meaning |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| 400 | `PROMPT_CONFIG_INVALID` | Invalid JSON/fields/content/revision, or client-supplied path/version |
|
|
39
|
+
| 409 | `PROMPT_CONFIG_CONFLICT` | File revision changed or file disappeared; reload before retrying |
|
|
40
|
+
| 413 | `PROMPT_CONFIG_TOO_LARGE` | Content or bounded JSON request envelope too large |
|
|
41
|
+
| 405 | `PROMPT_CONFIG_METHOD_NOT_ALLOWED` | Only GET and POST supported |
|
|
42
|
+
| 503 | `PROMPT_CONFIG_BUSY` | Could not acquire writer lock within ten seconds |
|
|
43
|
+
| 500 | `PROMPT_CONFIG_STORAGE_ERROR` | Filesystem/storage failure |
|
|
44
|
+
|
|
45
|
+
Clients should retain unsaved drafts on failure; never automatically overwrite after a 409. Fetch the latest revision and let the user decide. Identical content has the same revision, including after a restart; external edits change the hash.
|
|
46
|
+
|
|
47
|
+
## Concurrency and recovery
|
|
48
|
+
|
|
49
|
+
Reads use the actual file, not a process content cache. Initialization and compare-and-save acquire an atomic sibling `<file>.lock` directory, serializing participating writers across sessions, store objects, and OS processes. The revision comparison happens inside this lock. Writes create a unique same-directory temporary file, flush it, and atomically rename it into place. Readers therefore see an old or new complete file, not a partly written body. Normal completion removes the lock and temporary file.
|
|
50
|
+
|
|
51
|
+
The lock is deliberately **not stolen based on age** (which could allow two live writers). After a crashed/killed writer, an administrator may remove the leftover `.lock` directory only after confirming that no writer is active. The prior complete `system.md` remains readable; orphan `.tmp` files can likewise be removed. External editors should save atomically; the API detects edits made before its locked revision check, but cannot coordinate an external editor that ignores the lock and writes concurrently.
|
|
52
|
+
|
|
53
|
+
## Session prompt overrides
|
|
54
|
+
|
|
55
|
+
`GET /api/session-prompt?tabId=...&sessionId=...` returns `{content, override, revision}`. The content is the current complete effective prompt without internal cache markers. Once overridden, it is the exact session-owned prompt, not an edit to the version file.
|
|
56
|
+
|
|
57
|
+
`POST` to the same scoped URL accepts `{content, revision}` or `{reset:true, revision}`. Success returns `{ok:true, content, override, revision, deferred}`. Invalid input returns HTTP 400 / `SESSION_PROMPT_INVALID`; stale revisions return 409 / `SESSION_PROMPT_CONFLICT`; storage failures return 500 / `SESSION_PROMPT_FAILED`. Empty text, internal cache markers, unknown fields and content above 256 Ki characters are rejected.
|
|
58
|
+
|
|
59
|
+
A saved override is persisted in the current session transcript and restored when that same session resumes. New sessions do not inherit it. While a model request is running, accepted changes are queued and applied at the next model-turn boundary; the current request is not changed. Reset removes the override and uses the latest version file plus current runtime/plugin/application sections. Tools and user/runtime context remain separate from the full prompt override. The runtime-context protocol additionally exposes `prompt.sessionPrompt` to distinguish active and pending state.
|
|
60
|
+
|
|
61
|
+
## Validation
|
|
62
|
+
|
|
63
|
+
All tests use OS temporary directories and never touch real user configuration:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
node --import tsx --test src/context/prompt-config.test.ts src/web/prompt-config-protocol.test.ts
|
|
67
|
+
npm run typecheck
|
|
68
|
+
npm run build
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Coverage includes exact Markdown initialization, preservation/reload, restart/separate-process reads, cross-process CAS, concurrent initialization, illegal content and byte limits, actual ContextManager composition and QueryEngine future requests, real HTTP handler GET/POST/error semantics, and global route placement before session initialization.
|
package/package.json
CHANGED
|
@@ -1,93 +1,94 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "neoctl",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "TypeScript scaffold for a streaming agent runtime with a REPL UI layer.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"types": "./dist/index.d.ts",
|
|
11
|
-
"import": "./dist/index.js"
|
|
12
|
-
},
|
|
13
|
-
"./package.json": "./package.json",
|
|
14
|
-
"./model/model-metadata.json": "./dist/model/model-metadata.json",
|
|
15
|
-
"./*.js": {
|
|
16
|
-
"types": "./dist/*.d.ts",
|
|
17
|
-
"import": "./dist/*.js"
|
|
18
|
-
},
|
|
19
|
-
"./*": {
|
|
20
|
-
"types": "./dist/*.d.ts",
|
|
21
|
-
"import": "./dist/*.js"
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"engines": {
|
|
25
|
-
"node": ">=20"
|
|
26
|
-
},
|
|
27
|
-
"scripts": {
|
|
28
|
-
"postinstall": "node scripts/verify-ripgrep.cjs --skip-git",
|
|
29
|
-
"vendor:rg": "node scripts/install-ripgrep.cjs",
|
|
30
|
-
"vendor:rg:all": "node scripts/install-ripgrep.cjs --all",
|
|
31
|
-
"verify:rg": "node scripts/verify-ripgrep.cjs",
|
|
32
|
-
"build": "node -e \"import('node:fs/promises').then(fs => fs.rm('dist', { recursive: true, force: true })).catch(() => process.exit(1))\" && tsc -p tsconfig.json && node scripts/copy-model-metadata.mjs",
|
|
33
|
-
"prepare": "npm run build",
|
|
34
|
-
"prepack": "npm run build && npm run verify:rg",
|
|
35
|
-
"release:local": "node scripts/release-local.mjs",
|
|
36
|
-
"release-local": "node scripts/release-local.mjs",
|
|
37
|
-
"standalone": "npm run build && node scripts/build-standalone.mjs",
|
|
38
|
-
"standalone:clean": "node -e \"require('node:fs').rmSync('standalone',{recursive:true,force:true});require('node:fs').rmSync('.standalone-build',{recursive:true,force:true})\"",
|
|
39
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
40
|
-
"start": "node dist/repl/index.js",
|
|
41
|
-
"dev": "tsx src/repl/index.ts",
|
|
42
|
-
"web": "node dist/web/index.js",
|
|
43
|
-
"dev:web": "tsx src/web/index.ts",
|
|
44
|
-
"smoke:core": "tsx src/core/smoke-core-loop.ts",
|
|
45
|
-
"smoke:images": "tsx src/core/smoke-image-integrity.ts",
|
|
46
|
-
"smoke:tools": "tsx src/tools/smoke-tool-system.ts",
|
|
47
|
-
"smoke:exec": "tsx src/tools/smoke-exec-process.ts",
|
|
48
|
-
"smoke:context": "tsx src/context/smoke-context.ts",
|
|
49
|
-
"smoke:plugins": "tsx src/plugins/smoke-plugin-system.ts",
|
|
50
|
-
"smoke:session": "tsx src/session/smoke-session.ts",
|
|
51
|
-
"smoke:agents": "tsx src/agents/smoke-agents.ts",
|
|
52
|
-
"smoke:skills": "tsx src/skills/smoke-skills.ts",
|
|
53
|
-
"smoke:secrets": "tsx src/secrets/smoke-secrets.ts",
|
|
54
|
-
"smoke:responses": "tsx src/model/smoke-responses-mapper.ts",
|
|
55
|
-
"smoke:cli": "tsx src/repl/smoke-run-command.ts",
|
|
56
|
-
"smoke:web-plan": "tsx src/web/smoke-plan-payload.ts",
|
|
57
|
-
"smoke:web-context": "tsx src/web/smoke-runtime-context-protocol.ts",
|
|
58
|
-
"smoke:web-history": "tsx src/web/smoke-web-history.ts",
|
|
59
|
-
"smoke:web-terminal-tasks": "tsx src/web/smoke-web-terminal-tasks.ts",
|
|
60
|
-
"smoke:web-queue": "tsx src/web/smoke-web-queue.ts",
|
|
61
|
-
"smoke:openai": "tsx src/model/smoke-openai.ts"
|
|
62
|
-
},
|
|
63
|
-
"devDependencies": {
|
|
64
|
-
"@types/node": "^20.12.12",
|
|
65
|
-
"postject": "^1.0.0-alpha.6",
|
|
66
|
-
"tsx": "^4.19.0",
|
|
67
|
-
"typescript": "^5.5.0"
|
|
68
|
-
},
|
|
69
|
-
"dependencies": {
|
|
70
|
-
"@highlightjs/cdn-assets": "^11.11.1",
|
|
71
|
-
"@lydell/node-pty": "1.2.0-beta.14",
|
|
72
|
-
"@types/react": "^19.2.4",
|
|
73
|
-
"chalk": "^5.6.2",
|
|
74
|
-
"figures": "^6.1.0",
|
|
75
|
-
"gpt-tokenizer": "^3.4.0",
|
|
76
|
-
"ink": "6.8.0",
|
|
77
|
-
"marked": "^18.0.3",
|
|
78
|
-
"pptxgenjs": "^4.0.1",
|
|
79
|
-
"react": "^19.2.4",
|
|
80
|
-
"shiki": "^4.0.2",
|
|
81
|
-
"strip-ansi": "^7.2.0",
|
|
82
|
-
"wrap-ansi": "^10.0.0"
|
|
83
|
-
},
|
|
84
|
-
"bin": {
|
|
85
|
-
"neo": "dist/repl/index.js"
|
|
86
|
-
},
|
|
87
|
-
"files": [
|
|
88
|
-
"dist",
|
|
89
|
-
"scripts",
|
|
90
|
-
"vendor/ripgrep",
|
|
91
|
-
"README.md"
|
|
92
|
-
|
|
93
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "neoctl",
|
|
3
|
+
"version": "0.2.38",
|
|
4
|
+
"description": "TypeScript scaffold for a streaming agent runtime with a REPL UI layer.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json",
|
|
14
|
+
"./model/model-metadata.json": "./dist/model/model-metadata.json",
|
|
15
|
+
"./*.js": {
|
|
16
|
+
"types": "./dist/*.d.ts",
|
|
17
|
+
"import": "./dist/*.js"
|
|
18
|
+
},
|
|
19
|
+
"./*": {
|
|
20
|
+
"types": "./dist/*.d.ts",
|
|
21
|
+
"import": "./dist/*.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=20"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"postinstall": "node scripts/verify-ripgrep.cjs --skip-git",
|
|
29
|
+
"vendor:rg": "node scripts/install-ripgrep.cjs",
|
|
30
|
+
"vendor:rg:all": "node scripts/install-ripgrep.cjs --all",
|
|
31
|
+
"verify:rg": "node scripts/verify-ripgrep.cjs",
|
|
32
|
+
"build": "node -e \"import('node:fs/promises').then(fs => fs.rm('dist', { recursive: true, force: true })).catch(() => process.exit(1))\" && tsc -p tsconfig.json && node scripts/copy-model-metadata.mjs && node scripts/copy-prompt-resources.mjs",
|
|
33
|
+
"prepare": "npm run build",
|
|
34
|
+
"prepack": "npm run build && npm run verify:rg",
|
|
35
|
+
"release:local": "node scripts/release-local.mjs",
|
|
36
|
+
"release-local": "node scripts/release-local.mjs",
|
|
37
|
+
"standalone": "npm run build && node scripts/build-standalone.mjs",
|
|
38
|
+
"standalone:clean": "node -e \"require('node:fs').rmSync('standalone',{recursive:true,force:true});require('node:fs').rmSync('.standalone-build',{recursive:true,force:true})\"",
|
|
39
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
40
|
+
"start": "node dist/repl/index.js",
|
|
41
|
+
"dev": "tsx src/repl/index.ts",
|
|
42
|
+
"web": "node dist/web/index.js",
|
|
43
|
+
"dev:web": "tsx src/web/index.ts",
|
|
44
|
+
"smoke:core": "tsx src/core/smoke-core-loop.ts",
|
|
45
|
+
"smoke:images": "tsx src/core/smoke-image-integrity.ts",
|
|
46
|
+
"smoke:tools": "tsx src/tools/smoke-tool-system.ts",
|
|
47
|
+
"smoke:exec": "tsx src/tools/smoke-exec-process.ts",
|
|
48
|
+
"smoke:context": "tsx src/context/smoke-context.ts",
|
|
49
|
+
"smoke:plugins": "tsx src/plugins/smoke-plugin-system.ts",
|
|
50
|
+
"smoke:session": "tsx src/session/smoke-session.ts",
|
|
51
|
+
"smoke:agents": "tsx src/agents/smoke-agents.ts",
|
|
52
|
+
"smoke:skills": "tsx src/skills/smoke-skills.ts",
|
|
53
|
+
"smoke:secrets": "tsx src/secrets/smoke-secrets.ts",
|
|
54
|
+
"smoke:responses": "tsx src/model/smoke-responses-mapper.ts",
|
|
55
|
+
"smoke:cli": "tsx src/repl/smoke-run-command.ts",
|
|
56
|
+
"smoke:web-plan": "tsx src/web/smoke-plan-payload.ts",
|
|
57
|
+
"smoke:web-context": "tsx src/web/smoke-runtime-context-protocol.ts",
|
|
58
|
+
"smoke:web-history": "tsx src/web/smoke-web-history.ts",
|
|
59
|
+
"smoke:web-terminal-tasks": "tsx src/web/smoke-web-terminal-tasks.ts",
|
|
60
|
+
"smoke:web-queue": "tsx src/web/smoke-web-queue.ts",
|
|
61
|
+
"smoke:openai": "tsx src/model/smoke-openai.ts"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/node": "^20.12.12",
|
|
65
|
+
"postject": "^1.0.0-alpha.6",
|
|
66
|
+
"tsx": "^4.19.0",
|
|
67
|
+
"typescript": "^5.5.0"
|
|
68
|
+
},
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"@highlightjs/cdn-assets": "^11.11.1",
|
|
71
|
+
"@lydell/node-pty": "1.2.0-beta.14",
|
|
72
|
+
"@types/react": "^19.2.4",
|
|
73
|
+
"chalk": "^5.6.2",
|
|
74
|
+
"figures": "^6.1.0",
|
|
75
|
+
"gpt-tokenizer": "^3.4.0",
|
|
76
|
+
"ink": "6.8.0",
|
|
77
|
+
"marked": "^18.0.3",
|
|
78
|
+
"pptxgenjs": "^4.0.1",
|
|
79
|
+
"react": "^19.2.4",
|
|
80
|
+
"shiki": "^4.0.2",
|
|
81
|
+
"strip-ansi": "^7.2.0",
|
|
82
|
+
"wrap-ansi": "^10.0.0"
|
|
83
|
+
},
|
|
84
|
+
"bin": {
|
|
85
|
+
"neo": "dist/repl/index.js"
|
|
86
|
+
},
|
|
87
|
+
"files": [
|
|
88
|
+
"dist",
|
|
89
|
+
"scripts",
|
|
90
|
+
"vendor/ripgrep",
|
|
91
|
+
"README.md",
|
|
92
|
+
"docs/prompt-config.md"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
@@ -94,6 +94,9 @@ async function injectSeaBlob() {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
async function copyRuntimeFiles() {
|
|
97
|
+
// The editable global baseline is initialized from this version's real Markdown.
|
|
98
|
+
// Fail packaging rather than ship a runtime that cannot initialize prompt configuration.
|
|
99
|
+
await fs.access(path.join(projectRoot, "dist", "context", "system.md"));
|
|
97
100
|
await fs.cp(path.join(projectRoot, "dist"), path.join(outDir, "dist"), { recursive: true });
|
|
98
101
|
await fs.cp(path.join(projectRoot, "node_modules"), path.join(outDir, "node_modules"), {
|
|
99
102
|
recursive: true,
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { copyFile, mkdir } from "node:fs/promises";
|
|
2
|
+
|
|
3
|
+
const destination = new URL("../dist/context/", import.meta.url);
|
|
4
|
+
await mkdir(destination, { recursive: true });
|
|
5
|
+
await copyFile(new URL("../src/context/system.md", import.meta.url), new URL("system.md", destination));
|