@prjct.app/pi-activity 0.1.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 +10 -0
- package/CONTRIBUTING.md +14 -0
- package/LICENSE +21 -0
- package/README.md +67 -0
- package/docs/package.md +54 -0
- package/index.ts +183 -0
- package/package.json +61 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0
|
|
4
|
+
|
|
5
|
+
- Set the npm package identity to `@prjct.app/pi-activity`.
|
|
6
|
+
- Clarify installation, project scope, updates, removal, usage, and limitations.
|
|
7
|
+
- Document resource discovery and dependencies against the official Pi 0.85.1 guides.
|
|
8
|
+
- Include contribution and package documentation in the release file list.
|
|
9
|
+
|
|
10
|
+
Initial npm release. The documentation and naming changes preserve the existing extension runtime behavior.
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
- Integration branch: `main`. Create a feature branch from `main`.
|
|
4
|
+
- Deliver changes through a pull request using `.github/pull_request_template.md`.
|
|
5
|
+
- Use English for code, documentation, tests, issues, and pull requests.
|
|
6
|
+
- Use strict TypeScript and only APIs documented by Pi 0.85.1.
|
|
7
|
+
- Do not import host internals, monkey-patch prototypes, or access real credentials, sessions, or user configuration in tests.
|
|
8
|
+
- Keep runtime dependencies in `dependencies`; list Pi-provided packages in `peerDependencies` with a `*` range.
|
|
9
|
+
- Run `npm run check`, `npm test`, and `npm pack --dry-run` before review.
|
|
10
|
+
- Never push, open or merge a pull request, publish, or deploy without explicit authorization.
|
|
11
|
+
|
|
12
|
+
## Package documentation
|
|
13
|
+
|
|
14
|
+
Follow [docs/package.md](docs/package.md) and its versioned official references. Keep README examples consistent with registered commands, distinguish tested behavior from unverified compatibility, and verify `npm run check:package` before release.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 prjct
|
|
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
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# pi-activity
|
|
2
|
+
|
|
3
|
+
Compact, expandable tool activity and run summaries for Pi.
|
|
4
|
+
|
|
5
|
+
`@prjct.app/pi-activity` · Tool renderers and activity summaries; one extension.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
Requires Pi installed separately and Node.js **22.19 or later**. Compatibility is tested with **Pi 0.85.1**; newer versions are not yet verified. This is an independent community package.
|
|
10
|
+
|
|
11
|
+
Install with Pi's package manager:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
pi install npm:@prjct.app/pi-activity
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
For project-only installation, add `-l`: `pi install -l npm:@prjct.app/pi-activity`. Restart Pi after installation. Do not install the same extension from both GitHub and npm: Pi treats those as different package identities.
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Start Pi and ask it to inspect a file or run a command. Tool calls appear as compact rows. Use Pi's tool-output expansion shortcut (Ctrl+O by default) to inspect details. An activity summary is added after the agent settles.
|
|
22
|
+
|
|
23
|
+
The extension retains the native execution functions for the built-in tools it overrides. It changes their presentation and tracks actions, errors, and modified-file evidence. It does not remove thinking transcript rows. Avoid enabling another extension that overrides the same built-in tool renderers.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Manage the package
|
|
27
|
+
|
|
28
|
+
For an npm installation:
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
pi list
|
|
32
|
+
pi update npm:@prjct.app/pi-activity
|
|
33
|
+
pi remove npm:@prjct.app/pi-activity
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Use `pi config` to enable or disable individual resources. Use `pi config -l` for project settings and add `-l` to removal when you installed locally.
|
|
37
|
+
|
|
38
|
+
To pin version 0.1.0, use `pi install npm:@prjct.app/pi-activity@0.1.0`. Pi skips pinned npm versions during package updates. For a Git installation, update or remove using the same `git:github.com/prjct-app/pi-minimalist-activity` source instead of the npm source.
|
|
39
|
+
|
|
40
|
+
When switching from GitHub to npm, remove the Git installation first, then install the npm package and restart Pi.
|
|
41
|
+
|
|
42
|
+
## Troubleshooting
|
|
43
|
+
|
|
44
|
+
If the compact rows are missing, inspect enabled resources with `pi config` and check for another extension registering the same tool names. Terminal UI changes require TUI mode.
|
|
45
|
+
|
|
46
|
+
## Package and API documentation
|
|
47
|
+
|
|
48
|
+
Uses documented `registerTool()` overrides, working-message and working-indicator APIs, lifecycle events, and persisted summary entries.
|
|
49
|
+
|
|
50
|
+
See [Package structure and compatibility](docs/package.md) for the manifest, dependency policy, shipped resources, and official references. This package follows the [official Pi package guide](https://github.com/earendil-works/pi/blob/v0.85.1/packages/coding-agent/docs/packages.md) and [extension API guide](https://github.com/earendil-works/pi/blob/v0.85.1/packages/coding-agent/docs/extensions.md) for the tested version.
|
|
51
|
+
|
|
52
|
+
## Development
|
|
53
|
+
|
|
54
|
+
From a repository checkout:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
npm ci --ignore-scripts
|
|
58
|
+
npm run check
|
|
59
|
+
npm test
|
|
60
|
+
npm run check:package
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Pi loads the TypeScript entry point directly; no build step is required. To try this checkout for one run, use `pi -e .`. Tests use isolated temporary state and do not call model APIs. See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution rules and [CHANGELOG.md](CHANGELOG.md) for release notes.
|
|
64
|
+
|
|
65
|
+
## License
|
|
66
|
+
|
|
67
|
+
[MIT](LICENSE).
|
package/docs/package.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Package structure and compatibility
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
|
|
5
|
+
- npm name: `@prjct.app/pi-activity`.
|
|
6
|
+
- Initial version: `0.1.0`.
|
|
7
|
+
- Source repository: [prjct-app/pi-minimalist-activity](https://github.com/prjct-app/pi-minimalist-activity).
|
|
8
|
+
- Tested host: Pi `0.85.1`; Node.js `22.19+`.
|
|
9
|
+
|
|
10
|
+
The npm name and repository name may differ. Repository URLs remain unchanged. Existing runtime command names, event names, persisted entry types, and settings keys are unchanged by the package rename.
|
|
11
|
+
|
|
12
|
+
## Resource manifest
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"name": "@prjct.app/pi-activity",
|
|
17
|
+
"keywords": [
|
|
18
|
+
"pi-package"
|
|
19
|
+
],
|
|
20
|
+
"pi": {
|
|
21
|
+
"extensions": [
|
|
22
|
+
"./index.ts"
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The `pi-package` keyword makes the package discoverable. Manifest paths are relative to the package root. The extension entry point is shipped as TypeScript because Pi loads it directly. There is no CLI binary or JavaScript build artifact to install separately.
|
|
29
|
+
|
|
30
|
+
## Dependencies
|
|
31
|
+
|
|
32
|
+
Pi-provided libraries imported by this package are declared in `peerDependencies` with `*`, as required by Pi's package guide. They are not bundled. Exact Pi 0.85.1 development dependencies establish the tested baseline; the peer wildcard is not a claim that every Pi release is supported.
|
|
33
|
+
|
|
34
|
+
Third-party runtime dependencies belong in `dependencies`. Companion extensions are installed separately only when communication uses Pi's event bus; this package does not import code from a separately installed companion. A package that directly imports another Pi package's resources must instead bundle it following the official guide.
|
|
35
|
+
|
|
36
|
+
## Public interfaces
|
|
37
|
+
|
|
38
|
+
Uses documented `registerTool()` overrides, working-message and working-indicator APIs, lifecycle events, and persisted summary entries.
|
|
39
|
+
|
|
40
|
+
## Published contents
|
|
41
|
+
|
|
42
|
+
The `files` allowlist includes runtime resources, user documentation, and license files. Development tests, dependency folders, repository settings, and Git history are excluded. npm also includes `package.json` automatically. The npm lockfile remains in the repository for repeatable development installs.
|
|
43
|
+
|
|
44
|
+
Run `npm run check:package` to inspect the exact prospective tarball before release. Check that each manifest entry and each referenced local document exists in the packed file list. Only claim npm availability after verifying a successful registry publication.
|
|
45
|
+
|
|
46
|
+
## Official references
|
|
47
|
+
|
|
48
|
+
These links are pinned to the tested Pi version rather than the moving main branch:
|
|
49
|
+
|
|
50
|
+
- [Packages: manifest, sources, dependencies, filtering, and deduplication](https://github.com/earendil-works/pi/blob/v0.85.1/packages/coding-agent/docs/packages.md).
|
|
51
|
+
- [Extensions: lifecycle, commands, tools, messages, and UI APIs](https://github.com/earendil-works/pi/blob/v0.85.1/packages/coding-agent/docs/extensions.md).
|
|
52
|
+
- [TUI: components, rendering, terminal widths, and image support](https://github.com/earendil-works/pi/blob/v0.85.1/packages/coding-agent/docs/tui.md).
|
|
53
|
+
|
|
54
|
+
The installed `@earendil-works/pi-coding-agent@0.85.1` package ships the same guides under `docs/`. The [current official guide](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/packages.md) may describe changes beyond this tested baseline.
|
package/index.ts
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createBashTool,
|
|
3
|
+
createEditTool,
|
|
4
|
+
createFindTool,
|
|
5
|
+
createGrepTool,
|
|
6
|
+
createLsTool,
|
|
7
|
+
createReadTool,
|
|
8
|
+
createWriteTool,
|
|
9
|
+
type ExtensionAPI,
|
|
10
|
+
type ExtensionContext,
|
|
11
|
+
} from "@earendil-works/pi-coding-agent";
|
|
12
|
+
import { Container, Text, TruncatedText, truncateToWidth } from "@earendil-works/pi-tui";
|
|
13
|
+
import { stripVTControlCharacters } from "node:util";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import type { AgentTool } from "@earendil-works/pi-agent-core";
|
|
16
|
+
import type { TSchema } from "typebox";
|
|
17
|
+
|
|
18
|
+
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
19
|
+
|
|
20
|
+
function actionTarget(name: string, args: Record<string, unknown>): string {
|
|
21
|
+
const value = name === "bash" ? args.command
|
|
22
|
+
: name === "grep" || name === "find" ? `${args.pattern ?? ""}${args.path ? ` · ${args.path}` : ""}`
|
|
23
|
+
: args.path;
|
|
24
|
+
if (typeof value !== "string" || !value) return ".";
|
|
25
|
+
const home = homedir();
|
|
26
|
+
const target = value.startsWith(`${home}/`) ? `~/${value.slice(home.length + 1)}` : value;
|
|
27
|
+
return stripVTControlCharacters(target).replace(/\r?\n/g, " ↵ ").replace(/\t/g, " ").replace(/[\x00-\x1f\x7f]/g, "");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function detailText(result: { content: Array<{ type: string; text?: string }> }): string {
|
|
31
|
+
const text = result.content
|
|
32
|
+
.filter((item) => item.type === "text" && item.text)
|
|
33
|
+
.map((item) => item.text)
|
|
34
|
+
.join("\n")
|
|
35
|
+
.trim();
|
|
36
|
+
return text || "No additional details.";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export default function activityMode(pi: ExtensionAPI) {
|
|
40
|
+
const modifiedFiles = new Set<string>();
|
|
41
|
+
const completedActions = new Set<string>();
|
|
42
|
+
const failedActions = new Set<string>();
|
|
43
|
+
let actionCount = 0;
|
|
44
|
+
let errorCount = 0;
|
|
45
|
+
const activeTools = new Map<string, string>();
|
|
46
|
+
let lastWorkingMessage: string | undefined;
|
|
47
|
+
|
|
48
|
+
function refreshWorkingMessage(ctx: ExtensionContext, settled = false) {
|
|
49
|
+
if (ctx.mode !== "tui") return;
|
|
50
|
+
const first = activeTools.values().next().value;
|
|
51
|
+
const message = settled ? undefined : activeTools.size > 1
|
|
52
|
+
? `${activeTools.size} tools running · ${first}`
|
|
53
|
+
: first ?? "Thinking…";
|
|
54
|
+
if (message === lastWorkingMessage) return;
|
|
55
|
+
lastWorkingMessage = message;
|
|
56
|
+
ctx.ui.setWorkingMessage(message);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
pi.registerEntryRenderer("activity-summary", (entry, options, theme) => {
|
|
60
|
+
const data = entry.data as {
|
|
61
|
+
modifiedFiles?: string[];
|
|
62
|
+
failedActions?: string[];
|
|
63
|
+
actionCount?: number;
|
|
64
|
+
errorCount?: number;
|
|
65
|
+
} | undefined;
|
|
66
|
+
const files = data?.modifiedFiles ?? [];
|
|
67
|
+
const failures = data?.failedActions ?? [];
|
|
68
|
+
const count = (n: number, label: string) => `${n} ${label}${n === 1 ? "" : "s"}`;
|
|
69
|
+
// Legacy summaries stored categories, not counts; do not invent action totals.
|
|
70
|
+
const total = data?.actionCount === undefined ? "previous run" : count(data.actionCount, "action");
|
|
71
|
+
const errors = data?.errorCount === undefined ? count(failures.length, "error category") : count(data.errorCount, "error");
|
|
72
|
+
const title = `Activity · ${total} · ${count(files.length, "file")} · ${errors}`;
|
|
73
|
+
if (!options.expanded) return new TruncatedText(theme.fg(failures.length ? "error" : "muted", title), 0, 0);
|
|
74
|
+
const lines = [title, ...files.map((path) => ` • ${actionTarget("read", { path })}`)];
|
|
75
|
+
if (failures.length) lines.push(`Errors: ${failures.join(" · ")}`);
|
|
76
|
+
return new Text(lines.join("\n"), 0, 0);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
function registerCompactTool<T extends TSchema, D>(createTool: (cwd: string) => AgentTool<T, D>) {
|
|
80
|
+
const initialTool = createTool(process.cwd());
|
|
81
|
+
const name = initialTool.name;
|
|
82
|
+
|
|
83
|
+
pi.registerTool({
|
|
84
|
+
...initialTool,
|
|
85
|
+
name,
|
|
86
|
+
renderShell: "self",
|
|
87
|
+
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
88
|
+
return createTool(ctx.cwd).execute(toolCallId, params, signal, onUpdate);
|
|
89
|
+
},
|
|
90
|
+
renderCall(args, theme, context) {
|
|
91
|
+
const target = actionTarget(name, args as Record<string, unknown>);
|
|
92
|
+
const symbol = context.isPartial ? "·" : context.isError ? "✗" : "✓";
|
|
93
|
+
const color = context.isPartial ? "muted" : context.isError ? "error" : "success";
|
|
94
|
+
const title = `${theme.fg(color, symbol)} ${theme.fg("toolTitle", name)} · ${theme.fg("toolOutput", target)}`;
|
|
95
|
+
if (context.expanded) {
|
|
96
|
+
const text = context.lastComponent instanceof Text ? context.lastComponent : new Text("", 0, 0);
|
|
97
|
+
text.setText(title);
|
|
98
|
+
return text;
|
|
99
|
+
}
|
|
100
|
+
return new TruncatedText(title, 0, 0);
|
|
101
|
+
},
|
|
102
|
+
renderResult(result, { expanded }, _theme, context) {
|
|
103
|
+
if (!expanded) return new Container();
|
|
104
|
+
const text = context.lastComponent instanceof Text ? context.lastComponent : new Text("", 0, 0);
|
|
105
|
+
text.setText(detailText(result));
|
|
106
|
+
return text;
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
registerCompactTool(createReadTool);
|
|
112
|
+
registerCompactTool(createBashTool);
|
|
113
|
+
registerCompactTool(createEditTool);
|
|
114
|
+
registerCompactTool(createWriteTool);
|
|
115
|
+
registerCompactTool(createFindTool);
|
|
116
|
+
registerCompactTool(createGrepTool);
|
|
117
|
+
registerCompactTool(createLsTool);
|
|
118
|
+
|
|
119
|
+
pi.on("session_start", (_event, ctx) => {
|
|
120
|
+
activeTools.clear();
|
|
121
|
+
lastWorkingMessage = undefined;
|
|
122
|
+
if (ctx.mode !== "tui") return;
|
|
123
|
+
ctx.ui.setToolsExpanded(false);
|
|
124
|
+
ctx.ui.setWorkingIndicator({ frames: SPINNER_FRAMES, intervalMs: 160 });
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
pi.on("session_shutdown", (_event, ctx) => {
|
|
128
|
+
activeTools.clear();
|
|
129
|
+
refreshWorkingMessage(ctx, true);
|
|
130
|
+
if (ctx.mode !== "tui") return;
|
|
131
|
+
ctx.ui.setWorkingIndicator();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
pi.on("agent_start", (_event, ctx) => {
|
|
135
|
+
// A retry can emit another agent_start before the overall run settles.
|
|
136
|
+
activeTools.clear();
|
|
137
|
+
refreshWorkingMessage(ctx);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
pi.on("tool_execution_start", (event, ctx) => {
|
|
141
|
+
const target = actionTarget(event.toolName, event.args ?? {});
|
|
142
|
+
activeTools.set(event.toolCallId, truncateToWidth(`${event.toolName} · ${target}`, 72));
|
|
143
|
+
refreshWorkingMessage(ctx);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
pi.on("tool_execution_end", (event, ctx) => {
|
|
147
|
+
activeTools.delete(event.toolCallId);
|
|
148
|
+
refreshWorkingMessage(ctx);
|
|
149
|
+
actionCount++;
|
|
150
|
+
if (event.isError) {
|
|
151
|
+
errorCount++;
|
|
152
|
+
failedActions.add(event.toolName);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
completedActions.add(event.toolName);
|
|
156
|
+
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
pi.on("tool_result", (event) => {
|
|
160
|
+
if (!event.isError && (event.toolName === "edit" || event.toolName === "write") && typeof event.input.path === "string") {
|
|
161
|
+
modifiedFiles.add(event.input.path);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
pi.on("turn_start", (_event, ctx) => refreshWorkingMessage(ctx));
|
|
166
|
+
|
|
167
|
+
pi.on("agent_settled", (_event, ctx) => {
|
|
168
|
+
activeTools.clear();
|
|
169
|
+
refreshWorkingMessage(ctx, true);
|
|
170
|
+
if (ctx.mode === "tui" && actionCount > 0) pi.appendEntry("activity-summary", {
|
|
171
|
+
actionCount,
|
|
172
|
+
errorCount,
|
|
173
|
+
modifiedFiles: [...modifiedFiles],
|
|
174
|
+
completedActions: [...completedActions],
|
|
175
|
+
failedActions: [...failedActions],
|
|
176
|
+
});
|
|
177
|
+
actionCount = 0;
|
|
178
|
+
errorCount = 0;
|
|
179
|
+
modifiedFiles.clear();
|
|
180
|
+
completedActions.clear();
|
|
181
|
+
failedActions.clear();
|
|
182
|
+
});
|
|
183
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@prjct.app/pi-activity",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Compact, expandable tool activity and run summaries for Pi.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"pi-package",
|
|
8
|
+
"pi",
|
|
9
|
+
"activity",
|
|
10
|
+
"terminal",
|
|
11
|
+
"tui"
|
|
12
|
+
],
|
|
13
|
+
"pi": {
|
|
14
|
+
"extensions": [
|
|
15
|
+
"./index.ts"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"check": "tsc --noEmit",
|
|
20
|
+
"test": "node --import tsx --test tests/*.test.ts tests/*.test.mjs",
|
|
21
|
+
"check:package": "npm pack --dry-run --ignore-scripts"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=22.19.0"
|
|
25
|
+
},
|
|
26
|
+
"peerDependencies": {
|
|
27
|
+
"@earendil-works/pi-agent-core": "*",
|
|
28
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
29
|
+
"@earendil-works/pi-tui": "*",
|
|
30
|
+
"typebox": "*"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@earendil-works/pi-agent-core": "0.85.1",
|
|
34
|
+
"@earendil-works/pi-coding-agent": "0.85.1",
|
|
35
|
+
"@earendil-works/pi-tui": "0.85.1",
|
|
36
|
+
"@types/node": "^22.19.0",
|
|
37
|
+
"tsx": "^4.20.0",
|
|
38
|
+
"typebox": "1.3.7",
|
|
39
|
+
"typescript": "^5.9.3"
|
|
40
|
+
},
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "https://github.com/prjct-app/pi-minimalist-activity.git"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/prjct-app/pi-minimalist-activity#readme",
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/prjct-app/pi-minimalist-activity/issues"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public"
|
|
52
|
+
},
|
|
53
|
+
"files": [
|
|
54
|
+
"index.ts",
|
|
55
|
+
"README.md",
|
|
56
|
+
"LICENSE",
|
|
57
|
+
"CONTRIBUTING.md",
|
|
58
|
+
"CHANGELOG.md",
|
|
59
|
+
"docs/package.md"
|
|
60
|
+
]
|
|
61
|
+
}
|