@wrongstack/core 0.302.2 → 0.305.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.
Files changed (97) hide show
  1. package/README.md +1 -1
  2. package/dist/chronicle/index.js +117 -30
  3. package/dist/chronicle/project-server.js +12 -5
  4. package/dist/coordination/agents/index.js +4645 -3448
  5. package/dist/coordination/agents/project-agent-auto-optimize.d.ts +116 -0
  6. package/dist/coordination/agents/project-agent-capture-window.d.ts +29 -0
  7. package/dist/coordination/agents/project-agent-config-io.d.ts +11 -0
  8. package/dist/coordination/agents/project-agent-consolidation.d.ts +34 -2
  9. package/dist/coordination/agents/project-agent-directive-outcome.d.ts +57 -0
  10. package/dist/coordination/agents/project-agent-files.d.ts +12 -3
  11. package/dist/coordination/agents/project-agent-identity-types.d.ts +4 -0
  12. package/dist/coordination/agents/project-agent-identity.d.ts +38 -11
  13. package/dist/coordination/agents/project-agent-learning-entries.d.ts +8 -2
  14. package/dist/coordination/agents/project-agent-learning-policy.d.ts +22 -1
  15. package/dist/coordination/agents/project-agent-learning-structured.d.ts +72 -1
  16. package/dist/coordination/agents/project-agent-optimizer.d.ts +49 -0
  17. package/dist/coordination/agents/project-agent-quarantine.d.ts +63 -0
  18. package/dist/coordination/agents/project-agent-skill-layer.d.ts +146 -0
  19. package/dist/coordination/agents/role-skills.d.ts +11 -1
  20. package/dist/coordination/agents/types.d.ts +10 -2
  21. package/dist/coordination/director-prompts.d.ts +19 -6
  22. package/dist/coordination/director-tools.d.ts +2 -2
  23. package/dist/coordination/fleet.d.ts +0 -6
  24. package/dist/coordination/index.d.ts +1 -1
  25. package/dist/coordination/index.js +5746 -4326
  26. package/dist/coordination/mail-tools.d.ts +1 -1
  27. package/dist/core/agent-types.d.ts +4 -2
  28. package/dist/core/agent.d.ts +1 -0
  29. package/dist/core/context.d.ts +19 -0
  30. package/dist/core/conversation-state.d.ts +14 -0
  31. package/dist/core/fallback-profile-manager.d.ts +70 -2
  32. package/dist/core/index.js +317 -108
  33. package/dist/core/system-prompt-blocks.d.ts +1 -1
  34. package/dist/core/system-prompt-builder.d.ts +13 -1
  35. package/dist/core/system-prompt-glossary.d.ts +73 -0
  36. package/dist/core/system-prompt-memory-skills.d.ts +2 -2
  37. package/dist/defaults/index.js +1635 -1120
  38. package/dist/execution/council-orchestrator.d.ts +3 -13
  39. package/dist/execution/index.js +3136 -2706
  40. package/dist/execution/one-shot-llm.d.ts +5 -0
  41. package/dist/goal/index.js +7 -0
  42. package/dist/hq/index.js +17 -7
  43. package/dist/hq/protocol/kanban.d.ts +21 -0
  44. package/dist/hq/protocol.js +5 -1
  45. package/dist/hq/redaction.d.ts +14 -0
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.js +5502 -3483
  48. package/dist/infrastructure/index.js +247 -122
  49. package/dist/kernel/events/agent-events.d.ts +28 -0
  50. package/dist/plugin/index.js +111 -7
  51. package/dist/registry/index.js +11 -0
  52. package/dist/registry/tool-registry.d.ts +8 -0
  53. package/dist/replay/hash.d.ts +9 -0
  54. package/dist/replay/index.js +14 -4
  55. package/dist/replay/replay-provider-runner.d.ts +31 -1
  56. package/dist/security/index.js +92 -21
  57. package/dist/security/kanban-boundary.d.ts +5 -1
  58. package/dist/security/secret-vault.d.ts +2 -0
  59. package/dist/session-catalog/index.js +86 -10
  60. package/dist/session-catalog/project-server.js +100 -17
  61. package/dist/session-catalog/protocol.d.ts +20 -4
  62. package/dist/session-catalog/store.d.ts +19 -3
  63. package/dist/storage/index.js +305 -69
  64. package/dist/storage/memory-consolidator.d.ts +4 -2
  65. package/dist/storage/plan-store.d.ts +1 -1
  66. package/dist/storage/session-resume-validation.d.ts +24 -0
  67. package/dist/storage/session-store/directory-scan.d.ts +5 -1
  68. package/dist/storage/session-store/fork-session.d.ts +13 -1
  69. package/dist/storage/session-store/load-cache.d.ts +11 -0
  70. package/dist/storage/session-store/prune-helpers.d.ts +5 -0
  71. package/dist/storage/session-store.d.ts +18 -0
  72. package/dist/tasking/index.js +5 -0
  73. package/dist/tools/index.js +1151 -831
  74. package/dist/types/config/mcp-features.d.ts +31 -1
  75. package/dist/types/config/root.d.ts +23 -1
  76. package/dist/types/config/skills-fleet-brain.d.ts +34 -0
  77. package/dist/types/config/tools.d.ts +22 -0
  78. package/dist/types/config/ui.d.ts +14 -0
  79. package/dist/types/config.d.ts +1 -0
  80. package/dist/types/default-config.d.ts +1 -0
  81. package/dist/types/index.d.ts +2 -2
  82. package/dist/types/index.js +23 -0
  83. package/dist/types/multi-agent.d.ts +7 -0
  84. package/dist/types/session.d.ts +9 -1
  85. package/dist/types/task-graph.d.ts +2 -0
  86. package/dist/types/tool-executor.d.ts +2 -0
  87. package/dist/utils/index.d.ts +1 -0
  88. package/dist/utils/index.js +217 -76
  89. package/dist/utils/project-state-guard.d.ts +21 -0
  90. package/dist/utils/session-scoped-path.d.ts +17 -0
  91. package/dist/utils/todos-format.d.ts +20 -0
  92. package/instructions/leader-after-task.md +3 -4
  93. package/instructions/system-lite.md +17 -14
  94. package/instructions/system-pro.md +29 -30
  95. package/instructions/system.md +29 -28
  96. package/package.json +3 -3
  97. package/skills/wrongstack-kanban/SKILL.md +95 -93
@@ -281,10 +281,40 @@ export interface SageConfig {
281
281
  * many days. Undefined/0 disables purge (default).
282
282
  */
283
283
  purgeDeletedAfterDays?: number | undefined;
284
+ /**
285
+ * How deep periodic hygiene verifies anchors.
286
+ * - `existence` (default): file/path still exists (`fs.access` only).
287
+ * - `content`: also content-hash / symbol / command resolution.
288
+ * - `git`: content checks plus git blob hash comparison when available.
289
+ */
290
+ verifyDepth?: 'existence' | 'content' | 'git' | undefined;
284
291
  } | undefined;
285
292
  embeddings?: {
286
- /** Optional future semantic layer. Disabled by default and never required. */
293
+ /**
294
+ * When true, retrieval re-ranks lexical candidates with the offline
295
+ * hashing embedding provider (hybrid). Default: false. Fail-open:
296
+ * lexical results are always available if embeddings fail.
297
+ */
287
298
  enabled?: boolean | undefined;
288
299
  } | undefined;
300
+ /**
301
+ * Opt-in automatic capture of durable tool outcomes into SAGE.
302
+ * Off by default — operators enable per-project when they want
303
+ * command success notes recorded without an explicit `remember` call.
304
+ */
305
+ capture?: {
306
+ /** Persist successful command/tool outcomes as `tool_outcome` memories. Default: false. */
307
+ toolOutcomes?: boolean | undefined;
308
+ /** Persist recurring error signatures as `error_pattern` memories. Default: false. */
309
+ errorPatterns?: boolean | undefined;
310
+ } | undefined;
311
+ /**
312
+ * Optional automated triage scheduling. When true, `setupSage` schedules a
313
+ * daily job (1h after boot, then every 24h): hygiene + bounded triage that
314
+ * files review proposals (never auto-deletes). Default: false.
315
+ */
316
+ triage?: {
317
+ dailyDryRun?: boolean | undefined;
318
+ } | undefined;
289
319
  }
290
320
  //# sourceMappingURL=mcp-features.d.ts.map
@@ -1,10 +1,11 @@
1
1
  import type { ConfiguredHook, HookEvent } from '../hooks.js';
2
- import type { AutonomyConfig, ChronicleConfig, IndexingConfig, LaunchConfig, SessionLoggingConfig, SyncConfig } from './autonomy.js';
3
2
  import type { AdaptiveConcurrencyConfig, CircuitBreakerRuntimeConfig, ContextConfig } from './context.js';
3
+ import type { AutonomyConfig, ChronicleConfig, IndexingConfig, LaunchConfig, SessionLoggingConfig, SyncConfig } from './autonomy.js';
4
4
  import type { FeaturesConfig, LogConfig, MCPServerConfig, PluginConfig, PluginManagerConfig, SageConfig } from './mcp-features.js';
5
5
  import type { CustomModelDefinition, ModelMatrixEntry, ProviderConfig } from './providers.js';
6
6
  import type { CloudSyncConfig, HqClientConfig, ModelRuntimeConfig, SystemPromptConfig } from './runtime.js';
7
7
  import type { BrainConfig, FleetConfig, SkillsConfig } from './skills-fleet-brain.js';
8
+ import type { ThemePresetId } from './ui.js';
8
9
  import type { ToolsConfig } from './tools.js';
9
10
  export interface GitBehaviorConfig {
10
11
  /**
@@ -40,6 +41,15 @@ export interface Config {
40
41
  * unset, surfaces fall back to their own browser/system detection.
41
42
  */
42
43
  uiLocale?: string | undefined;
44
+ /**
45
+ * TUI color theme preset — read by the TUI on boot to apply the matching
46
+ * palette, and written by the `/theme` slash command (CLI REPL and TUI) so
47
+ * the choice persists across restarts. Unconstrained string at the config
48
+ * layer: the TUI owns the canonical preset list and applies a fallback
49
+ * (`catppuccin`) when the stored value is unknown, so a forward-compat
50
+ * drift on the TUI side never breaks the config round-trip.
51
+ */
52
+ themePreset?: ThemePresetId | undefined;
43
53
  providers?: Record<string, ProviderConfig>;
44
54
  /**
45
55
  * Top-level custom models (maps modelId → definition). Merged with
@@ -134,6 +144,18 @@ export interface Config {
134
144
  primaryProbeInterval?: number | undefined;
135
145
  stickyFallbackTurns?: number | undefined;
136
146
  } | undefined;
147
+ /**
148
+ * Maximum number of candidates appended by the last-resort fallback sweep
149
+ * (`resolveAllConfigured`). When the smart default, bridge, and named/default
150
+ * profiles have all failed, every other configured provider is appended —
151
+ * this cap bounds the chain so a config with many providers does not produce
152
+ * a degenerate sequence of doomed requests during a systemic outage.
153
+ *
154
+ * Set to a higher value for rich multi-provider configs that want maximum
155
+ * diversity; set to 0 to disable the last-resort append entirely. The
156
+ * compiled-in default is exposed as `MAX_LAST_RESORT_CANDIDATES` (12).
157
+ */
158
+ fallbackMaxLastResortCandidates?: number | undefined;
137
159
  /**
138
160
  * Lifecycle command/HTTP hooks, keyed by event. Commands receive HookInput
139
161
  * JSON on stdin; HTTP hooks receive the same object as a POST body. A typed
@@ -128,6 +128,40 @@ export interface FleetConfig {
128
128
  } | undefined;
129
129
  /** Brain-gated fleet supervisor (rebalance/steer/spawn-helper). */
130
130
  supervisor?: FleetSupervisorConfig | undefined;
131
+ /** Roster-agent self-learning: capture → optimize → per-skill addenda. */
132
+ learning?: AgentLearningConfig | undefined;
133
+ }
134
+ /**
135
+ * Automatic optimization of roster-agent learning.
136
+ *
137
+ * Capture is always automatic. This section governs the *distillation* pass
138
+ * that turns captured directives into per-skill project addenda and a
139
+ * consolidated role document, then archives and resets the raw buffer.
140
+ */
141
+ export interface AgentLearningConfig {
142
+ autoOptimize?: {
143
+ /** Run the distillation pass automatically. Default true. */
144
+ enabled?: boolean | undefined;
145
+ /** Raw buffer size (bytes) that makes a role eligible. Default 8192. */
146
+ thresholdBytes?: number | undefined;
147
+ /** Never optimize a buffer with fewer directives than this. Default 4. */
148
+ minEntries?: number | undefined;
149
+ /**
150
+ * Directives routed to a skill that has no addendum yet. Reaching this
151
+ * count makes a role eligible even below `thresholdBytes`. Default 3.
152
+ */
153
+ minPendingSkillDirectives?: number | undefined;
154
+ /** Minimum gap between automatic passes for one role. Default 6h. */
155
+ minIntervalMs?: number | undefined;
156
+ /** Quiet period after the last capture before a pass starts. Default 20s. */
157
+ debounceMs?: number | undefined;
158
+ /**
159
+ * Evaluate every role once when the fleet host starts, so roles that
160
+ * became eligible before this session are not stuck waiting for their
161
+ * next capture. Default true.
162
+ */
163
+ sweepOnStart?: boolean | undefined;
164
+ } | undefined;
131
165
  }
132
166
  /** Config surface for the brain-gated FleetSupervisor. */
133
167
  export interface FleetSupervisorConfig {
@@ -39,6 +39,28 @@ export interface ToolsConfig {
39
39
  * `/settings` ("Filesystem access").
40
40
  */
41
41
  restrictToProjectRoot?: boolean | undefined;
42
+ /**
43
+ * Require a ready, running **managed** Kanban card before any product
44
+ * mutation. Default: **false** — Kanban records work, it does not permit it,
45
+ * and that is the shipped contract the system prompt and the `kanban` tool
46
+ * description both state.
47
+ *
48
+ * Turning this on inverts that for this installation: a mutating tool
49
+ * (`write`, `edit`, `exec`, …) is refused until the run is bound to a card
50
+ * that is on a managed board, passes `evaluateContractGraphReadiness`, and
51
+ * sits in Running with a live assignment. Control tools (`kanban`, `todo`,
52
+ * `plan`, `task`) are always exempt so the agent can always record evidence
53
+ * or start the next card.
54
+ *
55
+ * Non-managed boards — session mirrors, SDD mirrors, plain imports — are
56
+ * skipped rather than blocked: they structurally cannot carry a lifecycle,
57
+ * so demanding one would deadlock every mutation with no reachable remedy.
58
+ * They still fall through to their path-scoped `boundary` policy.
59
+ *
60
+ * Independent of the two checks that are ALWAYS on regardless of this flag:
61
+ * the dispatch lease fence and the board/task filesystem `boundary`.
62
+ */
63
+ kanbanGovernance?: boolean | undefined;
42
64
  /**
43
65
  * Per-command policy for the `exec` tool's allowlist. The tool ships a
44
66
  * curated default allowlist of dev/build commands; this extends or trims it.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared UI theme preset identifiers.
3
+ *
4
+ * Lives in core so the Config schema, the CLI `/theme` slash command, and
5
+ * the TUI runtime can all reference the same string union without
6
+ * importing the TUI package (which would invert the dependency direction).
7
+ *
8
+ * Keep in lockstep with `THEME_OPTIONS` in `packages/tui/src/theme.ts`.
9
+ * Adding a preset here is intentional — it also requires updating the TUI
10
+ * presets map AND the CLI `VALID_PRESETS` set in `tui-theme-adapter.ts`.
11
+ */
12
+ export declare const THEME_PRESET_IDS: readonly ['catppuccin', 'tokyo-night', 'nord', 'cyberpunk', 'dracula', 'gruvbox-dark', 'solarized-dark', 'one-dark', 'monokai', 'rose-pine', 'kanagawa', 'ayu-dark', 'everforest', 'night-owl', 'synthwave'];
13
+ export type ThemePresetId = (typeof THEME_PRESET_IDS)[number];
14
+ //# sourceMappingURL=ui.d.ts.map
@@ -6,5 +6,6 @@ export * from './config/providers.js';
6
6
  export * from './config/mcp-features.js';
7
7
  export * from './config/autonomy.js';
8
8
  export * from './config/skills-fleet-brain.js';
9
+ export * from './config/ui.js';
9
10
  export * from './config/root.js';
10
11
  //# sourceMappingURL=config.d.ts.map
@@ -14,6 +14,7 @@ export declare const DEFAULT_TOOLS_CONFIG: Readonly<{
14
14
  disabledTools: readonly string[];
15
15
  autoExtendLimit: true;
16
16
  restrictToProjectRoot: true;
17
+ kanbanGovernance: false;
17
18
  loopDetection: Readonly<{
18
19
  mode: 'steer-then-cut' | 'cut' | 'off';
19
20
  steerThreshold: number;
@@ -13,8 +13,8 @@ export { ProviderError, classifyProviderError, effectiveInputTokens, isContextOv
13
13
  export type { CacheTtl, Capabilities, JsonSchemaSpec, Provider, ProviderContextLimit, ProviderErrorBody, ProviderErrorKind, ReasoningConfig, ReasoningEffort, ReasoningRequest, Request, RequestCacheControl, Response, ResponseFormat, SafetySetting, StopReason, StreamEvent, Usage } from './provider.js';
14
14
  export { StreamHangError } from './provider.js';
15
15
  export type { ProviderRunner, RunProviderOptions } from './provider-runner.js';
16
- export { DEFAULT_TUI_THINKING_WORD, FLEET_CHAT_VERBOSITY_VALUES, MAX_TUI_THINKING_WORD_LENGTH, normalizeTokenSavingTier, normalizeTuiThinkingWord, resolveFleetChatVerbosity, resolveTokenSavingTier } from './config.js';
17
- export type { AdaptiveConcurrencyConfig, AutonomyConfig, BrainConfig, BrainCouncilConfig, BrainCouncilVoterConfig, BrainModelEntry, CircuitBreakerRuntimeConfig, ConcreteTokenSavingTier, Config, ConfigLoader, ConfigStore, ContextConfig, CouncilPersonaDefinition, CouncilToolConfig, CouncilToolProfileDefinition, CustomModelDefinition, ExecDangerConfig, ExecToolConfig, FeaturesConfig, FleetChatVerbosity, FleetConfig, FleetSupervisorConfig, GitBehaviorConfig, HqClientConfig, IndexingConfig, InputHistoryConfig, LaunchConfig, LaunchMenuChoice, LogConfig, LoopDetectionConfig, MCPHealthConfig, MCPHealthThresholds, MCPServerConfig, ModelMatrixEntry, ModelRuntimeCacheConfig, ModelRuntimeConfig, ModelRuntimeParametersConfig, ModelRuntimeReasoningConfig, NextStepsToolConfig, PluginConfig, PluginManagerConfig, ProviderApiKey, ProviderConfig, SageConfig, SessionLoggingConfig, SkillsConfig, SyncCategory, SyncConfig, TokenSavingTier, ToolDescriptionMode, ToolDescriptionModeConfig, ToolResultRenderMode, ToolResultRenderModeConfig, ToolsConfig } from './config.js';
16
+ export { DEFAULT_TUI_THINKING_WORD, FLEET_CHAT_VERBOSITY_VALUES, MAX_TUI_THINKING_WORD_LENGTH, normalizeTokenSavingTier, normalizeTuiThinkingWord, resolveFleetChatVerbosity, resolveTokenSavingTier, THEME_PRESET_IDS } from './config.js';
17
+ export type { AdaptiveConcurrencyConfig, AgentLearningConfig, AutonomyConfig, BrainConfig, BrainCouncilConfig, BrainCouncilVoterConfig, BrainModelEntry, CircuitBreakerRuntimeConfig, ConcreteTokenSavingTier, Config, ConfigLoader, ConfigStore, ContextConfig, CouncilPersonaDefinition, CouncilToolConfig, CouncilToolProfileDefinition, CustomModelDefinition, ExecDangerConfig, ExecToolConfig, FeaturesConfig, FleetChatVerbosity, FleetConfig, FleetSupervisorConfig, GitBehaviorConfig, HqClientConfig, IndexingConfig, InputHistoryConfig, LaunchConfig, LaunchMenuChoice, LogConfig, LoopDetectionConfig, MCPHealthConfig, MCPHealthThresholds, MCPServerConfig, ModelMatrixEntry, ModelRuntimeCacheConfig, ModelRuntimeConfig, ModelRuntimeParametersConfig, ModelRuntimeReasoningConfig, NextStepsToolConfig, PluginConfig, PluginManagerConfig, ProviderApiKey, ProviderConfig, SageConfig, SessionLoggingConfig, SkillsConfig, SyncCategory, SyncConfig, ThemePresetId, TokenSavingTier, ToolDescriptionMode, ToolDescriptionModeConfig, ToolResultRenderMode, ToolResultRenderModeConfig, ToolsConfig } from './config.js';
18
18
  export type { AnyHookOutcome, ConfiguredHook, HookEntry, HookEvent, HookFailurePolicy, HookInput, HookInvocationContext, HookMatcher, HookOutcome, HookRegistrationOptions, HttpHook, InProcessHook, PreToolUseOutcome, PreToolUseStage, ShellHook } from './hooks.js';
19
19
  export type { Compactor, CompactReport } from './compactor.js';
20
20
  export type { DirectoryPolicy, DirectoryRule, PermissionDecision, PermissionPolicy, PermissionTrace, PermissionTraceStep, TrustPolicy } from './permission.js';
@@ -575,6 +575,25 @@ function normalizeTuiThinkingWord(value) {
575
575
  return word;
576
576
  }
577
577
 
578
+ // src/types/config/ui.ts
579
+ var THEME_PRESET_IDS = [
580
+ "catppuccin",
581
+ "tokyo-night",
582
+ "nord",
583
+ "cyberpunk",
584
+ "dracula",
585
+ "gruvbox-dark",
586
+ "solarized-dark",
587
+ "one-dark",
588
+ "monokai",
589
+ "rose-pine",
590
+ "kanagawa",
591
+ "ayu-dark",
592
+ "everforest",
593
+ "night-owl",
594
+ "synthwave"
595
+ ];
596
+
578
597
  // src/types/session-markers.ts
579
598
  var SESSION_MARKER_EVENT_TYPES = /* @__PURE__ */ new Set([
580
599
  "mode_changed",
@@ -715,6 +734,9 @@ var DEFAULT_TOOLS_CONFIG = Object.freeze({
715
734
  disabledTools: Object.freeze([]),
716
735
  autoExtendLimit: true,
717
736
  restrictToProjectRoot: true,
737
+ // Off by default: the board is a record of the work, not a permit for it.
738
+ // See ToolsConfig.kanbanGovernance for what turning it on costs and gates.
739
+ kanbanGovernance: false,
718
740
  loopDetection: Object.freeze({
719
741
  mode: "steer-then-cut",
720
742
  steerThreshold: 3,
@@ -1282,6 +1304,7 @@ export {
1282
1304
  SddError,
1283
1305
  SessionError,
1284
1306
  StreamHangError,
1307
+ THEME_PRESET_IDS,
1285
1308
  ToolError,
1286
1309
  ToolErrorCategory,
1287
1310
  ToolValidationError,
@@ -168,6 +168,13 @@ export interface SubagentConfig {
168
168
  * bodies through `SkillLoader`; missing optional skills are skipped safely.
169
169
  */
170
170
  skillNames?: string[] | undefined;
171
+ /**
172
+ * Every skill this role may draw on, before per-project ranking. The catalog
173
+ * sets this to the full curated set while `skillNames` holds the default
174
+ * eager slice; the spawn path ranks the pool by project skill-affinity so a
175
+ * skill the project actually developed can displace an unused sibling.
176
+ */
177
+ skillPool?: string[] | undefined;
171
178
  /** Optional smart-dispatch metadata for dynamically created project roles. */
172
179
  dispatch?: {
173
180
  summary: string;
@@ -8,7 +8,15 @@ export interface SessionMetadata {
8
8
  provider?: string | undefined;
9
9
  startedAt: string;
10
10
  endedAt?: string | undefined;
11
- /** Set when a session is closed with open tool calls — used to restore pending state on resume. */
11
+ /**
12
+ * Tool calls the previous run had issued but not resolved when it closed,
13
+ * as recorded on `session_end`.
14
+ *
15
+ * Diagnostic only. Resume does NOT restore pending state from this: it
16
+ * derives the same fact from the replayed conversation
17
+ * ({@link SessionData.pendingToolUseCount}), which also covers the crash
18
+ * case where no `session_end` was ever written. Nothing re-executes these.
19
+ */
12
20
  pendingToolUses?: string[] | undefined;
13
21
  /** Parent journal metadata when this session was created by fork(). */
14
22
  forkedFrom?: {
@@ -31,6 +31,8 @@ export interface TaskEdge {
31
31
  export interface TaskGraph {
32
32
  id: string;
33
33
  specId: string;
34
+ /** Canonical spec scope. When present, execution must retain at least one task per id. */
35
+ requiredRequirementIds?: string[] | undefined;
34
36
  title: string;
35
37
  nodes: Map<string, TaskNode>;
36
38
  edges: TaskEdge[];
@@ -78,6 +78,8 @@ export interface ToolExecutorOptions {
78
78
  * to the result the model sees).
79
79
  */
80
80
  hookRunner?: import('../hooks/runner.js').HookRunner | undefined;
81
+ /** Hard-block product mutations outside a ready, running strict Kanban contract. */
82
+ requireKanbanGovernance?: boolean | undefined;
81
83
  /**
82
84
  * Per-tool on-screen result render mode map (`tools.resultRenderMode[name]`).
83
85
  * When set, the executor reads this map to decide whether the next
@@ -31,6 +31,7 @@ export { isSafePathSegment, MAX_PATH_SEGMENT_LENGTH, resolveContainedPath, } fro
31
31
  export { getPerfProfile, indexParallelBatchSize, isFrugalPerf, type PerfProfile, SageCachePragmas, sqliteCachePragmas, tuiStreamFlushMs, useDaemonPerfDefaults, } from './perf-profile.js';
32
32
  export { isPidAlive } from './pid.js';
33
33
  export * from './project-identity.js';
34
+ export { activateProjectStateGuard, type ProjectStateGuard, type ProjectStateGuardOptions, startProjectStateGuard, } from './project-state-guard.js';
34
35
  export { type ProjectWatchEvent, type ProjectWatchSubscription, watchProjectTree, } from './project-watch.js';
35
36
  export { capSubject, type CompileFail, type CompileResult, compileUserRegex, MAX_SUBJECT_LEN, } from './regex-guard.js';
36
37
  export * from './safe-json.js';