nolo-cli 0.1.43 → 0.1.44
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/LICENSE +21 -0
- package/README.md +102 -249
- package/app/utils/myContentItems.ts +28 -0
- package/client/localRuntimeAdapter.test.ts +1 -1
- package/client/localRuntimeDryRun.test.ts +2 -0
- package/package.json +25 -21
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Bin Zhang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,290 +1,143 @@
|
|
|
1
|
-
#
|
|
1
|
+
# nolo-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Local-first agent automation for open-source maintainers.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/nolo-cli)
|
|
6
|
+
[](https://www.npmjs.com/package/nolo-cli)
|
|
7
|
+
[](https://github.com/nolotus/nolo-cli/actions/workflows/test.yml)
|
|
8
|
+
[](./LICENSE)
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
`nolo-cli` is a Bun-powered command-line and TUI client for running local and
|
|
11
|
+
remote AI agents around real repository maintenance. It focuses on practical
|
|
12
|
+
open-source maintainer workflows: Codex-assisted review, issue triage, release
|
|
13
|
+
smoke checks, docs updates, runtime diagnostics, and automation-friendly JSON
|
|
14
|
+
commands.
|
|
14
15
|
|
|
15
|
-
The
|
|
16
|
-
small: status line, text input, lightweight slash commands, and script-backed
|
|
17
|
-
Agent chat. A richer Ink UI can replace the rendering layer later without
|
|
18
|
-
changing the session model.
|
|
16
|
+
The project is moving toward a no-login, bring-your-own-key local mode:
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
- `nolo run "review this repository"` runs a local Codex-style agent in the
|
|
19
|
+
current repository without requiring a Nolo account.
|
|
20
|
+
- Authenticated Nolo workflows remain available for synced agents, dialogs,
|
|
21
|
+
docs, tables, and machine-bound automation.
|
|
22
|
+
- The desktop direction is local-first by default: users should be able to run
|
|
23
|
+
with their own OpenAI, Anthropic, OpenRouter, Codex CLI, Qoder, or other
|
|
24
|
+
provider credentials without depending on hosted Nolo infrastructure.
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
Code, Codex CLI, and Copilot CLI are strongest when a developer is already
|
|
26
|
-
inside a codebase. Nolo's CLI should sit between ordinary users and developers:
|
|
27
|
-
one assistant by default, with specialist agents, docs, tables, dialogs, and
|
|
28
|
-
synced workspace data one slash command away.
|
|
29
|
-
|
|
30
|
-
## Usage
|
|
26
|
+
The npm package is published as `nolo-cli`:
|
|
31
27
|
|
|
32
28
|
```bash
|
|
33
29
|
npm install -g nolo-cli
|
|
34
30
|
nolo
|
|
35
|
-
|
|
36
|
-
# see which install you are running
|
|
37
31
|
nolo doctor
|
|
38
32
|
nolo --version
|
|
39
|
-
|
|
40
|
-
# no Nolo login required: runs the local Codex CLI in the current directory
|
|
41
33
|
nolo run "review this repository"
|
|
42
|
-
|
|
43
|
-
# update later from your shell
|
|
44
|
-
nolo update
|
|
45
34
|
```
|
|
46
35
|
|
|
47
|
-
|
|
36
|
+
## Why This Matters
|
|
48
37
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
Open-source maintainers are increasingly using coding agents for issue triage,
|
|
39
|
+
pull-request review, release checks, documentation, and repository maintenance.
|
|
40
|
+
Those workflows need more than a single chat box: they need repeatable command
|
|
41
|
+
entry points, local runtime checks, scoped shell permissions, structured
|
|
42
|
+
task/dialog history, release smoke checks, and automation-friendly output.
|
|
52
43
|
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
`nolo-cli` is aimed at that layer. It is designed to make agent-maintainer
|
|
45
|
+
workflows inspectable and scriptable, while keeping local runtime boundaries
|
|
46
|
+
clear.
|
|
55
47
|
|
|
56
|
-
|
|
57
|
-
account. It resolves to the built-in `local-codex` agent, runs in the current
|
|
58
|
-
working directory, and uses the local Codex CLI installation. This is intended
|
|
59
|
-
for repository-local review, triage, and release-check tasks.
|
|
48
|
+
## Maintainer Workflows
|
|
60
49
|
|
|
61
|
-
|
|
50
|
+
The project is built around ongoing maintainer duties that can be reviewed,
|
|
51
|
+
tested, and improved in public:
|
|
62
52
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
53
|
+
- **Pull request review:** run local Codex or another CLI agent against a diff,
|
|
54
|
+
ask for risk-focused review, and keep the review prompt reproducible.
|
|
55
|
+
- **Issue triage:** classify bug reports, installation failures, runtime
|
|
56
|
+
provider issues, and docs gaps into actionable labels.
|
|
57
|
+
- **Release management:** run doctor checks, smoke checks, changelog review,
|
|
58
|
+
and package verification before publishing.
|
|
59
|
+
- **Security review:** keep shell, machine connector, BYOK provider, and token
|
|
60
|
+
boundaries explicit so contributors can reason about local access.
|
|
66
61
|
|
|
67
|
-
|
|
62
|
+
See [MAINTAINER_WORKFLOWS.md](./MAINTAINER_WORKFLOWS.md) for concrete command
|
|
63
|
+
patterns and [OPEN_SOURCE_BOUNDARY.md](./OPEN_SOURCE_BOUNDARY.md) for what is
|
|
64
|
+
being opened versus intentionally kept private.
|
|
68
65
|
|
|
69
|
-
|
|
70
|
-
nolo login --server https://nolo.chat
|
|
71
|
-
nolo whoami
|
|
72
|
-
nolo
|
|
73
|
-
```
|
|
66
|
+
## Public Source
|
|
74
67
|
|
|
75
|
-
|
|
76
|
-
authorization. In SSH or browserless environments, use:
|
|
68
|
+
The first reusable source modules are now mirrored in this repository:
|
|
77
69
|
|
|
78
|
-
|
|
79
|
-
nolo
|
|
80
|
-
|
|
70
|
+
- [`src/localRun.ts`](./src/localRun.ts) documents and tests the no-login local
|
|
71
|
+
run contract for `nolo run` and `nolo chat`.
|
|
72
|
+
- [`src/providerConfig.ts`](./src/providerConfig.ts) documents the BYOK
|
|
73
|
+
provider credential boundary: public config stores environment variable
|
|
74
|
+
references, not raw API keys.
|
|
75
|
+
- [`src/runtimeBoundary.ts`](./src/runtimeBoundary.ts) documents the local
|
|
76
|
+
runtime boundary for no-login CLI and desktop flows: local provider
|
|
77
|
+
credentials, workspace-scoped shell policy, local persistence, and no remote
|
|
78
|
+
sync by default.
|
|
79
|
+
- [`src/localRun.test.ts`](./src/localRun.test.ts) verifies that shorthand runs
|
|
80
|
+
use local Codex without requiring Nolo auth, while explicit agent runs remain
|
|
81
|
+
distinct.
|
|
81
82
|
|
|
82
|
-
|
|
83
|
-
token directly:
|
|
83
|
+
Run the public tests with:
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
|
|
86
|
+
bun test src
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
|
|
90
|
-
agent runs.
|
|
89
|
+
Current public source status:
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
| Area | Public evidence |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| No-login local run | `src/localRun.ts`, `src/localRun.test.ts`, passing GitHub Actions |
|
|
94
|
+
| BYOK provider boundary | `src/providerConfig.ts`, `src/providerConfig.test.ts`, PR #8 |
|
|
95
|
+
| Local runtime boundary | `src/runtimeBoundary.ts`, `src/runtimeBoundary.test.ts`, PR #8 |
|
|
96
|
+
| Release management | `RELEASE_CHECKLIST.md`, issue #9 |
|
|
97
|
+
| Source mirror safety | `OPEN_SOURCE_BOUNDARY.md`, `SOURCE_MIRROR_CHECKLIST.md`, issues #1 and #5 |
|
|
94
98
|
|
|
95
|
-
|
|
96
|
-
nolo --help
|
|
97
|
-
nolo doctor
|
|
98
|
-
nolo update
|
|
99
|
-
nolo
|
|
100
|
-
nolo run "review this repository"
|
|
101
|
-
nolo chat "triage the failing tests"
|
|
102
|
-
nolo chat
|
|
103
|
-
nolo connect
|
|
104
|
-
nolo connect --watch
|
|
105
|
-
nolo connect --daemon
|
|
106
|
-
nolo daemon --server-url https://api.nolo.chat --machine-key sk_machine_xxx
|
|
107
|
-
nolo machine status
|
|
108
|
-
nolo run "summarize my latest agent dialogs"
|
|
109
|
-
nolo doc create --title "Trip Notes" --body "hello" --sync local,us --dry-run
|
|
110
|
-
nolo doc create --title "Proxy Notes" --description "Windows setup" --body-file ./proxy.md --sync local,main,us --allow-secrets
|
|
111
|
-
nolo skill-doc create --title "Agent Query Skill" --description "Inspect recent agent dialogs" --body-file ./skill.md --sync local,main,us
|
|
112
|
-
nolo space read 01KKY77TT0DA9NY7TNW3R7255N --content-key page-user-id --brief
|
|
113
|
-
nolo agent list --json
|
|
114
|
-
nolo agent bind-current agent-user-1-agent-1
|
|
115
|
-
nolo agent runtime-doctor agent-user-1-agent-1
|
|
116
|
-
nolo agent smoke-current agent-user-1-agent-1 --msg "ping"
|
|
117
|
-
nolo chat --agent agent-pub-01APPBUILDER00000001YAII3I --msg "你好"
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
For document creation, prefer the CLI over direct scripts. Use `nolo doc create`
|
|
121
|
-
for ordinary pages and `nolo skill-doc create` for skill-backed pages. Both
|
|
122
|
-
support `--sync`, `--dry-run`, `--json`, and `--allow-secrets`, and both write
|
|
123
|
-
for the current auth token user rather than a demo bootstrap user.
|
|
99
|
+
## Project Status
|
|
124
100
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
nolo connect --watch # keep this terminal process online with periodic heartbeats
|
|
130
|
-
nolo connect --ws # keep a live connector websocket for bound agent runs
|
|
131
|
-
nolo connect --daemon # start connect --ws silently in the background
|
|
132
|
-
nolo daemon --server-url https://api.nolo.chat --machine-key sk_machine_xxx
|
|
133
|
-
nolo machine status # list machines registered to the current profile
|
|
134
|
-
```
|
|
101
|
+
This repository is the public OSS entry point for the CLI project. The package
|
|
102
|
+
is actively maintained and has frequent releases on npm. As of June 2026,
|
|
103
|
+
`nolo-cli` is prepared at version `0.1.44`; npm reports about 3.5k downloads
|
|
104
|
+
for the last-month window ending 2026-06-02.
|
|
135
105
|
|
|
136
|
-
|
|
137
|
-
|
|
106
|
+
The current implementation is developed in a broader private monorepo because
|
|
107
|
+
it shares product infrastructure with Nolo. Public source mirroring is being
|
|
108
|
+
prepared in a staged way so that reusable CLI, local runtime, provider adapter,
|
|
109
|
+
desktop local-mode, docs, tests, and maintainer workflow code can be opened
|
|
110
|
+
without exposing private product records, credentials, production operations,
|
|
111
|
+
billing systems, or user-data paths.
|
|
138
112
|
|
|
139
|
-
|
|
113
|
+
See [OPEN_SOURCE_STATUS.md](./OPEN_SOURCE_STATUS.md) and
|
|
114
|
+
[ROADMAP.md](./ROADMAP.md) for the public-source migration plan.
|
|
140
115
|
|
|
141
|
-
|
|
142
|
-
nolo daemon --server-url https://api.nolo.chat --machine-key sk_machine_xxx
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
Future published package shape:
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
npx @nolo/daemon@latest --server-url https://api.nolo.chat --machine-key sk_machine_xxx
|
|
149
|
-
```
|
|
116
|
+
## Maintenance Scope
|
|
150
117
|
|
|
151
|
-
The
|
|
152
|
-
websocket open, and executes bound CLI agents on this computer. Agents bind to a
|
|
153
|
-
machine, not to a workspace or project folder.
|
|
118
|
+
The public maintenance scope for this project is:
|
|
154
119
|
|
|
155
|
-
|
|
120
|
+
- Agent-first terminal and TUI workflows for OSS maintainers.
|
|
121
|
+
- No-login local agent runs in the current repository.
|
|
122
|
+
- BYOK provider configuration for CLI and desktop local mode.
|
|
123
|
+
- Local-first agent runtime boundaries and scoped shell permissions.
|
|
124
|
+
- Runtime doctor, release smoke-check, and package verification workflows.
|
|
125
|
+
- Optional authenticated commands for synced Nolo agents, dialogs, docs, tables,
|
|
126
|
+
and machine connectors.
|
|
156
127
|
|
|
157
|
-
|
|
158
|
-
nolo agent bind-current <agentKey>
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
The agent keeps its own CLI settings. The binding only records which connected
|
|
162
|
-
machine must be online when that agent runs.
|
|
163
|
-
|
|
164
|
-
Run a one-command connector smoke test:
|
|
165
|
-
|
|
166
|
-
```bash
|
|
167
|
-
nolo agent runtime-doctor <agentKey>
|
|
168
|
-
nolo agent smoke-current <agentKey> --msg "ping"
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
`runtime-doctor` checks whether the agent is a CLI agent and whether the current
|
|
172
|
-
machine has the required CLI capability. `smoke-current` heartbeats the current
|
|
173
|
-
machine, binds the agent to it, opens a temporary connector websocket, calls
|
|
174
|
-
`/api/agent/run`, and prints the returned dialog id/content.
|
|
175
|
-
|
|
176
|
-
## Product Shape
|
|
177
|
-
|
|
178
|
-
The preferred command model is Agent-first:
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
nolo agent list
|
|
182
|
-
nolo agent switch <agent>
|
|
183
|
-
nolo agent read <agent>
|
|
184
|
-
nolo agent update <agent> --model gpt-5.4 --cli-provider codex --api-source cli
|
|
185
|
-
nolo agent run <agent> "检查最近失败任务"
|
|
186
|
-
nolo agent run frontend-implementer --msg "修一个小的通知弹窗 CSS 问题"
|
|
187
|
-
nolo agent list --space <space>
|
|
188
|
-
nolo dialog list
|
|
189
|
-
nolo dialog list --space <space>
|
|
190
|
-
nolo dialog read <dialog>
|
|
191
|
-
nolo dialog delete <dialog...> --yes
|
|
192
|
-
nolo doc list --agent <agent>
|
|
193
|
-
nolo table query --table meta-0e95801d90-NOLOTASKBOARD --limit 20
|
|
194
|
-
nolo table query --table meta-0e95801d90-NOLOTASKBOARD --columns '["title","status","owner","priority","codeStatus"]' --no-base-fields --output items
|
|
195
|
-
nolo table update-row --table meta-0e95801d90-NOLOTASKBOARD --row 01ROWID --changes '{"status":"已完成"}'
|
|
196
|
-
nolo table add-column --table meta-0e95801d90-NOLOTASKBOARD --schema-write-ok --name "blockedBy" --label "Blocked By"
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
`agent list`, `dialog list`, and record delete commands use global server
|
|
200
|
-
candidates for the current CLI profile: the selected `--server` / `NOLO_SERVER`
|
|
201
|
-
plus known Nolo cluster peers. List commands merge tombstones so a newer delete
|
|
202
|
-
on one server hides older live records from another. Dialog, doc, skill-doc,
|
|
203
|
-
space, and agent public-record deletes send the delete to all target servers;
|
|
204
|
-
each server applies the normal tombstone/cascade behavior for that record type.
|
|
205
|
-
|
|
206
|
-
`nolo table add-column` mutates table schema metadata, so it requires
|
|
207
|
-
`--schema-write-ok` and should be run serially per table. Row-level table writes
|
|
208
|
-
do not require this flag.
|
|
209
|
-
|
|
210
|
-
For agent config inspection and small config mutations, prefer the CLI-native
|
|
211
|
-
commands instead of ad hoc scripts:
|
|
212
|
-
|
|
213
|
-
- `nolo agent list` is CLI-native and prefers the local cache, then degrades to
|
|
214
|
-
remote query when the local LevelDB cache is unavailable or locked.
|
|
215
|
-
- `nolo agent read <agent>` reads local cached agent records first, then falls
|
|
216
|
-
back to remote fetch + local cache refresh across known server candidates.
|
|
217
|
-
- if the local LevelDB cache is unavailable or locked, `nolo agent read`
|
|
218
|
-
degrades to remote-only lookup instead of hard-failing on the local DB.
|
|
219
|
-
- `nolo agent update <agent> ...` is CLI-native and supports small targeted
|
|
220
|
-
updates such as `--model`, `--cli-provider`, `--api-source`, and repeated
|
|
221
|
-
`--field key=value`.
|
|
222
|
-
|
|
223
|
-
Account ownership matters for private agent maintenance. Default new tests,
|
|
224
|
-
validation dialogs, task-board writes, machine-bound agent runs, and
|
|
225
|
-
user-visible results should write to the current operator account
|
|
226
|
-
`0e95801d90`. The legacy
|
|
227
|
-
`b2e06f801f` / platform-demo account still owns older public/shared records, but
|
|
228
|
-
it is being retired as the default write target. Use `nolo agent read`,
|
|
229
|
-
`nolo agent update`, and repo-native helpers as the normal entrypoints; only
|
|
230
|
-
owner-only operations that explicitly target legacy records should use the
|
|
231
|
-
maintained platform-demo token from `scripts/testUtils.ts` or a regenerated
|
|
232
|
-
token from `scripts/generateToken.ts`. Do not copy token strings into docs,
|
|
233
|
-
logs, or prompts.
|
|
234
|
-
|
|
235
|
-
Inside the current TUI, examples of supported slash commands include:
|
|
236
|
-
`/agent`, `/agents`, `/switch`, `/context` (alias `/ctx`), `/dialog`, `/doc`,
|
|
237
|
-
`/help`, `/new`, `/customize`, `/login`, `/profile`, `/version`, `/quit`
|
|
238
|
-
(alias `/exit`), and `/update` (which maps to `nolo update`).
|
|
239
|
-
|
|
240
|
-
Future product-direction examples for the broader TUI command model:
|
|
241
|
-
|
|
242
|
-
```text
|
|
243
|
-
/agent list
|
|
244
|
-
/agent switch ops
|
|
245
|
-
/dialog open latest
|
|
246
|
-
/doc list
|
|
247
|
-
/table query builtin-dialog-probe-runs
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
See [`docs/nolo-cli-tui.md`](../../docs/nolo-cli-tui.md) for the product and
|
|
251
|
-
technical direction.
|
|
252
|
-
|
|
253
|
-
## Building for Publish
|
|
254
|
-
|
|
255
|
-
The CLI is developed in a monorepo with workspace dependencies (`ai` and
|
|
256
|
-
`connector-experimental`). To generate a publish-safe package that can be
|
|
257
|
-
installed via npm outside the monorepo:
|
|
258
|
-
|
|
259
|
-
```bash
|
|
260
|
-
bun run build:publish
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
This creates a `dist/` directory with:
|
|
264
|
-
- All source files from the `files` array in package.json
|
|
265
|
-
- Inlined workspace dependencies (copied as nested directories)
|
|
266
|
-
- A modified package.json with workspace dependencies stripped
|
|
267
|
-
|
|
268
|
-
The `dist/` directory is the publish-safe artifact consumed by the CI npm
|
|
269
|
-
publish workflow:
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
bun ./scripts/release/prepareCliPublishPackage.ts --out-dir .tmp/nolo-cli-publish
|
|
273
|
-
cd .tmp/nolo-cli-publish
|
|
274
|
-
npm pack
|
|
275
|
-
```
|
|
128
|
+
## Links
|
|
276
129
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
130
|
+
- npm package: https://www.npmjs.com/package/nolo-cli
|
|
131
|
+
- Nolo: https://nolo.chat
|
|
132
|
+
- Maintainer workflows: [MAINTAINER_WORKFLOWS.md](./MAINTAINER_WORKFLOWS.md)
|
|
133
|
+
- Open-source boundary: [OPEN_SOURCE_BOUNDARY.md](./OPEN_SOURCE_BOUNDARY.md)
|
|
134
|
+
- Open-source status: [OPEN_SOURCE_STATUS.md](./OPEN_SOURCE_STATUS.md)
|
|
135
|
+
- Roadmap: [ROADMAP.md](./ROADMAP.md)
|
|
136
|
+
- BYOK provider setup: [docs/provider-setup.md](./docs/provider-setup.md)
|
|
137
|
+
- Desktop local mode: [docs/desktop-local-mode.md](./docs/desktop-local-mode.md)
|
|
138
|
+
- Release checklist: [RELEASE_CHECKLIST.md](./RELEASE_CHECKLIST.md)
|
|
139
|
+
- Source mirror checklist: [SOURCE_MIRROR_CHECKLIST.md](./SOURCE_MIRROR_CHECKLIST.md)
|
|
282
140
|
|
|
283
|
-
|
|
284
|
-
- **Repo-local**: Runs from source (`packages/cli/index.ts`) with workspace
|
|
285
|
-
dependencies resolved by the monorepo
|
|
286
|
-
- **Published**: Runs from dist (`dist/index.ts`) with workspace dependencies
|
|
287
|
-
inlined as nested directories
|
|
141
|
+
## License
|
|
288
142
|
|
|
289
|
-
|
|
290
|
-
process does not transpile; it only restructures the package for standalone use.
|
|
143
|
+
MIT
|
|
@@ -153,6 +153,34 @@ const resolveRecordTimestamp = (record: UserContentRecord): string | number =>
|
|
|
153
153
|
record.created ??
|
|
154
154
|
0;
|
|
155
155
|
|
|
156
|
+
export function buildOwnedAppContentItems(
|
|
157
|
+
apps: readonly AppSummary[],
|
|
158
|
+
myAppsLabel: string
|
|
159
|
+
): OwnedAppContentItem[] {
|
|
160
|
+
return apps
|
|
161
|
+
.flatMap((app): OwnedAppContentItem[] => {
|
|
162
|
+
const contentKey = app.appKey ?? normalizeAppRouteId(app.appId ?? "");
|
|
163
|
+
if (!contentKey) return [];
|
|
164
|
+
const timestamp = app.modifiedOn ?? 0;
|
|
165
|
+
return [
|
|
166
|
+
{
|
|
167
|
+
source: "owned-app",
|
|
168
|
+
title: typeof app.name === "string" && app.name.trim() ? app.name : contentKey,
|
|
169
|
+
type: ContentType.APP,
|
|
170
|
+
contentKey,
|
|
171
|
+
pinned: false,
|
|
172
|
+
createdAt: timestamp,
|
|
173
|
+
updatedAt: timestamp,
|
|
174
|
+
spaceId: null,
|
|
175
|
+
spaceName: myAppsLabel,
|
|
176
|
+
serverOrigin: app.serverOrigin,
|
|
177
|
+
app,
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
})
|
|
181
|
+
.sort((left, right) => toTimestamp(right.updatedAt) - toTimestamp(left.updatedAt));
|
|
182
|
+
}
|
|
183
|
+
|
|
156
184
|
export function buildMyContentItemsFromUserData(
|
|
157
185
|
records: UserContentRecord[],
|
|
158
186
|
currentServer: string,
|
|
@@ -1996,7 +1996,7 @@ describe("CLI local runtime adapter", () => {
|
|
|
1996
1996
|
cliWorkspaceTool: true,
|
|
1997
1997
|
exitCode: 0,
|
|
1998
1998
|
});
|
|
1999
|
-
expect(spawnCalls[0]?.cmd.at(-5)?.endsWith("
|
|
1999
|
+
expect(spawnCalls[0]?.cmd.at(-5)?.endsWith("index.ts")).toBe(true);
|
|
2000
2000
|
expect(spawnCalls[0]?.cmd.slice(-4)).toEqual([
|
|
2001
2001
|
"dialog",
|
|
2002
2002
|
"list",
|
|
@@ -12,6 +12,7 @@ describe("CLI local runtime dry run", () => {
|
|
|
12
12
|
"readFile",
|
|
13
13
|
"writeFile",
|
|
14
14
|
"editFile",
|
|
15
|
+
"globFiles",
|
|
15
16
|
"searchFiles",
|
|
16
17
|
"execShell",
|
|
17
18
|
"listDialogs",
|
|
@@ -22,6 +23,7 @@ describe("CLI local runtime dry run", () => {
|
|
|
22
23
|
"readSpace",
|
|
23
24
|
"readDoc",
|
|
24
25
|
"readSkillDoc",
|
|
26
|
+
"listTables",
|
|
25
27
|
"queryTableRows",
|
|
26
28
|
"cliWhoami",
|
|
27
29
|
"cliDoctor",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nolo-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.44",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent-first terminal workspace for Nolo",
|
|
6
6
|
"repository": {
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"nolo": "index.ts"
|
|
16
16
|
},
|
|
17
17
|
"module": "index.ts",
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test": "bun test",
|
|
20
|
+
"pack:dry-run": "npm pack --dry-run"
|
|
21
|
+
},
|
|
18
22
|
"files": [
|
|
19
23
|
"index.ts",
|
|
20
24
|
"agentRuntimeLocal.ts",
|
|
@@ -60,38 +64,38 @@
|
|
|
60
64
|
"runtimeModeArgs.ts",
|
|
61
65
|
"tableCommands.ts",
|
|
62
66
|
"updateCommands.ts",
|
|
63
|
-
"client/
|
|
64
|
-
"client/streamingOutput.ts",
|
|
65
|
-
"client/localRuntimeAdapter.ts",
|
|
66
|
-
"client/compactDialog.test.ts",
|
|
67
|
-
"client/localProviderResolver.ts",
|
|
67
|
+
"client/localAgentRecords.ts",
|
|
68
68
|
"client/localDialogRecords.ts",
|
|
69
|
+
"client/localToolPolicy.test.ts",
|
|
70
|
+
"client/localRuntimeAdapter.ts",
|
|
71
|
+
"client/localDialogRecords.test.ts",
|
|
72
|
+
"client/agentConfigResolver.ts",
|
|
69
73
|
"client/localAgentRecords.test.ts",
|
|
70
|
-
"client/compactDialog.ts",
|
|
71
|
-
"client/hybridRecordStore.ts",
|
|
72
74
|
"client/agentConfigResolver.test.ts",
|
|
73
|
-
"client/localAgentRecords.ts",
|
|
74
75
|
"client/localProviderResolver.test.ts",
|
|
75
|
-
"client/
|
|
76
|
-
"client/
|
|
77
|
-
"client/agentConfigResolver.ts",
|
|
76
|
+
"client/hybridRecordStore.test.ts",
|
|
77
|
+
"client/localRuntimeAdapter.test.ts",
|
|
78
78
|
"client/localToolPolicy.ts",
|
|
79
|
-
"client/
|
|
80
|
-
"client/agentRun.test.ts",
|
|
79
|
+
"client/compactDialog.ts",
|
|
81
80
|
"client/streamingOutput.test.ts",
|
|
82
|
-
"client/hybridRecordStore.test.ts",
|
|
83
81
|
"client/profileConfig.ts",
|
|
84
82
|
"client/profileConfig.test.ts",
|
|
85
|
-
"client/
|
|
86
|
-
"
|
|
83
|
+
"client/streamingOutput.ts",
|
|
84
|
+
"client/hybridRecordStore.ts",
|
|
85
|
+
"client/compactDialog.test.ts",
|
|
86
|
+
"client/agentRun.test.ts",
|
|
87
|
+
"client/localRuntimeDryRun.test.ts",
|
|
88
|
+
"client/agentRun.ts",
|
|
89
|
+
"client/localProviderResolver.ts",
|
|
87
90
|
"tui/readlineWorkspace.ts",
|
|
91
|
+
"tui/session.ts",
|
|
88
92
|
"README.md",
|
|
89
|
-
"ai/index.ts",
|
|
90
93
|
"ai/agent.ts",
|
|
91
94
|
"ai/agent/agentSlice.ts",
|
|
92
95
|
"ai/agent/machineRunPermissions.ts",
|
|
93
|
-
"
|
|
96
|
+
"ai/index.ts",
|
|
94
97
|
"connector-experimental/machineInfo.ts",
|
|
98
|
+
"connector-experimental/protocol.ts",
|
|
95
99
|
"machineDaemonCommands.ts",
|
|
96
100
|
"machineHeartbeatCommands.ts",
|
|
97
101
|
"machineWatchCommands.ts",
|
|
@@ -161,11 +165,11 @@
|
|
|
161
165
|
"cli/machineStatusCommands.ts",
|
|
162
166
|
"cli/authCommands.ts",
|
|
163
167
|
"cli/tableCommands.ts",
|
|
164
|
-
"cli/client/
|
|
168
|
+
"cli/client/localToolPolicy.ts",
|
|
165
169
|
"cli/client/agentConfigResolver.ts",
|
|
166
170
|
"cli/client/localProviderResolver.ts",
|
|
167
171
|
"cli/client/localDialogRecords.ts",
|
|
168
|
-
"cli/client/
|
|
172
|
+
"cli/client/streamingOutput.ts",
|
|
169
173
|
"cli/client/compactDialog.ts",
|
|
170
174
|
"cli/tui/session.ts",
|
|
171
175
|
"cli/connectorRunArtifact.ts",
|