@proletariat/cli 0.3.95 → 0.3.97
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/dist/commands/config/index.js +1 -1
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/db/repair.js +160 -35
- package/dist/commands/db/repair.js.map +1 -1
- package/dist/commands/gc.d.ts +14 -0
- package/dist/commands/gc.js +208 -0
- package/dist/commands/gc.js.map +1 -0
- package/dist/commands/linear/connect.d.ts +5 -0
- package/dist/commands/linear/connect.js +84 -0
- package/dist/commands/linear/connect.js.map +1 -1
- package/dist/commands/pr/merge.js +1 -1
- package/dist/commands/pr/merge.js.map +1 -1
- package/dist/commands/session/attach.d.ts +3 -3
- package/dist/commands/session/attach.js +37 -79
- package/dist/commands/session/attach.js.map +1 -1
- package/dist/commands/session/exec.js +1 -1
- package/dist/commands/session/exec.js.map +1 -1
- package/dist/commands/session/health.js +1 -1
- package/dist/commands/session/health.js.map +1 -1
- package/dist/commands/session/inspect.js +1 -1
- package/dist/commands/session/inspect.js.map +1 -1
- package/dist/commands/session/list.d.ts +1 -0
- package/dist/commands/session/list.js +111 -78
- package/dist/commands/session/list.js.map +1 -1
- package/dist/commands/session/peek.js +1 -1
- package/dist/commands/session/peek.js.map +1 -1
- package/dist/commands/session/poke.js +1 -1
- package/dist/commands/session/poke.js.map +1 -1
- package/dist/commands/session/prune.js +50 -11
- package/dist/commands/session/prune.js.map +1 -1
- package/dist/commands/session/restart.js +1 -1
- package/dist/commands/session/restart.js.map +1 -1
- package/dist/commands/session/watch.d.ts +1 -0
- package/dist/commands/session/watch.js +46 -2
- package/dist/commands/session/watch.js.map +1 -1
- package/dist/commands/{action → sync}/index.d.ts +2 -6
- package/dist/commands/sync/index.js +68 -0
- package/dist/commands/sync/index.js.map +1 -0
- package/dist/commands/sync/pause.d.ts +10 -0
- package/dist/commands/sync/pause.js +35 -0
- package/dist/commands/sync/pause.js.map +1 -0
- package/dist/commands/sync/queue.d.ts +10 -0
- package/dist/commands/sync/queue.js +106 -0
- package/dist/commands/sync/queue.js.map +1 -0
- package/dist/commands/sync/resume.d.ts +10 -0
- package/dist/commands/sync/resume.js +34 -0
- package/dist/commands/sync/resume.js.map +1 -0
- package/dist/commands/sync/start.d.ts +11 -0
- package/dist/commands/sync/start.js +73 -0
- package/dist/commands/sync/start.js.map +1 -0
- package/dist/commands/sync/status.d.ts +10 -0
- package/dist/commands/sync/status.js +40 -0
- package/dist/commands/sync/status.js.map +1 -0
- package/dist/commands/sync/stop.d.ts +10 -0
- package/dist/commands/sync/stop.js +39 -0
- package/dist/commands/sync/stop.js.map +1 -0
- package/dist/commands/ticket/create.js +1 -1
- package/dist/commands/ticket/create.js.map +1 -1
- package/dist/commands/ticket/edit.js +1 -1
- package/dist/commands/ticket/edit.js.map +1 -1
- package/dist/commands/ticket/list.js +1 -1
- package/dist/commands/ticket/list.js.map +1 -1
- package/dist/commands/ticket/update.js +1 -1
- package/dist/commands/ticket/update.js.map +1 -1
- package/dist/commands/work/complete.d.ts +1 -0
- package/dist/commands/work/complete.js +27 -25
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/work/drop.d.ts +14 -0
- package/dist/commands/work/drop.js +215 -0
- package/dist/commands/work/drop.js.map +1 -0
- package/dist/commands/work/ready.d.ts +1 -0
- package/dist/commands/work/ready.js +26 -25
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/resolve.js +1 -1
- package/dist/commands/work/resolve.js.map +1 -1
- package/dist/commands/work/ship.d.ts +1 -0
- package/dist/commands/work/ship.js +33 -32
- package/dist/commands/work/ship.js.map +1 -1
- package/dist/commands/work/start.d.ts +2 -0
- package/dist/commands/work/start.js +172 -125
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/stop.d.ts +1 -0
- package/dist/commands/work/stop.js +40 -0
- package/dist/commands/work/stop.js.map +1 -1
- package/dist/lib/agents/commands.js +7 -5
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/dashboard/data.js +1 -1
- package/dist/lib/dashboard/data.js.map +1 -1
- package/dist/lib/database/db-safety.d.ts +22 -0
- package/dist/lib/database/db-safety.js +91 -4
- package/dist/lib/database/db-safety.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +17 -0
- package/dist/lib/database/drizzle-schema.js +1 -0
- package/dist/lib/database/drizzle-schema.js.map +1 -1
- package/dist/lib/database/index.d.ts +1 -1
- package/dist/lib/database/index.js +1 -1
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/migrations/0017_drop_agent_work_fk.d.ts +13 -0
- package/dist/lib/database/migrations/0017_drop_agent_work_fk.js +85 -0
- package/dist/lib/database/migrations/0017_drop_agent_work_fk.js.map +1 -0
- package/dist/lib/database/migrations/0018_create_ticket_refs.d.ts +11 -0
- package/dist/lib/database/migrations/0018_create_ticket_refs.js +40 -0
- package/dist/lib/database/migrations/0018_create_ticket_refs.js.map +1 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.d.ts +9 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js +23 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js.map +1 -0
- package/dist/lib/database/migrations/0020_transition_map.d.ts +2 -0
- package/dist/lib/database/migrations/0020_transition_map.js +27 -0
- package/dist/lib/database/migrations/0020_transition_map.js.map +1 -0
- package/dist/lib/database/migrations/index.js +8 -0
- package/dist/lib/database/migrations/index.js.map +1 -1
- package/dist/lib/execution/config.d.ts +10 -0
- package/dist/lib/execution/config.js +24 -0
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/devcontainer.js +1 -1
- package/dist/lib/execution/devcontainer.js.map +1 -1
- package/dist/lib/execution/preflight.d.ts +51 -0
- package/dist/lib/execution/preflight.js +278 -0
- package/dist/lib/execution/preflight.js.map +1 -0
- package/dist/lib/execution/runners/docker-management.d.ts +9 -0
- package/dist/lib/execution/runners/docker-management.js +14 -3
- package/dist/lib/execution/runners/docker-management.js.map +1 -1
- package/dist/lib/execution/runners/prompt-builder.d.ts +6 -0
- package/dist/lib/execution/runners/prompt-builder.js +53 -10
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/runners/shared.d.ts +1 -1
- package/dist/lib/execution/runners/shared.js +1 -1
- package/dist/lib/execution/runners/shared.js.map +1 -1
- package/dist/lib/execution/session-utils.d.ts +39 -0
- package/dist/lib/execution/session-utils.js +111 -0
- package/dist/lib/execution/session-utils.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +11 -1
- package/dist/lib/execution/spawner.js +46 -17
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.js +2 -1
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/ticket-refs.d.ts +71 -0
- package/dist/lib/execution/ticket-refs.js +125 -0
- package/dist/lib/execution/ticket-refs.js.map +1 -0
- package/dist/lib/execution/types.d.ts +7 -2
- package/dist/lib/execution/types.js +5 -3
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/utils.d.ts +25 -0
- package/dist/lib/external-issues/utils.js +32 -0
- package/dist/lib/external-issues/utils.js.map +1 -0
- package/dist/lib/gc/index.d.ts +179 -0
- package/dist/lib/gc/index.js +655 -0
- package/dist/lib/gc/index.js.map +1 -0
- package/dist/lib/mcp/tools/action.js +1 -1
- package/dist/lib/mcp/tools/action.js.map +1 -1
- package/dist/lib/mcp/tools/ticket.js +1 -1
- package/dist/lib/mcp/tools/ticket.js.map +1 -1
- package/dist/lib/orchestrate/actions.js +30 -0
- package/dist/lib/orchestrate/actions.js.map +1 -1
- package/dist/lib/orchestrate/poller.js +3 -3
- package/dist/lib/orchestrate/poller.js.map +1 -1
- package/dist/lib/orchestrate/presets.js +2 -1
- package/dist/lib/orchestrate/presets.js.map +1 -1
- package/dist/lib/orchestrate/types.d.ts +1 -1
- package/dist/lib/orchestrate/types.js +1 -0
- package/dist/lib/orchestrate/types.js.map +1 -1
- package/dist/lib/pmo/index.js +1 -1
- package/dist/lib/pmo/index.js.map +1 -1
- package/dist/lib/pmo/markdown.js +1 -1
- package/dist/lib/pmo/markdown.js.map +1 -1
- package/dist/lib/pmo/schema.d.ts +3 -1
- package/dist/lib/pmo/schema.js +26 -2
- package/dist/lib/pmo/schema.js.map +1 -1
- package/dist/lib/pmo/storage/actions.js +1 -1
- package/dist/lib/pmo/storage/actions.js.map +1 -1
- package/dist/lib/pmo/storage/base.js +37 -15
- package/dist/lib/pmo/storage/base.js.map +1 -1
- package/dist/lib/pmo/storage/projects.js +2 -1
- package/dist/lib/pmo/storage/projects.js.map +1 -1
- package/dist/lib/pmo/storage/statuses.js +1 -1
- package/dist/lib/pmo/storage/statuses.js.map +1 -1
- package/dist/lib/pmo/storage/subtasks.js +1 -1
- package/dist/lib/pmo/storage/subtasks.js.map +1 -1
- package/dist/lib/pmo/storage/templates.js +1 -1
- package/dist/lib/pmo/storage/templates.js.map +1 -1
- package/dist/lib/pmo/storage/tickets.js +2 -1
- package/dist/lib/pmo/storage/tickets.js.map +1 -1
- package/dist/lib/pmo/storage/workflow-rules.js +1 -1
- package/dist/lib/pmo/storage/workflow-rules.js.map +1 -1
- package/dist/lib/pmo/utils.d.ts +6 -189
- package/dist/lib/pmo/utils.js +6 -306
- package/dist/lib/pmo/utils.js.map +1 -1
- package/dist/lib/prompt-json.d.ts +31 -0
- package/dist/lib/prompt-json.js.map +1 -1
- package/dist/lib/providers/auto-mapper.d.ts +45 -0
- package/dist/lib/providers/auto-mapper.js +115 -0
- package/dist/lib/providers/auto-mapper.js.map +1 -0
- package/dist/lib/providers/state-intents.d.ts +20 -0
- package/dist/lib/providers/state-intents.js +61 -7
- package/dist/lib/providers/state-intents.js.map +1 -1
- package/dist/lib/providers/state-resolution.d.ts +15 -11
- package/dist/lib/providers/state-resolution.js +54 -48
- package/dist/lib/providers/state-resolution.js.map +1 -1
- package/dist/lib/providers/transition-map.d.ts +59 -0
- package/dist/lib/providers/transition-map.js +113 -0
- package/dist/lib/providers/transition-map.js.map +1 -0
- package/dist/lib/session/heartbeat.js +1 -1
- package/dist/lib/session/heartbeat.js.map +1 -1
- package/dist/lib/session/index.d.ts +3 -1
- package/dist/lib/session/index.js +3 -1
- package/dist/lib/session/index.js.map +1 -1
- package/dist/lib/session/tmux-watchdog.d.ts +157 -0
- package/dist/lib/session/tmux-watchdog.js +424 -0
- package/dist/lib/session/tmux-watchdog.js.map +1 -0
- package/dist/lib/session/watcher.d.ts +22 -4
- package/dist/lib/session/watcher.js +66 -8
- package/dist/lib/session/watcher.js.map +1 -1
- package/dist/lib/sync/daemon-process.d.ts +9 -0
- package/dist/lib/sync/daemon-process.js +184 -0
- package/dist/lib/sync/daemon-process.js.map +1 -0
- package/dist/lib/sync/daemon.d.ts +39 -0
- package/dist/lib/sync/daemon.js +91 -0
- package/dist/lib/sync/daemon.js.map +1 -0
- package/dist/lib/sync/engine.d.ts +38 -0
- package/dist/lib/sync/engine.js +145 -0
- package/dist/lib/sync/engine.js.map +1 -0
- package/dist/lib/sync/merge-queue.d.ts +116 -0
- package/dist/lib/sync/merge-queue.js +321 -0
- package/dist/lib/sync/merge-queue.js.map +1 -0
- package/dist/lib/sync/reconciler.d.ts +44 -0
- package/dist/lib/sync/reconciler.js +88 -0
- package/dist/lib/sync/reconciler.js.map +1 -0
- package/dist/lib/utils/text.d.ts +44 -0
- package/dist/lib/utils/text.js +72 -0
- package/dist/lib/utils/text.js.map +1 -0
- package/dist/lib/work-lifecycle/post-execution.js +1 -1
- package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
- package/dist/lib/work-lifecycle/settings.d.ts +138 -0
- package/dist/lib/work-lifecycle/settings.js +213 -0
- package/dist/lib/work-lifecycle/settings.js.map +1 -0
- package/dist/lib/work-lifecycle/transition.d.ts +73 -0
- package/dist/lib/work-lifecycle/transition.js +124 -0
- package/dist/lib/work-lifecycle/transition.js.map +1 -0
- package/oclif.manifest.json +3235 -3380
- package/package.json +1 -1
- package/dist/commands/action/create.d.ts +0 -26
- package/dist/commands/action/create.js +0 -245
- package/dist/commands/action/create.js.map +0 -1
- package/dist/commands/action/delete.d.ts +0 -18
- package/dist/commands/action/delete.js +0 -78
- package/dist/commands/action/delete.js.map +0 -1
- package/dist/commands/action/index.js +0 -103
- package/dist/commands/action/index.js.map +0 -1
- package/dist/commands/action/list.d.ts +0 -15
- package/dist/commands/action/list.js +0 -90
- package/dist/commands/action/list.js.map +0 -1
- package/dist/commands/action/run.d.ts +0 -20
- package/dist/commands/action/run.js +0 -188
- package/dist/commands/action/run.js.map +0 -1
- package/dist/commands/action/show.d.ts +0 -17
- package/dist/commands/action/show.js +0 -78
- package/dist/commands/action/show.js.map +0 -1
- package/dist/commands/action/update.d.ts +0 -27
- package/dist/commands/action/update.js +0 -288
- package/dist/commands/action/update.js.map +0 -1
|
@@ -8,16 +8,28 @@
|
|
|
8
8
|
* These cover the most common workflow states across Linear, Trello,
|
|
9
9
|
* ClickUp, Jira, Shortcut, Asana, and custom PMO boards.
|
|
10
10
|
*/
|
|
11
|
+
export const TRANSITION_INTENTS = [
|
|
12
|
+
'started',
|
|
13
|
+
'needs_review',
|
|
14
|
+
'completed',
|
|
15
|
+
'paused',
|
|
16
|
+
'ready',
|
|
17
|
+
'dropped',
|
|
18
|
+
];
|
|
11
19
|
/**
|
|
12
20
|
* Default semantic intents shipped with the CLI.
|
|
13
21
|
*
|
|
14
22
|
* Order matters: when matching, the first alias match wins.
|
|
15
23
|
* Aliases are matched case-insensitively.
|
|
24
|
+
*
|
|
25
|
+
* The `name` field uses the canonical transition intent names where applicable.
|
|
26
|
+
* Legacy names ('active', 'review', 'done', 'blocked') are kept as aliases
|
|
27
|
+
* within the new intents for backward compatibility.
|
|
16
28
|
*/
|
|
17
29
|
export const DEFAULT_INTENTS = [
|
|
18
30
|
{
|
|
19
|
-
name: '
|
|
20
|
-
description: 'Work has
|
|
31
|
+
name: 'started',
|
|
32
|
+
description: 'Work has begun',
|
|
21
33
|
aliases: [
|
|
22
34
|
'In Progress',
|
|
23
35
|
'Working On',
|
|
@@ -30,7 +42,7 @@ export const DEFAULT_INTENTS = [
|
|
|
30
42
|
],
|
|
31
43
|
},
|
|
32
44
|
{
|
|
33
|
-
name: '
|
|
45
|
+
name: 'needs_review',
|
|
34
46
|
description: 'Work is done, awaiting review',
|
|
35
47
|
aliases: [
|
|
36
48
|
'Review',
|
|
@@ -45,7 +57,7 @@ export const DEFAULT_INTENTS = [
|
|
|
45
57
|
],
|
|
46
58
|
},
|
|
47
59
|
{
|
|
48
|
-
name: '
|
|
60
|
+
name: 'completed',
|
|
49
61
|
description: 'Work is complete',
|
|
50
62
|
aliases: [
|
|
51
63
|
'Done',
|
|
@@ -59,24 +71,66 @@ export const DEFAULT_INTENTS = [
|
|
|
59
71
|
],
|
|
60
72
|
},
|
|
61
73
|
{
|
|
62
|
-
name: '
|
|
63
|
-
description: 'Work is
|
|
74
|
+
name: 'paused',
|
|
75
|
+
description: 'Work is stopped temporarily',
|
|
64
76
|
aliases: [
|
|
65
77
|
'Blocked',
|
|
66
78
|
'On Hold',
|
|
67
79
|
'Stuck',
|
|
68
80
|
'Waiting',
|
|
69
81
|
'Paused',
|
|
82
|
+
'Not Working On',
|
|
70
83
|
'Impediment',
|
|
71
84
|
'Pending',
|
|
72
85
|
],
|
|
73
86
|
},
|
|
87
|
+
{
|
|
88
|
+
name: 'ready',
|
|
89
|
+
description: 'Groomed and ready to start',
|
|
90
|
+
aliases: [
|
|
91
|
+
'Ready',
|
|
92
|
+
'Ready for Development',
|
|
93
|
+
'Development Ready',
|
|
94
|
+
'Planned',
|
|
95
|
+
'Groomed',
|
|
96
|
+
'To Do',
|
|
97
|
+
'Todo',
|
|
98
|
+
'Selected for Development',
|
|
99
|
+
'Up Next',
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'dropped',
|
|
104
|
+
description: 'Removed from active work entirely',
|
|
105
|
+
aliases: [
|
|
106
|
+
'Canceled',
|
|
107
|
+
'Cancelled',
|
|
108
|
+
'Won\'t Do',
|
|
109
|
+
'Won\'t Fix',
|
|
110
|
+
'Archived',
|
|
111
|
+
'Removed',
|
|
112
|
+
'Dropped',
|
|
113
|
+
'Discarded',
|
|
114
|
+
],
|
|
115
|
+
},
|
|
74
116
|
];
|
|
117
|
+
/**
|
|
118
|
+
* Map from legacy intent names to the new canonical transition intent names.
|
|
119
|
+
* Used for backward compatibility with existing state-map config overrides.
|
|
120
|
+
*/
|
|
121
|
+
const LEGACY_INTENT_MAP = {
|
|
122
|
+
active: 'started',
|
|
123
|
+
review: 'needs_review',
|
|
124
|
+
done: 'completed',
|
|
125
|
+
blocked: 'paused',
|
|
126
|
+
};
|
|
75
127
|
/**
|
|
76
128
|
* Get a default intent by name.
|
|
129
|
+
* Also resolves legacy intent names (active → started, review → needs_review, etc.)
|
|
77
130
|
*/
|
|
78
131
|
export function getDefaultIntent(name) {
|
|
79
|
-
|
|
132
|
+
const resolved = LEGACY_INTENT_MAP[name] ?? name;
|
|
133
|
+
return DEFAULT_INTENTS.find(i => i.name === resolved);
|
|
80
134
|
}
|
|
81
135
|
/**
|
|
82
136
|
* Try to match a state name against intent aliases (case-insensitive).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-intents.js","sourceRoot":"","sources":["../../../src/lib/providers/state-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"state-intents.js","sourceRoot":"","sources":["../../../src/lib/providers/state-intents.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* State Resolution Engine
|
|
3
3
|
*
|
|
4
|
-
* Resolves semantic intents (e.g., '
|
|
4
|
+
* Resolves semantic intents (e.g., 'started', 'needs_review', 'completed') to actual
|
|
5
5
|
* PM tool states at runtime. Never caches state IDs across calls.
|
|
6
6
|
*
|
|
7
7
|
* Resolution flow:
|
|
8
8
|
* 1. Always fetch fresh states from the PM provider
|
|
9
|
-
* 2. Check
|
|
10
|
-
* 3.
|
|
11
|
-
* 4.
|
|
12
|
-
* 5. No match →
|
|
9
|
+
* 2. Check pmo_transition_map — explicit user-confirmed mappings from `prlt connect`
|
|
10
|
+
* 3. Check user config — `state-map.{intent}` overrides exact-match against fetched states
|
|
11
|
+
* 4. Match against built-in semantic intent aliases
|
|
12
|
+
* 5. No config + no alias match → LLM resolves (pass available states to LLM)
|
|
13
|
+
* 6. No match → skip (don't move, log warning)
|
|
13
14
|
*
|
|
14
15
|
* The same move() function works across Linear, Trello, ClickUp, Jira, etc. —
|
|
15
16
|
* each provider implements fetchStates() differently but returns the same shape.
|
|
@@ -47,7 +48,7 @@ export interface StateResolutionResult {
|
|
|
47
48
|
/** Whether the move succeeded */
|
|
48
49
|
success: boolean;
|
|
49
50
|
/** How the state was resolved */
|
|
50
|
-
resolvedVia?: 'config' | 'alias' | 'llm' | 'skipped';
|
|
51
|
+
resolvedVia?: 'transition_map' | 'config' | 'alias' | 'llm' | 'skipped';
|
|
51
52
|
/** The resolved state name */
|
|
52
53
|
stateName?: string;
|
|
53
54
|
/** The resolved state ID */
|
|
@@ -109,20 +110,23 @@ export interface MoveOptions {
|
|
|
109
110
|
db?: Database.Database;
|
|
110
111
|
/** Current state name — if provided, skip move when already in the resolved state */
|
|
111
112
|
currentState?: string;
|
|
113
|
+
/** Provider name for transition map lookups (e.g., 'linear', 'pmo') */
|
|
114
|
+
providerName?: string;
|
|
112
115
|
}
|
|
113
116
|
/**
|
|
114
117
|
* Move a ticket to a state matching a semantic intent.
|
|
115
118
|
*
|
|
116
119
|
* Resolution order:
|
|
117
120
|
* 1. Fetch fresh states from the provider (never cache)
|
|
118
|
-
* 2. Check
|
|
119
|
-
* 3.
|
|
120
|
-
* 4.
|
|
121
|
-
* 5.
|
|
121
|
+
* 2. Check pmo_transition_map for explicit mapping (from `prlt connect`)
|
|
122
|
+
* 3. Check user config for `state-map.{intent}` override → exact match
|
|
123
|
+
* 4. Match against built-in semantic intent aliases
|
|
124
|
+
* 5. LLM fallback — ask Claude which state matches the intent
|
|
125
|
+
* 6. No match → skip, return warning
|
|
122
126
|
*
|
|
123
127
|
* @param pmProvider - The PM provider to fetch states from and move tickets in
|
|
124
128
|
* @param ticketId - The ticket to move
|
|
125
|
-
* @param intent - The semantic intent (e.g., '
|
|
129
|
+
* @param intent - The semantic intent (e.g., 'started', 'needs_review', 'completed')
|
|
126
130
|
* @param dbOrOptions - Database instance or options object
|
|
127
131
|
* @returns Resolution result with success/failure and metadata
|
|
128
132
|
*/
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* State Resolution Engine
|
|
3
3
|
*
|
|
4
|
-
* Resolves semantic intents (e.g., '
|
|
4
|
+
* Resolves semantic intents (e.g., 'started', 'needs_review', 'completed') to actual
|
|
5
5
|
* PM tool states at runtime. Never caches state IDs across calls.
|
|
6
6
|
*
|
|
7
7
|
* Resolution flow:
|
|
8
8
|
* 1. Always fetch fresh states from the PM provider
|
|
9
|
-
* 2. Check
|
|
10
|
-
* 3.
|
|
11
|
-
* 4.
|
|
12
|
-
* 5. No match →
|
|
9
|
+
* 2. Check pmo_transition_map — explicit user-confirmed mappings from `prlt connect`
|
|
10
|
+
* 3. Check user config — `state-map.{intent}` overrides exact-match against fetched states
|
|
11
|
+
* 4. Match against built-in semantic intent aliases
|
|
12
|
+
* 5. No config + no alias match → LLM resolves (pass available states to LLM)
|
|
13
|
+
* 6. No match → skip (don't move, log warning)
|
|
13
14
|
*
|
|
14
15
|
* The same move() function works across Linear, Trello, ClickUp, Jira, etc. —
|
|
15
16
|
* each provider implements fetchStates() differently but returns the same shape.
|
|
@@ -17,6 +18,7 @@
|
|
|
17
18
|
*/
|
|
18
19
|
import { SettingsStore } from '../database/settings-store.js';
|
|
19
20
|
import { matchIntentByAliases, getDefaultIntent } from './state-intents.js';
|
|
21
|
+
import { TransitionMapStore } from './transition-map.js';
|
|
20
22
|
/**
|
|
21
23
|
* Config key prefix for state-map overrides.
|
|
22
24
|
* e.g., `state-map.review` → "Awaiting Client Feedback"
|
|
@@ -175,14 +177,15 @@ export function createPMProviderAdapter(provider, storage, projectId) {
|
|
|
175
177
|
*
|
|
176
178
|
* Resolution order:
|
|
177
179
|
* 1. Fetch fresh states from the provider (never cache)
|
|
178
|
-
* 2. Check
|
|
179
|
-
* 3.
|
|
180
|
-
* 4.
|
|
181
|
-
* 5.
|
|
180
|
+
* 2. Check pmo_transition_map for explicit mapping (from `prlt connect`)
|
|
181
|
+
* 3. Check user config for `state-map.{intent}` override → exact match
|
|
182
|
+
* 4. Match against built-in semantic intent aliases
|
|
183
|
+
* 5. LLM fallback — ask Claude which state matches the intent
|
|
184
|
+
* 6. No match → skip, return warning
|
|
182
185
|
*
|
|
183
186
|
* @param pmProvider - The PM provider to fetch states from and move tickets in
|
|
184
187
|
* @param ticketId - The ticket to move
|
|
185
|
-
* @param intent - The semantic intent (e.g., '
|
|
188
|
+
* @param intent - The semantic intent (e.g., 'started', 'needs_review', 'completed')
|
|
186
189
|
* @param dbOrOptions - Database instance or options object
|
|
187
190
|
* @returns Resolution result with success/failure and metadata
|
|
188
191
|
*/
|
|
@@ -190,6 +193,7 @@ export async function move(pmProvider, ticketId, intent, dbOrOptions) {
|
|
|
190
193
|
// Normalize arguments: support both `move(p, id, intent, db)` and `move(p, id, intent, { db, currentState })`
|
|
191
194
|
let db;
|
|
192
195
|
let currentState;
|
|
196
|
+
let providerName;
|
|
193
197
|
if (dbOrOptions && typeof dbOrOptions === 'object' && 'prepare' in dbOrOptions) {
|
|
194
198
|
// It's a Database instance (has .prepare method)
|
|
195
199
|
db = dbOrOptions;
|
|
@@ -198,6 +202,7 @@ export async function move(pmProvider, ticketId, intent, dbOrOptions) {
|
|
|
198
202
|
const opts = dbOrOptions;
|
|
199
203
|
db = opts.db;
|
|
200
204
|
currentState = opts.currentState;
|
|
205
|
+
providerName = opts.providerName;
|
|
201
206
|
}
|
|
202
207
|
// 1. Always fetch fresh states
|
|
203
208
|
let states;
|
|
@@ -222,61 +227,62 @@ export async function move(pmProvider, ticketId, intent, dbOrOptions) {
|
|
|
222
227
|
return false;
|
|
223
228
|
return currentState.toLowerCase() === stateName.toLowerCase();
|
|
224
229
|
};
|
|
225
|
-
//
|
|
230
|
+
// Helper: attempt to move ticket to a matched state
|
|
231
|
+
const tryMove = async (match, resolvedVia) => {
|
|
232
|
+
if (isAlreadyInState(match.name)) {
|
|
233
|
+
return { success: false, resolvedVia, stateName: match.name, stateId: match.id };
|
|
234
|
+
}
|
|
235
|
+
const result = await pmProvider.moveTicket(ticketId, match.id);
|
|
236
|
+
return {
|
|
237
|
+
success: result.success,
|
|
238
|
+
resolvedVia,
|
|
239
|
+
stateName: match.name,
|
|
240
|
+
stateId: match.id,
|
|
241
|
+
error: result.error,
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
// 2. Check pmo_transition_map for explicit mapping
|
|
245
|
+
if (db && providerName) {
|
|
246
|
+
try {
|
|
247
|
+
const store = new TransitionMapStore(db);
|
|
248
|
+
const mappedStateName = store.resolveIntent(providerName, intent);
|
|
249
|
+
if (mappedStateName) {
|
|
250
|
+
const match = states.find(s => s.name.toLowerCase() === mappedStateName.toLowerCase());
|
|
251
|
+
if (match) {
|
|
252
|
+
return tryMove(match, 'transition_map');
|
|
253
|
+
}
|
|
254
|
+
// Mapped state name doesn't match available states — fall through
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Table may not exist yet (pre-migration) — fall through
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// 3. Check user config override
|
|
226
262
|
if (db) {
|
|
227
263
|
const configOverride = getStateMapConfig(db, intent);
|
|
228
264
|
if (configOverride) {
|
|
229
265
|
const match = states.find(s => s.name.toLowerCase() === configOverride.toLowerCase());
|
|
230
266
|
if (match) {
|
|
231
|
-
|
|
232
|
-
return { success: false, resolvedVia: 'config', stateName: match.name, stateId: match.id };
|
|
233
|
-
}
|
|
234
|
-
const result = await pmProvider.moveTicket(ticketId, match.id);
|
|
235
|
-
return {
|
|
236
|
-
success: result.success,
|
|
237
|
-
resolvedVia: 'config',
|
|
238
|
-
stateName: match.name,
|
|
239
|
-
stateId: match.id,
|
|
240
|
-
error: result.error,
|
|
241
|
-
};
|
|
267
|
+
return tryMove(match, 'config');
|
|
242
268
|
}
|
|
243
269
|
// Config is set but no matching state — fall through to alias/LLM
|
|
244
270
|
}
|
|
245
271
|
}
|
|
246
|
-
//
|
|
272
|
+
// 4. Match against built-in semantic intent aliases
|
|
247
273
|
const intentDef = getDefaultIntent(intent);
|
|
248
274
|
if (intentDef) {
|
|
249
275
|
const aliasMatch = matchIntentByAliases(states, intentDef);
|
|
250
276
|
if (aliasMatch) {
|
|
251
|
-
|
|
252
|
-
return { success: false, resolvedVia: 'alias', stateName: aliasMatch.name, stateId: aliasMatch.id };
|
|
253
|
-
}
|
|
254
|
-
const result = await pmProvider.moveTicket(ticketId, aliasMatch.id);
|
|
255
|
-
return {
|
|
256
|
-
success: result.success,
|
|
257
|
-
resolvedVia: 'alias',
|
|
258
|
-
stateName: aliasMatch.name,
|
|
259
|
-
stateId: aliasMatch.id,
|
|
260
|
-
error: result.error,
|
|
261
|
-
};
|
|
277
|
+
return tryMove(aliasMatch, 'alias');
|
|
262
278
|
}
|
|
263
279
|
}
|
|
264
|
-
//
|
|
280
|
+
// 5. LLM fallback
|
|
265
281
|
const llmMatch = await llmResolveState(states, intent);
|
|
266
282
|
if (llmMatch) {
|
|
267
|
-
|
|
268
|
-
return { success: false, resolvedVia: 'llm', stateName: llmMatch.name, stateId: llmMatch.id };
|
|
269
|
-
}
|
|
270
|
-
const result = await pmProvider.moveTicket(ticketId, llmMatch.id);
|
|
271
|
-
return {
|
|
272
|
-
success: result.success,
|
|
273
|
-
resolvedVia: 'llm',
|
|
274
|
-
stateName: llmMatch.name,
|
|
275
|
-
stateId: llmMatch.id,
|
|
276
|
-
error: result.error,
|
|
277
|
-
};
|
|
283
|
+
return tryMove(llmMatch, 'llm');
|
|
278
284
|
}
|
|
279
|
-
//
|
|
285
|
+
// 6. No match — skip
|
|
280
286
|
const warning = `No state match for intent '${intent}', skipping move`;
|
|
281
287
|
console.warn(warning);
|
|
282
288
|
return {
|
|
@@ -297,6 +303,6 @@ export async function move(pmProvider, ticketId, intent, dbOrOptions) {
|
|
|
297
303
|
*/
|
|
298
304
|
export async function moveWithProvider(provider, storage, projectId, ticketId, intent, db, currentState) {
|
|
299
305
|
const pmProvider = createPMProviderAdapter(provider, storage, projectId);
|
|
300
|
-
return move(pmProvider, ticketId, intent, { db, currentState });
|
|
306
|
+
return move(pmProvider, ticketId, intent, { db, currentState, providerName: provider.name });
|
|
301
307
|
}
|
|
302
308
|
//# sourceMappingURL=state-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-resolution.js","sourceRoot":"","sources":["../../../src/lib/providers/state-resolution.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"state-resolution.js","sourceRoot":"","sources":["../../../src/lib/providers/state-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transition Map Store
|
|
3
|
+
*
|
|
4
|
+
* Manages the pmo_transition_map table, which stores intent-to-provider-state
|
|
5
|
+
* mappings. Each work primitive (start, ready, ship, stop, drop) has a
|
|
6
|
+
* canonical intent, and this store resolves that intent to whatever state
|
|
7
|
+
* name exists on the connected board.
|
|
8
|
+
*
|
|
9
|
+
* Resolution order (in state-resolution.ts):
|
|
10
|
+
* 1. pmo_transition_map (this store) — explicit user-confirmed mappings
|
|
11
|
+
* 2. state-map.{intent} config override
|
|
12
|
+
* 3. Built-in semantic intent aliases
|
|
13
|
+
* 4. LLM fallback
|
|
14
|
+
* 5. Skip (no match)
|
|
15
|
+
*/
|
|
16
|
+
import type Database from 'better-sqlite3';
|
|
17
|
+
import type { TransitionIntent } from './state-intents.js';
|
|
18
|
+
export interface TransitionMapping {
|
|
19
|
+
provider: string;
|
|
20
|
+
intent: TransitionIntent;
|
|
21
|
+
providerStateName: string;
|
|
22
|
+
providerStateId?: string | null;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* CRUD operations for the pmo_transition_map table.
|
|
26
|
+
*/
|
|
27
|
+
export declare class TransitionMapStore {
|
|
28
|
+
private db;
|
|
29
|
+
constructor(db: Database.Database);
|
|
30
|
+
/**
|
|
31
|
+
* Get the provider state name mapped to a transition intent.
|
|
32
|
+
* Returns null if no mapping exists.
|
|
33
|
+
*/
|
|
34
|
+
getMapping(provider: string, intent: string): TransitionMapping | null;
|
|
35
|
+
/**
|
|
36
|
+
* Add or update a transition mapping.
|
|
37
|
+
*/
|
|
38
|
+
upsertMapping(mapping: TransitionMapping): void;
|
|
39
|
+
/**
|
|
40
|
+
* List all transition mappings for a provider.
|
|
41
|
+
*/
|
|
42
|
+
listMappings(provider: string): TransitionMapping[];
|
|
43
|
+
/**
|
|
44
|
+
* Remove a specific transition mapping.
|
|
45
|
+
*/
|
|
46
|
+
removeMapping(provider: string, intent: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Remove all transition mappings for a provider.
|
|
49
|
+
*/
|
|
50
|
+
clearMappings(provider: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a transition intent to a provider state name.
|
|
53
|
+
* Returns the mapped state name, or null if no mapping exists.
|
|
54
|
+
*
|
|
55
|
+
* This is the primary resolution method called by work commands.
|
|
56
|
+
* If this returns null, the caller should fall through to alias/LLM resolution.
|
|
57
|
+
*/
|
|
58
|
+
resolveIntent(provider: string, intent: string): string | null;
|
|
59
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transition Map Store
|
|
3
|
+
*
|
|
4
|
+
* Manages the pmo_transition_map table, which stores intent-to-provider-state
|
|
5
|
+
* mappings. Each work primitive (start, ready, ship, stop, drop) has a
|
|
6
|
+
* canonical intent, and this store resolves that intent to whatever state
|
|
7
|
+
* name exists on the connected board.
|
|
8
|
+
*
|
|
9
|
+
* Resolution order (in state-resolution.ts):
|
|
10
|
+
* 1. pmo_transition_map (this store) — explicit user-confirmed mappings
|
|
11
|
+
* 2. state-map.{intent} config override
|
|
12
|
+
* 3. Built-in semantic intent aliases
|
|
13
|
+
* 4. LLM fallback
|
|
14
|
+
* 5. Skip (no match)
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* CRUD operations for the pmo_transition_map table.
|
|
18
|
+
*/
|
|
19
|
+
export class TransitionMapStore {
|
|
20
|
+
db;
|
|
21
|
+
constructor(db) {
|
|
22
|
+
this.db = db;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get the provider state name mapped to a transition intent.
|
|
26
|
+
* Returns null if no mapping exists.
|
|
27
|
+
*/
|
|
28
|
+
getMapping(provider, intent) {
|
|
29
|
+
try {
|
|
30
|
+
const row = this.db.prepare(`
|
|
31
|
+
SELECT provider, intent, provider_state_name, provider_state_id
|
|
32
|
+
FROM pmo_transition_map
|
|
33
|
+
WHERE provider = ? AND intent = ?
|
|
34
|
+
`).get(provider, intent);
|
|
35
|
+
if (!row)
|
|
36
|
+
return null;
|
|
37
|
+
return {
|
|
38
|
+
provider: row.provider,
|
|
39
|
+
intent: row.intent,
|
|
40
|
+
providerStateName: row.provider_state_name,
|
|
41
|
+
providerStateId: row.provider_state_id,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Add or update a transition mapping.
|
|
50
|
+
*/
|
|
51
|
+
upsertMapping(mapping) {
|
|
52
|
+
this.db.prepare(`
|
|
53
|
+
INSERT INTO pmo_transition_map (provider, intent, provider_state_name, provider_state_id, updated_at)
|
|
54
|
+
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
55
|
+
ON CONFLICT(provider, intent) DO UPDATE SET
|
|
56
|
+
provider_state_name = excluded.provider_state_name,
|
|
57
|
+
provider_state_id = excluded.provider_state_id,
|
|
58
|
+
updated_at = CURRENT_TIMESTAMP
|
|
59
|
+
`).run(mapping.provider, mapping.intent, mapping.providerStateName, mapping.providerStateId ?? null);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* List all transition mappings for a provider.
|
|
63
|
+
*/
|
|
64
|
+
listMappings(provider) {
|
|
65
|
+
try {
|
|
66
|
+
const rows = this.db.prepare(`
|
|
67
|
+
SELECT provider, intent, provider_state_name, provider_state_id
|
|
68
|
+
FROM pmo_transition_map
|
|
69
|
+
WHERE provider = ?
|
|
70
|
+
ORDER BY intent
|
|
71
|
+
`).all(provider);
|
|
72
|
+
return rows.map(row => ({
|
|
73
|
+
provider: row.provider,
|
|
74
|
+
intent: row.intent,
|
|
75
|
+
providerStateName: row.provider_state_name,
|
|
76
|
+
providerStateId: row.provider_state_id,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Remove a specific transition mapping.
|
|
85
|
+
*/
|
|
86
|
+
removeMapping(provider, intent) {
|
|
87
|
+
this.db.prepare(`
|
|
88
|
+
DELETE FROM pmo_transition_map
|
|
89
|
+
WHERE provider = ? AND intent = ?
|
|
90
|
+
`).run(provider, intent);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Remove all transition mappings for a provider.
|
|
94
|
+
*/
|
|
95
|
+
clearMappings(provider) {
|
|
96
|
+
this.db.prepare(`
|
|
97
|
+
DELETE FROM pmo_transition_map
|
|
98
|
+
WHERE provider = ?
|
|
99
|
+
`).run(provider);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Resolve a transition intent to a provider state name.
|
|
103
|
+
* Returns the mapped state name, or null if no mapping exists.
|
|
104
|
+
*
|
|
105
|
+
* This is the primary resolution method called by work commands.
|
|
106
|
+
* If this returns null, the caller should fall through to alias/LLM resolution.
|
|
107
|
+
*/
|
|
108
|
+
resolveIntent(provider, intent) {
|
|
109
|
+
const mapping = this.getMapping(provider, intent);
|
|
110
|
+
return mapping?.providerStateName ?? null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=transition-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition-map.js","sourceRoot":"","sources":["../../../src/lib/providers/transition-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH;;GAEG;AACH,MAAM,OAAO,kBAAkB;IACT;IAApB,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAE7C;;;OAGG;IACH,UAAU,CAAC,QAAgB,EAAE,MAAc;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;OAI3B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAKV,CAAA;YAEb,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAA;YAErB,OAAO;gBACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,GAAG,CAAC,MAA0B;gBACtC,iBAAiB,EAAE,GAAG,CAAC,mBAAmB;gBAC1C,eAAe,EAAE,GAAG,CAAC,iBAAiB;aACvC,CAAA;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAA0B;QACtC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;KAOf,CAAC,CAAC,GAAG,CACJ,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,iBAAiB,EACzB,OAAO,CAAC,eAAe,IAAI,IAAI,CAChC,CAAA;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAgB;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;OAK5B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAKb,CAAA;YAEF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,MAAM,EAAE,GAAG,CAAC,MAA0B;gBACtC,iBAAiB,EAAE,GAAG,CAAC,mBAAmB;gBAC1C,eAAe,EAAE,GAAG,CAAC,iBAAiB;aACvC,CAAC,CAAC,CAAA;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB,EAAE,MAAc;QAC5C,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAClB,CAAC;IAED;;;;;;OAMG;IACH,aAAa,CAAC,QAAgB,EAAE,MAAc;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACjD,OAAO,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAA;IAC3C,CAAC;CACF"}
|
|
@@ -24,7 +24,7 @@ import { detectState } from '../../commands/session/health.js';
|
|
|
24
24
|
* Returns the detected health state, or null if the session couldn't be found.
|
|
25
25
|
*/
|
|
26
26
|
export function recordHeartbeatFromSession(storage, execution) {
|
|
27
|
-
const isContainer = execution.environment === 'devcontainer';
|
|
27
|
+
const isContainer = execution.environment === 'devcontainer' || execution.environment === 'docker';
|
|
28
28
|
let sessionId = execution.sessionId;
|
|
29
29
|
// Try to find the tmux session
|
|
30
30
|
if (isContainer && execution.containerId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../../src/lib/session/heartbeat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAI7C,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAE9D,gFAAgF;AAChF,wCAAwC;AACxC,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAyB,EACzB,SAAoB;IAEpB,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,KAAK,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../../src/lib/session/heartbeat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session Module
|
|
3
3
|
*
|
|
4
|
-
* Agent session monitoring, heartbeat tracking,
|
|
4
|
+
* Agent session monitoring, heartbeat tracking, stale detection,
|
|
5
|
+
* and tmux server crash recovery.
|
|
5
6
|
*/
|
|
6
7
|
export * from './heartbeat.js';
|
|
7
8
|
export * from './watcher.js';
|
|
9
|
+
export * from './tmux-watchdog.js';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Session Module
|
|
3
3
|
*
|
|
4
|
-
* Agent session monitoring, heartbeat tracking,
|
|
4
|
+
* Agent session monitoring, heartbeat tracking, stale detection,
|
|
5
|
+
* and tmux server crash recovery.
|
|
5
6
|
*/
|
|
6
7
|
export * from './heartbeat.js';
|
|
7
8
|
export * from './watcher.js';
|
|
9
|
+
export * from './tmux-watchdog.js';
|
|
8
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/session/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/session/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA"}
|