@pellux/goodvibes-agent 0.1.6 → 0.1.7
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 +6 -0
- package/LICENSE +21 -0
- package/docs/getting-started.md +1 -1
- package/docs/release-and-publishing.md +1 -1
- package/package.json +2 -1
- package/src/cli/package-verification.ts +1 -0
- package/src/input/agent-workspace.ts +12 -1
- package/src/panels/builtin/shared.ts +4 -4
- package/src/planning/project-planning-coordinator.ts +3 -3
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to GoodVibes Agent will be recorded here.
|
|
4
4
|
|
|
5
|
+
## 0.1.7 - 2026-05-31
|
|
6
|
+
|
|
7
|
+
- Replaced active planning-loop output and tests that still described planning as TUI-owned with Agent-owned planning state and planning namespace language.
|
|
8
|
+
- Added `LICENSE` to the explicit package file contract and release verification so npm tarballs cannot omit license text.
|
|
9
|
+
- Prevented the operator workspace from dispatching placeholder delegation commands such as `/delegate --wrfc <task>`; those actions now provide guidance until the user supplies real task text.
|
|
10
|
+
|
|
5
11
|
## 0.1.6 - 2026-05-31
|
|
6
12
|
|
|
7
13
|
- Made the publish helper use exported `NODE_AUTH_TOKEN` or `NPM_TOKEN` automatically by writing a temporary npm user config for publish commands.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Michael Davis and GoodVibes contributors
|
|
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/docs/getting-started.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
|
-
GoodVibes Agent `0.1.
|
|
3
|
+
GoodVibes Agent `0.1.7` is the current installable public alpha of the personal operator assistant built on the GoodVibes TUI foundation.
|
|
4
4
|
|
|
5
5
|
## Requirements
|
|
6
6
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pellux/goodvibes-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Near-fork GoodVibes operator assistant with the GoodVibes TUI shell, renderer, input, fullscreen workspace, and daemon-connected Agent product brain.",
|
|
6
6
|
"type": "module",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
13
|
"bin",
|
|
14
|
+
"LICENSE",
|
|
14
15
|
".goodvibes/agents",
|
|
15
16
|
".goodvibes/skills",
|
|
16
17
|
".goodvibes/GOODVIBES.md",
|
|
@@ -233,7 +233,7 @@ export const AGENT_WORKSPACE_CATEGORIES: readonly AgentWorkspaceCategory[] = [
|
|
|
233
233
|
detail: 'Agent does not become the coding TUI. Build, implement, fix, patch, and review work must be handed to GoodVibes TUI with the full original ask and WRFC only when explicitly requested.',
|
|
234
234
|
actions: [
|
|
235
235
|
{ id: 'delegate-guidance', label: 'Delegation rule', detail: 'For build/fix/review work, delegate one request to GoodVibes TUI instead of spawning local Engineer/Reviewer/Tester roots.', kind: 'guidance', safety: 'delegates' },
|
|
236
|
-
{ id: 'review-command', label: 'Review delegation command', detail: 'Use /delegate --wrfc only when the user explicitly asks for code review/build execution.
|
|
236
|
+
{ id: 'review-command', label: 'Review delegation command', detail: 'Use /delegate --wrfc <task> only when the user explicitly asks for code review/build execution. Close this workspace and include the actual task text.', kind: 'guidance', safety: 'delegates' },
|
|
237
237
|
{ id: 'remote-policy', label: 'Remote runner policy', detail: 'Remote dispatch/rerun is blocked in Agent; TUI owns runner topology for delegated build work.', command: '/remote dispatch', kind: 'command', safety: 'blocked' },
|
|
238
238
|
],
|
|
239
239
|
},
|
|
@@ -395,6 +395,17 @@ export class AgentWorkspace {
|
|
|
395
395
|
};
|
|
396
396
|
return;
|
|
397
397
|
}
|
|
398
|
+
if (/<[^>\s]+(?:\s+[^>]*)?>/.test(action.command)) {
|
|
399
|
+
this.status = `Placeholder command not dispatched: ${action.command}.`;
|
|
400
|
+
this.lastActionResult = {
|
|
401
|
+
kind: 'guidance',
|
|
402
|
+
title: `${action.label} needs details`,
|
|
403
|
+
detail: 'This action is a command template. Close the workspace and run it with real task text instead of placeholder values.',
|
|
404
|
+
command: action.command,
|
|
405
|
+
safety: action.safety,
|
|
406
|
+
};
|
|
407
|
+
return;
|
|
408
|
+
}
|
|
398
409
|
if (!this.context?.executeCommand || !this.dispatchCommand) {
|
|
399
410
|
this.status = `Command dispatch is not available for ${action.command}.`;
|
|
400
411
|
this.lastActionResult = {
|
|
@@ -55,9 +55,9 @@ export interface BuiltinPanelDeps {
|
|
|
55
55
|
resumeSession?: (sessionId: string) => void;
|
|
56
56
|
/** Request a shell repaint directly rather than routing through a retired event path. */
|
|
57
57
|
requestRender?: () => void;
|
|
58
|
-
/** Submit a Planning panel answer through the normal
|
|
58
|
+
/** Submit a Planning panel answer through the normal Agent chat/planning coordinator path. */
|
|
59
59
|
submitPlanningAnswer?: (answer: string) => void;
|
|
60
|
-
/** Pause the
|
|
60
|
+
/** Pause the Agent-owned planning loop and return focus to normal prompt input. */
|
|
61
61
|
dismissPlanning?: () => void;
|
|
62
62
|
/** ForensicsRegistry for the Forensics panel. */
|
|
63
63
|
forensicsRegistry?: import('@/runtime/index.ts').ForensicsRegistry;
|
|
@@ -96,9 +96,9 @@ export interface BuiltinPanelDeps {
|
|
|
96
96
|
adaptivePlanner?: AdaptivePlanner;
|
|
97
97
|
/** Passive SDK-backed project planning artifact service. */
|
|
98
98
|
projectPlanningService?: ProjectPlanningService;
|
|
99
|
-
/** Stable workspace project id for project:<projectId> planning
|
|
99
|
+
/** Stable workspace project id for project:<projectId> planning namespaces. */
|
|
100
100
|
projectPlanningProjectId?: string;
|
|
101
|
-
/**
|
|
101
|
+
/** Agent-owned persistent work plan store. */
|
|
102
102
|
workPlanStore?: import('../../work-plans/work-plan-store.ts').WorkPlanStore;
|
|
103
103
|
/** Shared system-messages panel instance attached from boot so low-priority chatter stays out of conversation. */
|
|
104
104
|
systemMessagesPanel?: import('../system-messages-panel.ts').SystemMessagesPanel;
|
|
@@ -198,7 +198,7 @@ export class ProjectPlanningCoordinator {
|
|
|
198
198
|
metadata: {
|
|
199
199
|
...(existing?.metadata ?? {}),
|
|
200
200
|
active: true,
|
|
201
|
-
owner: '
|
|
201
|
+
owner: 'agent',
|
|
202
202
|
source: 'conversation',
|
|
203
203
|
lastPromptAt: now,
|
|
204
204
|
},
|
|
@@ -471,13 +471,13 @@ export class ProjectPlanningCoordinator {
|
|
|
471
471
|
.join('\n') || '- none recorded yet';
|
|
472
472
|
|
|
473
473
|
return [
|
|
474
|
-
'
|
|
474
|
+
'Agent-owned planning loop is active for this turn.',
|
|
475
475
|
'Do not execute code changes, spawn agents, or claim implementation is complete unless the user explicitly approves execution after the plan is structurally ready.',
|
|
476
476
|
'Be relentless and thorough: challenge vague wording, inspect relevant context before proposing execution, and ask exactly one focused question when information is missing.',
|
|
477
477
|
'Do not ask broad questions like "what is in scope?" without examples. Break broad planning gaps into concrete choices, explain tradeoffs, and recommend a default the user can accept or correct.',
|
|
478
478
|
'',
|
|
479
479
|
`Project id: ${this.projectId}`,
|
|
480
|
-
`
|
|
480
|
+
`Planning namespace: ${state.knowledgeSpaceId}`,
|
|
481
481
|
`Readiness: ${evaluation.readiness}`,
|
|
482
482
|
`Execution approved: ${state.executionApproved ? 'yes' : 'no'}`,
|
|
483
483
|
`Goal: ${state.goal || '(missing)'}`,
|
package/src/version.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { join } from 'node:path';
|
|
|
6
6
|
// The prebuild script updates the fallback value before compilation.
|
|
7
7
|
// Uses import.meta.dir (Bun) to locate package.json relative to this file,
|
|
8
8
|
// which is correct regardless of the process working directory.
|
|
9
|
-
let _version = '0.1.
|
|
9
|
+
let _version = '0.1.7';
|
|
10
10
|
try {
|
|
11
11
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
|
|
12
12
|
_version = pkg.version ?? _version;
|