@wrongstack/tools 0.303.0 → 0.305.1

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.
@@ -0,0 +1,7 @@
1
+ import type { KanbanToolInput, KanbanToolOutput } from './kanban-tool-types.js';
2
+ /**
3
+ * Handle a contract-map action, or return `undefined` when the action belongs
4
+ * to another handler. Mirrors the shape of `handleKanbanDetailAction`.
5
+ */
6
+ export declare function handleKanbanContractAction(projectRoot: string, input: KanbanToolInput, actor: string | undefined): Promise<KanbanToolOutput | undefined>;
7
+ //# sourceMappingURL=kanban-contract-actions.d.ts.map
@@ -18,12 +18,14 @@ export declare function taskInput(input: KanbanToolInput): {
18
18
  order?: number;
19
19
  retryPolicy?: "exponential" | "incremental" | "off";
20
20
  costCeilingUsd?: number;
21
+ atomic?: boolean;
21
22
  childTaskIds?: string[];
22
23
  successCriteria?: {
23
24
  id: `${string}-${string}-${string}-${string}-${string}`;
24
25
  description: string;
25
- type: 'manual';
26
+ type: "command" | "file_exists" | "file_matches" | "git_diff" | "manual" | "metric" | "test";
26
27
  status: "failed" | "passed" | "pending" | "skipped";
28
+ notes?: string;
27
29
  }[];
28
30
  goalMetrics?: {
29
31
  id: `${string}-${string}-${string}-${string}-${string}`;
@@ -53,7 +55,16 @@ export declare function taskInput(input: KanbanToolInput): {
53
55
  phaseId?: string;
54
56
  };
55
57
  };
56
- /** Union of the single `dependencyTaskId` and the multi `dependsOn[]` inputs. */
58
+ /**
59
+ * Union of the single `dependencyTaskId` and the multi `dependsOn[]` inputs.
60
+ *
61
+ * Returns `undefined` only when neither was supplied, so an explicit
62
+ * `dependsOn: []` CLEARS the list instead of being silently ignored. It used to
63
+ * collapse empty to `undefined`, which meant a dependency added by mistake
64
+ * could never be taken back from the tool surface: `dependency-incomplete`
65
+ * then held the card out of Running for good, and the only escapes were
66
+ * finishing work nobody wanted or deleting the blocking card outright.
67
+ */
57
68
  export declare function mergedDependsOn(input: KanbanToolInput): string[] | undefined;
58
69
  export declare function taskPatch(input: KanbanToolInput): {
59
70
  title: string | undefined;
@@ -67,6 +78,8 @@ export declare function taskPatch(input: KanbanToolInput): {
67
78
  labels: string[] | undefined;
68
79
  assignedAgent: string | undefined;
69
80
  dependsOn?: string[] | undefined;
81
+ atomic?: boolean;
82
+ childTaskIds?: string[];
70
83
  estimatedHours?: number;
71
84
  actualHours?: number;
72
85
  };
@@ -1,5 +1,5 @@
1
1
  import type { JSONSchema } from '@wrongstack/core/types';
2
- export declare const KANBAN_TOOL_DESCRIPTION = "Manage and audit project-scoped multi-kanban boards through the shared IPC Kanban server and its SQLite store. Managed cards enforce fully specified details and adjacent Backlog \u2192 Todo \u2192 Running \u2192 Review \u2192 Done transitions with persistent comments and evidence. Contract Map actions are optional advisory metadata unless an operator explicitly enabled strict enforcement. Use verify_completion to validate executable success criteria before Done.";
3
- export declare const KANBAN_TOOL_USAGE_HINT = "Use this for durable project kanban state. Read workbench when orienting across boards; it returns bounded Now, Next, Blocked, Review lanes and operational alerts. Before coding mutation, create a fully detailed card on a managed board with executable acceptance criteria, then call start_task. The runtime blocks product mutations until start_task binds a ready Running card. Do not create, inspect, repair, or enable a Contract Map during ordinary work; every map mode stays off the execution and completion path. Worker completion enters Review; Done requires passed acceptance criteria and review evidence. Surface existing strict-map findings for operator review without stopping work to repair them.";
2
+ export declare const KANBAN_TOOL_DESCRIPTION = "Durable project task boards: create and move cards, record checks, notes, links and assignments. The board is a record of the work, not a permit for it \u2014 nothing here gates other tools. Managed boards additionally enforce ordered Backlog \u2192 Todo \u2192 Running \u2192 Review \u2192 Done transitions; release_managed_lifecycle turns that off.";
3
+ export declare const KANBAN_TOOL_USAGE_HINT = "Track substantial or multi-step work so it survives the session; a trivial edit or a question needs no card. Work stays on ONE board: call list_boards first and add_task to the board this project already uses. create_board is for a genuinely separate line of work, not for each new piece of it \u2014 a second board splits the same effort in two, and a board holding a single card is the usual sign. Common flow: list_boards or search_tasks to orient, add_task to record work, start_task when you begin, update_check with checkStatus \"passed\" to tick acceptance criteria (read their ids from get_task), then transition_task. On a managed board a refused transition names the field it wants \u2014 supply it and retry. When the acceptance criterion is something a machine can run, say so: set checkType (\"command\", \"test\", \"file_exists\", \"file_matches\", \"git_diff\", \"metric\") and put the command, pattern or path in checkNotes, then verify_completion executes it and the result is real evidence. Leave checkType off (or \"manual\") only for criteria that genuinely need a human eye \u2014 a manual check records your assertion, it does not test anything.";
4
4
  export declare const KANBAN_INPUT_SCHEMA: JSONSchema;
5
5
  //# sourceMappingURL=kanban-tool-schema.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type { SerializedTaskGraph } from '@wrongstack/core/types';
2
2
  import type { AssignKanbanTaskInput, KanbanAgentRunStatus, KanbanBoard, KanbanBoardSummary, KanbanCompletionGateEnforcement, KanbanContractEdgeType, KanbanContractEnforcement, KanbanContractGraph, KanbanContractGraphEnforcement, KanbanContractGraphEvaluation, KanbanContractNodeKind, KanbanContractNodeState, KanbanDecompositionSubtask, KanbanEvent, KanbanLifecycleStage, KanbanOrchestrationSnapshot, KanbanQueueHealth, KanbanSearchResult, KanbanTask, KanbanTaskPriority, KanbanTaskStatus, KanbanTaskType, KanbanVerificationReport, KanbanWorkbenchSnapshot } from '@wrongstack/kanban';
3
- export type KanbanAction = 'list_boards' | 'get_board' | 'create_board' | 'duplicate_board' | 'update_board' | 'adopt_managed_lifecycle' | 'delete_board' | 'generate_board' | 'export_markdown' | 'export_task_graph' | 'sync_task_graph' | 'create_from_graph' | 'import_session_tasks' | 'search_tasks' | 'ready_tasks' | 'snapshot' | 'workbench' | 'add_column' | 'update_column' | 'delete_column' | 'add_task' | 'split_task' | 'merge_tasks' | 'copy_task' | 'transfer_task' | 'get_task' | 'start_task' | 'update_task' | 'transition_task' | 'repair_managed_projection' | 'move_task' | 'delete_task' | 'set_chain' | 'get_chain' | 'get_contract_graph' | 'configure_contract_graph' | 'upsert_contract_node' | 'link_contract_nodes' | 'remove_contract_node' | 'remove_contract_edge' | 'evaluate_contract_graph' | 'claim_task' | 'release_task' | 'assign_task' | 'mark_assignment' | 'heartbeat_assignment' | 'recover_stale' | 'events' | 'queue_health' | 'add_dependency' | 'add_goal_metric' | 'update_goal_metric' | 'add_check' | 'update_check' | 'add_note' | 'add_link' | 'verify_completion' | 'split_atomic' | 'assess_atomicity' | 'propose_decomposition';
3
+ export type KanbanAction = 'list_boards' | 'get_board' | 'create_board' | 'duplicate_board' | 'update_board' | 'adopt_managed_lifecycle' | 'release_managed_lifecycle' | 'delete_board' | 'generate_board' | 'export_markdown' | 'export_task_graph' | 'sync_task_graph' | 'create_from_graph' | 'import_session_tasks' | 'search_tasks' | 'ready_tasks' | 'snapshot' | 'workbench' | 'add_column' | 'update_column' | 'delete_column' | 'add_task' | 'split_task' | 'merge_tasks' | 'copy_task' | 'transfer_task' | 'get_task' | 'start_task' | 'update_task' | 'transition_task' | 'repair_managed_projection' | 'move_task' | 'delete_task' | 'set_chain' | 'get_chain' | 'claim_task' | 'release_task' | 'assign_task' | 'mark_assignment' | 'heartbeat_assignment' | 'recover_stale' | 'events' | 'queue_health' | 'add_dependency' | 'add_goal_metric' | 'update_goal_metric' | 'add_check' | 'update_check' | 'remove_check' | 'add_note' | 'add_link' | 'verify_completion' | 'split_atomic' | 'assess_atomicity' | 'propose_decomposition' | 'get_contract_graph' | 'configure_contract_graph' | 'upsert_contract_node' | 'remove_contract_node' | 'add_contract_edge' | 'remove_contract_edge';
4
4
  export interface KanbanToolInput extends Omit<AssignKanbanTaskInput, 'status'> {
5
5
  action: KanbanAction;
6
6
  boardId?: string | undefined;
@@ -9,16 +9,8 @@ export interface KanbanToolInput extends Omit<AssignKanbanTaskInput, 'status'> {
9
9
  targetBoardId?: string | undefined;
10
10
  taskIds?: string[] | undefined;
11
11
  chainId?: string | undefined;
12
- contractNodeId?: string | undefined;
13
- contractNodeKind?: KanbanContractNodeKind | undefined;
14
- contractNodeState?: KanbanContractNodeState | undefined;
15
- contractEnforcement?: KanbanContractEnforcement | undefined;
16
- contractGraphEnforcement?: KanbanContractGraphEnforcement | undefined;
17
- contractEdgeId?: string | undefined;
18
- contractEdgeType?: KanbanContractEdgeType | undefined;
19
12
  fromNodeId?: string | undefined;
20
13
  toNodeId?: string | undefined;
21
- contractRationale?: string | undefined;
22
14
  baseline?: string | number | undefined;
23
15
  threshold?: string | number | undefined;
24
16
  title?: string | undefined;
@@ -55,6 +47,30 @@ export interface KanbanToolInput extends Omit<AssignKanbanTaskInput, 'status'> {
55
47
  checkId?: string | undefined;
56
48
  checkDescription?: string | undefined;
57
49
  checkStatus?: 'pending' | 'passed' | 'failed' | 'skipped' | undefined;
50
+ /**
51
+ * Verifier type for an acceptance criterion. Narrower than `KanbanCheckType`
52
+ * on purpose: only the types the default deterministic registry can actually
53
+ * run are offered, so a criterion this tool creates never reports
54
+ * `skipped — no verifier plugin registered`.
55
+ */
56
+ checkType?: 'manual' | 'command' | 'test' | 'file_exists' | 'file_matches' | 'git_diff' | 'metric' | undefined;
57
+ /** Executable body for a non-manual `checkType`; plugins read it before the description. */
58
+ checkNotes?: string | undefined;
59
+ contractEnforcement?: KanbanContractGraphEnforcement | undefined;
60
+ contractNodeId?: string | undefined;
61
+ contractNodeKind?: KanbanContractNodeKind | undefined;
62
+ contractNodeTitle?: string | undefined;
63
+ contractNodeDescription?: string | undefined;
64
+ contractNodeState?: KanbanContractNodeState | undefined;
65
+ contractNodeEnforcement?: KanbanContractEnforcement | undefined;
66
+ contractCheckId?: string | undefined;
67
+ contractMetricId?: string | undefined;
68
+ contractWaiverReason?: string | undefined;
69
+ contractEdgeId?: string | undefined;
70
+ contractEdgeFrom?: string | undefined;
71
+ contractEdgeTo?: string | undefined;
72
+ contractEdgeType?: KanbanContractEdgeType | undefined;
73
+ contractEdgeRationale?: string | undefined;
58
74
  note?: string | undefined;
59
75
  author?: string | undefined;
60
76
  url?: string | undefined;
@@ -108,7 +124,12 @@ export interface KanbanToolInput extends Omit<AssignKanbanTaskInput, 'status'> {
108
124
  archiveMissingTasks?: boolean | undefined;
109
125
  preserveManualDependencies?: boolean | undefined;
110
126
  /** Full dependency id list for add_task/update_task (superset of dependencyTaskId). */
127
+ /** `update_task`: an explicit `[]` clears every dependency. */
111
128
  dependsOn?: string[] | undefined;
129
+ /** `update_task`: mark a card a composite parent, or `false` to make it a leaf again. */
130
+ atomic?: boolean | undefined;
131
+ /** `update_task`: an explicit `[]` detaches every child from a composite parent. */
132
+ childTaskIds?: string[] | undefined;
112
133
  /** Estimated effort in hours for add_task/update_task. */
113
134
  estimatedHours?: number | undefined;
114
135
  /** Actual effort in hours for add_task/update_task. */
@@ -143,9 +164,9 @@ export interface KanbanToolOutput {
143
164
  chain?: KanbanTask[] | undefined;
144
165
  snapshot?: KanbanOrchestrationSnapshot | undefined;
145
166
  workbench?: KanbanWorkbenchSnapshot | undefined;
146
- contractGraph?: KanbanContractGraph | undefined;
147
- contractEvaluation?: KanbanContractGraphEvaluation | undefined;
148
167
  taskGraph?: SerializedTaskGraph | undefined;
149
168
  markdown?: string | undefined;
169
+ contractGraph?: KanbanContractGraph | null | undefined;
170
+ contractEvaluation?: KanbanContractGraphEvaluation | undefined;
150
171
  }
151
172
  //# sourceMappingURL=kanban-tool-types.d.ts.map