@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 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.
@@ -1,6 +1,6 @@
1
1
  # Getting Started
2
2
 
3
- GoodVibes Agent `0.1.6` is the current installable public alpha of the personal operator assistant built on the GoodVibes TUI foundation.
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
 
@@ -1,6 +1,6 @@
1
1
  # Release And Publishing
2
2
 
3
- GoodVibes Agent `0.1.6` is the current installable public alpha release.
3
+ GoodVibes Agent `0.1.7` is the current installable public alpha release.
4
4
 
5
5
  ## Package Identity
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-agent",
3
- "version": "0.1.6",
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",
@@ -32,6 +32,7 @@ const REQUIRED_BIN_COMMANDS = ['goodvibes-agent'] as const;
32
32
  const REQUIRED_TARBALL_PATHS = [
33
33
  'README.md',
34
34
  'CHANGELOG.md',
35
+ 'LICENSE',
35
36
  'package.json',
36
37
  'src/main.ts',
37
38
  'bin/goodvibes-agent.ts',
@@ -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.', command: '/delegate --wrfc <task>', kind: 'command', safety: 'delegates' },
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 TUI chat/planning coordinator path. */
58
+ /** Submit a Planning panel answer through the normal Agent chat/planning coordinator path. */
59
59
  submitPlanningAnswer?: (answer: string) => void;
60
- /** Pause the TUI-owned planning loop and return focus to normal prompt input. */
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 spaces. */
99
+ /** Stable workspace project id for project:<projectId> planning namespaces. */
100
100
  projectPlanningProjectId?: string;
101
- /** TUI-owned persistent work plan store. */
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: 'tui',
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
- 'TUI-owned project planning loop is active for this turn.',
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
- `Knowledge space: ${state.knowledgeSpaceId}`,
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.6';
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;