@unbrained/pm-cli 2026.3.12 → 2026.5.1-2
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/.agents/pm/extensions/.managed-extensions.json +42 -0
- package/.agents/pm/extensions/beads/index.js +109 -0
- package/.agents/pm/extensions/beads/manifest.json +7 -0
- package/{dist/cli/commands/beads.js → .agents/pm/extensions/beads/runtime.js} +31 -21
- package/.agents/pm/extensions/beads/runtime.ts +702 -0
- package/.agents/pm/extensions/todos/index.js +126 -0
- package/.agents/pm/extensions/todos/manifest.json +7 -0
- package/{dist/extensions/builtins/todos/import-export.js → .agents/pm/extensions/todos/runtime.js} +39 -29
- package/.agents/pm/extensions/todos/runtime.ts +568 -0
- package/AGENTS.md +196 -92
- package/CHANGELOG.md +404 -0
- package/CODE_OF_CONDUCT.md +42 -0
- package/CONTRIBUTING.md +144 -0
- package/PRD.md +512 -164
- package/README.md +1053 -2
- package/SECURITY.md +51 -0
- package/dist/cli/commands/activity.d.ts +5 -0
- package/dist/cli/commands/activity.js +66 -3
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.d.ts +54 -0
- package/dist/cli/commands/aggregate.js +181 -0
- package/dist/cli/commands/aggregate.js.map +1 -0
- package/dist/cli/commands/append.js +4 -1
- package/dist/cli/commands/append.js.map +1 -1
- package/dist/cli/commands/calendar.d.ts +109 -0
- package/dist/cli/commands/calendar.js +797 -0
- package/dist/cli/commands/calendar.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +5 -1
- package/dist/cli/commands/claim.js +42 -21
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.d.ts +1 -0
- package/dist/cli/commands/close.js +54 -5
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments-audit.d.ts +91 -0
- package/dist/cli/commands/comments-audit.js +195 -0
- package/dist/cli/commands/comments-audit.js.map +1 -0
- package/dist/cli/commands/comments.d.ts +1 -0
- package/dist/cli/commands/comments.js +70 -21
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.d.ts +10 -4
- package/dist/cli/commands/completion.js +1184 -137
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +35 -3
- package/dist/cli/commands/config.js +968 -13
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/context.d.ts +86 -0
- package/dist/cli/commands/context.js +299 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/contracts.d.ts +78 -0
- package/dist/cli/commands/contracts.js +920 -0
- package/dist/cli/commands/contracts.js.map +1 -0
- package/dist/cli/commands/create.d.ts +48 -14
- package/dist/cli/commands/create.js +1331 -160
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/dedupe-audit.d.ts +81 -0
- package/dist/cli/commands/dedupe-audit.js +330 -0
- package/dist/cli/commands/dedupe-audit.js.map +1 -0
- package/dist/cli/commands/deps.d.ts +52 -0
- package/dist/cli/commands/deps.js +204 -0
- package/dist/cli/commands/deps.js.map +1 -0
- package/dist/cli/commands/docs.d.ts +19 -0
- package/dist/cli/commands/docs.js +212 -13
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +122 -0
- package/dist/cli/commands/extension.js +1850 -0
- package/dist/cli/commands/extension.js.map +1 -0
- package/dist/cli/commands/files.d.ts +52 -1
- package/dist/cli/commands/files.js +455 -13
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/gc.d.ts +11 -1
- package/dist/cli/commands/gc.js +89 -11
- package/dist/cli/commands/gc.js.map +1 -1
- package/dist/cli/commands/get.d.ts +13 -0
- package/dist/cli/commands/get.js +35 -3
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.d.ts +10 -2
- package/dist/cli/commands/health.js +774 -23
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.d.ts +20 -0
- package/dist/cli/commands/history.js +152 -6
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +16 -3
- package/dist/cli/commands/index.js +16 -3
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +7 -2
- package/dist/cli/commands/init.js +137 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learnings.d.ts +17 -0
- package/dist/cli/commands/learnings.js +129 -0
- package/dist/cli/commands/learnings.js.map +1 -0
- package/dist/cli/commands/list.d.ts +29 -1
- package/dist/cli/commands/list.js +289 -53
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/normalize.d.ts +51 -0
- package/dist/cli/commands/normalize.js +298 -0
- package/dist/cli/commands/normalize.js.map +1 -0
- package/dist/cli/commands/notes.d.ts +17 -0
- package/dist/cli/commands/notes.js +129 -0
- package/dist/cli/commands/notes.js.map +1 -0
- package/dist/cli/commands/reindex.d.ts +1 -0
- package/dist/cli/commands/reindex.js +208 -32
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.js +164 -30
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/search.d.ts +14 -1
- package/dist/cli/commands/search.js +475 -81
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.js +26 -10
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/templates.d.ts +26 -0
- package/dist/cli/commands/templates.js +179 -0
- package/dist/cli/commands/templates.js.map +1 -0
- package/dist/cli/commands/test-all.d.ts +19 -1
- package/dist/cli/commands/test-all.js +161 -13
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test-runs.d.ts +63 -0
- package/dist/cli/commands/test-runs.js +179 -0
- package/dist/cli/commands/test-runs.js.map +1 -0
- package/dist/cli/commands/test.d.ts +75 -1
- package/dist/cli/commands/test.js +1360 -41
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update-many.d.ts +57 -0
- package/dist/cli/commands/update-many.js +631 -0
- package/dist/cli/commands/update-many.js.map +1 -0
- package/dist/cli/commands/update.d.ts +30 -0
- package/dist/cli/commands/update.js +1393 -84
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.d.ts +30 -0
- package/dist/cli/commands/validate.js +1151 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/error-guidance.d.ts +33 -0
- package/dist/cli/error-guidance.js +337 -0
- package/dist/cli/error-guidance.js.map +1 -0
- package/dist/cli/extension-command-options.d.ts +1 -0
- package/dist/cli/extension-command-options.js +92 -0
- package/dist/cli/extension-command-options.js.map +1 -1
- package/dist/cli/help-content.d.ts +20 -0
- package/dist/cli/help-content.js +543 -0
- package/dist/cli/help-content.js.map +1 -0
- package/dist/cli/main.js +3625 -445
- package/dist/cli/main.js.map +1 -1
- package/dist/core/extensions/index.d.ts +13 -1
- package/dist/core/extensions/index.js +108 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/item-fields.d.ts +2 -0
- package/dist/core/extensions/item-fields.js +79 -0
- package/dist/core/extensions/item-fields.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +322 -9
- package/dist/core/extensions/loader.js +911 -20
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runtime-registrations.d.ts +5 -0
- package/dist/core/extensions/runtime-registrations.js +51 -0
- package/dist/core/extensions/runtime-registrations.js.map +1 -0
- package/dist/core/history/history-stream-policy.d.ts +20 -0
- package/dist/core/history/history-stream-policy.js +53 -0
- package/dist/core/history/history-stream-policy.js.map +1 -0
- package/dist/core/history/history.js +90 -1
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/item/id.js +4 -1
- package/dist/core/item/id.js.map +1 -1
- package/dist/core/item/index.d.ts +1 -0
- package/dist/core/item/index.js +1 -0
- package/dist/core/item/index.js.map +1 -1
- package/dist/core/item/item-format.d.ts +11 -5
- package/dist/core/item/item-format.js +507 -24
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/item/parent-reference-policy.d.ts +6 -0
- package/dist/core/item/parent-reference-policy.js +32 -0
- package/dist/core/item/parent-reference-policy.js.map +1 -0
- package/dist/core/item/parse.d.ts +5 -0
- package/dist/core/item/parse.js +216 -19
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/sprint-release-format.d.ts +6 -0
- package/dist/core/item/sprint-release-format.js +33 -0
- package/dist/core/item/sprint-release-format.js.map +1 -0
- package/dist/core/item/status.d.ts +3 -0
- package/dist/core/item/status.js +24 -0
- package/dist/core/item/status.js.map +1 -0
- package/dist/core/item/type-registry.d.ts +37 -0
- package/dist/core/item/type-registry.js +706 -0
- package/dist/core/item/type-registry.js.map +1 -0
- package/dist/core/lock/lock.d.ts +1 -1
- package/dist/core/lock/lock.js +101 -12
- package/dist/core/lock/lock.js.map +1 -1
- package/dist/core/output/command-aware.d.ts +1 -0
- package/dist/core/output/command-aware.js +394 -0
- package/dist/core/output/command-aware.js.map +1 -0
- package/dist/core/output/output.d.ts +3 -0
- package/dist/core/output/output.js +124 -6
- package/dist/core/output/output.js.map +1 -1
- package/dist/core/schema/runtime-field-filters.d.ts +3 -0
- package/dist/core/schema/runtime-field-filters.js +39 -0
- package/dist/core/schema/runtime-field-filters.js.map +1 -0
- package/dist/core/schema/runtime-field-values.d.ts +8 -0
- package/dist/core/schema/runtime-field-values.js +154 -0
- package/dist/core/schema/runtime-field-values.js.map +1 -0
- package/dist/core/schema/runtime-schema.d.ts +68 -0
- package/dist/core/schema/runtime-schema.js +554 -0
- package/dist/core/schema/runtime-schema.js.map +1 -0
- package/dist/core/search/cache.d.ts +13 -1
- package/dist/core/search/cache.js +123 -14
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/semantic-defaults.d.ts +6 -0
- package/dist/core/search/semantic-defaults.js +120 -0
- package/dist/core/search/semantic-defaults.js.map +1 -0
- package/dist/core/search/vector-stores.js +3 -1
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/shared/command-types.d.ts +2 -0
- package/dist/core/shared/conflict-markers.d.ts +7 -0
- package/dist/core/shared/conflict-markers.js +27 -0
- package/dist/core/shared/conflict-markers.js.map +1 -0
- package/dist/core/shared/constants.d.ts +15 -4
- package/dist/core/shared/constants.js +141 -1
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/errors.d.ts +10 -1
- package/dist/core/shared/errors.js +3 -1
- package/dist/core/shared/errors.js.map +1 -1
- package/dist/core/shared/text-normalization.d.ts +4 -0
- package/dist/core/shared/text-normalization.js +33 -0
- package/dist/core/shared/text-normalization.js.map +1 -0
- package/dist/core/shared/time.d.ts +1 -2
- package/dist/core/shared/time.js +98 -11
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/index.d.ts +1 -0
- package/dist/core/store/index.js +1 -0
- package/dist/core/store/index.js.map +1 -1
- package/dist/core/store/item-format-migration.d.ts +9 -0
- package/dist/core/store/item-format-migration.js +87 -0
- package/dist/core/store/item-format-migration.js.map +1 -0
- package/dist/core/store/item-store.d.ts +13 -4
- package/dist/core/store/item-store.js +238 -51
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/paths.d.ts +21 -3
- package/dist/core/store/paths.js +59 -4
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings.d.ts +14 -1
- package/dist/core/store/settings.js +463 -7
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/telemetry/consent.d.ts +2 -0
- package/dist/core/telemetry/consent.js +79 -0
- package/dist/core/telemetry/consent.js.map +1 -0
- package/dist/core/telemetry/runtime.d.ts +38 -0
- package/dist/core/telemetry/runtime.js +733 -0
- package/dist/core/telemetry/runtime.js.map +1 -0
- package/dist/core/test/background-runs.d.ts +117 -0
- package/dist/core/test/background-runs.js +760 -0
- package/dist/core/test/background-runs.js.map +1 -0
- package/dist/core/test/item-test-run-tracking.d.ts +9 -0
- package/dist/core/test/item-test-run-tracking.js +50 -0
- package/dist/core/test/item-test-run-tracking.js.map +1 -0
- package/dist/sdk/cli-contracts.d.ts +92 -0
- package/dist/sdk/cli-contracts.js +2357 -0
- package/dist/sdk/cli-contracts.js.map +1 -0
- package/dist/sdk/index.d.ts +34 -0
- package/dist/sdk/index.js +23 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/types.d.ts +197 -3
- package/dist/types.js +48 -1
- package/dist/types.js.map +1 -1
- package/docs/ARCHITECTURE.md +368 -39
- package/docs/EXTENSIONS.md +454 -49
- package/docs/RELEASING.md +70 -19
- package/docs/SDK.md +123 -0
- package/docs/examples/starter-extension/README.md +48 -0
- package/docs/examples/starter-extension/index.js +191 -0
- package/docs/examples/starter-extension/manifest.json +17 -0
- package/docs/examples/starter-extension/package.json +10 -0
- package/package.json +41 -14
- package/.pi/extensions/pm-cli/index.ts +0 -778
- package/dist/cli/commands/beads.d.ts +0 -16
- package/dist/cli/commands/beads.js.map +0 -1
- package/dist/cli/commands/install.d.ts +0 -18
- package/dist/cli/commands/install.js +0 -87
- package/dist/cli/commands/install.js.map +0 -1
- package/dist/core/extensions/builtins.d.ts +0 -3
- package/dist/core/extensions/builtins.js +0 -47
- package/dist/core/extensions/builtins.js.map +0 -1
- package/dist/extensions/builtins/beads/index.d.ts +0 -8
- package/dist/extensions/builtins/beads/index.js +0 -33
- package/dist/extensions/builtins/beads/index.js.map +0 -1
- package/dist/extensions/builtins/todos/import-export.d.ts +0 -26
- package/dist/extensions/builtins/todos/import-export.js.map +0 -1
- package/dist/extensions/builtins/todos/index.d.ts +0 -8
- package/dist/extensions/builtins/todos/index.js +0 -38
- package/dist/extensions/builtins/todos/index.js.map +0 -1
|
@@ -1,24 +1,38 @@
|
|
|
1
1
|
export const PM_DIRNAME = ".agents/pm";
|
|
2
2
|
export const SETTINGS_FILENAME = "settings.json";
|
|
3
|
-
export const
|
|
3
|
+
export const PM_CORE_REQUIRED_SUBDIRS = [
|
|
4
4
|
"",
|
|
5
5
|
"epics",
|
|
6
6
|
"features",
|
|
7
7
|
"tasks",
|
|
8
8
|
"chores",
|
|
9
9
|
"issues",
|
|
10
|
+
"schema",
|
|
10
11
|
"history",
|
|
11
12
|
"index",
|
|
12
13
|
"search",
|
|
13
14
|
"extensions",
|
|
14
15
|
"locks",
|
|
15
16
|
];
|
|
17
|
+
export const PM_OPTIONAL_TYPE_SUBDIRS = [
|
|
18
|
+
"decisions",
|
|
19
|
+
"events",
|
|
20
|
+
"reminders",
|
|
21
|
+
"milestones",
|
|
22
|
+
"meetings",
|
|
23
|
+
];
|
|
24
|
+
export const PM_REQUIRED_SUBDIRS = [...PM_CORE_REQUIRED_SUBDIRS, ...PM_OPTIONAL_TYPE_SUBDIRS];
|
|
16
25
|
export const TYPE_TO_FOLDER = {
|
|
17
26
|
Epic: "epics",
|
|
18
27
|
Feature: "features",
|
|
19
28
|
Task: "tasks",
|
|
20
29
|
Chore: "chores",
|
|
21
30
|
Issue: "issues",
|
|
31
|
+
Decision: "decisions",
|
|
32
|
+
Event: "events",
|
|
33
|
+
Reminder: "reminders",
|
|
34
|
+
Milestone: "milestones",
|
|
35
|
+
Meeting: "meetings",
|
|
22
36
|
};
|
|
23
37
|
export const FRONT_MATTER_KEY_ORDER = [
|
|
24
38
|
"id",
|
|
@@ -26,12 +40,15 @@ export const FRONT_MATTER_KEY_ORDER = [
|
|
|
26
40
|
"description",
|
|
27
41
|
"type",
|
|
28
42
|
"source_type",
|
|
43
|
+
"type_options",
|
|
29
44
|
"status",
|
|
30
45
|
"priority",
|
|
31
46
|
"tags",
|
|
32
47
|
"created_at",
|
|
33
48
|
"updated_at",
|
|
34
49
|
"deadline",
|
|
50
|
+
"reminders",
|
|
51
|
+
"events",
|
|
35
52
|
"closed_at",
|
|
36
53
|
"assignee",
|
|
37
54
|
"source_owner",
|
|
@@ -75,22 +92,143 @@ export const FRONT_MATTER_KEY_ORDER = [
|
|
|
75
92
|
"learnings",
|
|
76
93
|
"files",
|
|
77
94
|
"tests",
|
|
95
|
+
"test_runs",
|
|
78
96
|
"docs",
|
|
79
97
|
"close_reason",
|
|
80
98
|
];
|
|
99
|
+
export const GOVERNANCE_PRESET_DEFAULTS = {
|
|
100
|
+
minimal: {
|
|
101
|
+
ownership_enforcement: "none",
|
|
102
|
+
create_mode_default: "progressive",
|
|
103
|
+
close_validation_default: "off",
|
|
104
|
+
parent_reference: "warn",
|
|
105
|
+
metadata_profile: "core",
|
|
106
|
+
force_required_for_stale_lock: false,
|
|
107
|
+
},
|
|
108
|
+
default: {
|
|
109
|
+
ownership_enforcement: "warn",
|
|
110
|
+
create_mode_default: "progressive",
|
|
111
|
+
close_validation_default: "warn",
|
|
112
|
+
parent_reference: "warn",
|
|
113
|
+
metadata_profile: "core",
|
|
114
|
+
force_required_for_stale_lock: true,
|
|
115
|
+
},
|
|
116
|
+
strict: {
|
|
117
|
+
ownership_enforcement: "strict",
|
|
118
|
+
create_mode_default: "strict",
|
|
119
|
+
close_validation_default: "strict",
|
|
120
|
+
parent_reference: "strict_error",
|
|
121
|
+
metadata_profile: "strict",
|
|
122
|
+
force_required_for_stale_lock: true,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
export const DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS = [
|
|
126
|
+
"no active blocker",
|
|
127
|
+
"ready for planned execution sequencing",
|
|
128
|
+
"work completed",
|
|
129
|
+
"work is closed",
|
|
130
|
+
];
|
|
131
|
+
export const DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS = {
|
|
132
|
+
blocked_reason: ["no active blocker because work is closed", "work is closed"],
|
|
133
|
+
resolution: ["closed with implementation evidence", "closed with verification evidence", "work completed and recorded", "work is closed"],
|
|
134
|
+
actual_result: ["closed and recorded", "work completed", "work completed and recorded"],
|
|
135
|
+
};
|
|
81
136
|
export const SETTINGS_DEFAULTS = {
|
|
82
137
|
version: 1,
|
|
83
138
|
id_prefix: "pm-",
|
|
84
139
|
author_default: "",
|
|
140
|
+
item_format: "toon",
|
|
85
141
|
locks: {
|
|
86
142
|
ttl_seconds: 1800,
|
|
87
143
|
},
|
|
88
144
|
output: {
|
|
89
145
|
default_format: "toon",
|
|
90
146
|
},
|
|
147
|
+
history: {
|
|
148
|
+
missing_stream: "auto_create",
|
|
149
|
+
},
|
|
150
|
+
validation: {
|
|
151
|
+
sprint_release_format: "warn",
|
|
152
|
+
parent_reference: "warn",
|
|
153
|
+
metadata_profile: "core",
|
|
154
|
+
metadata_required_fields: [],
|
|
155
|
+
lifecycle_stale_blocker_reason_patterns: [...DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS],
|
|
156
|
+
lifecycle_closure_like_blocked_reason_patterns: [
|
|
157
|
+
...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.blocked_reason,
|
|
158
|
+
],
|
|
159
|
+
lifecycle_closure_like_resolution_patterns: [...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.resolution],
|
|
160
|
+
lifecycle_closure_like_actual_result_patterns: [
|
|
161
|
+
...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.actual_result,
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
governance: {
|
|
165
|
+
preset: "minimal",
|
|
166
|
+
...GOVERNANCE_PRESET_DEFAULTS.minimal,
|
|
167
|
+
},
|
|
91
168
|
workflow: {
|
|
92
169
|
definition_of_done: [],
|
|
93
170
|
},
|
|
171
|
+
testing: {
|
|
172
|
+
record_results_to_items: false,
|
|
173
|
+
},
|
|
174
|
+
telemetry: {
|
|
175
|
+
enabled: true,
|
|
176
|
+
first_run_prompt_completed: false,
|
|
177
|
+
capture_level: "max",
|
|
178
|
+
endpoint: "https://pm-cli.unbrained.dev/v1/events",
|
|
179
|
+
installation_id: "",
|
|
180
|
+
retention_days: 365,
|
|
181
|
+
},
|
|
182
|
+
item_types: {
|
|
183
|
+
definitions: [],
|
|
184
|
+
},
|
|
185
|
+
schema: {
|
|
186
|
+
version: 1,
|
|
187
|
+
files: {
|
|
188
|
+
types: "schema/types.json",
|
|
189
|
+
statuses: "schema/statuses.json",
|
|
190
|
+
fields: "schema/fields.json",
|
|
191
|
+
workflows: "schema/workflows.json",
|
|
192
|
+
},
|
|
193
|
+
statuses: [
|
|
194
|
+
{
|
|
195
|
+
id: "draft",
|
|
196
|
+
roles: ["draft"],
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
id: "open",
|
|
200
|
+
roles: ["active", "default_open"],
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
id: "in_progress",
|
|
204
|
+
aliases: ["in-progress"],
|
|
205
|
+
roles: ["active"],
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
id: "blocked",
|
|
209
|
+
roles: ["blocked"],
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: "closed",
|
|
213
|
+
roles: ["terminal", "terminal_done", "default_close"],
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: "canceled",
|
|
217
|
+
aliases: ["cancelled"],
|
|
218
|
+
roles: ["terminal", "terminal_canceled", "default_cancel"],
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
fields: [],
|
|
222
|
+
workflow: {
|
|
223
|
+
draft_status: "draft",
|
|
224
|
+
open_status: "open",
|
|
225
|
+
in_progress_status: "in_progress",
|
|
226
|
+
blocked_status: "blocked",
|
|
227
|
+
close_status: "closed",
|
|
228
|
+
canceled_status: "canceled",
|
|
229
|
+
},
|
|
230
|
+
unknown_field_policy: "allow",
|
|
231
|
+
},
|
|
94
232
|
extensions: {
|
|
95
233
|
enabled: [],
|
|
96
234
|
disabled: [],
|
|
@@ -102,6 +240,7 @@ export const SETTINGS_DEFAULTS = {
|
|
|
102
240
|
embedding_model: "",
|
|
103
241
|
embedding_batch_size: 32,
|
|
104
242
|
scanner_max_batch_retries: 3,
|
|
243
|
+
provider: "",
|
|
105
244
|
},
|
|
106
245
|
providers: {
|
|
107
246
|
openai: {
|
|
@@ -115,6 +254,7 @@ export const SETTINGS_DEFAULTS = {
|
|
|
115
254
|
},
|
|
116
255
|
},
|
|
117
256
|
vector_store: {
|
|
257
|
+
adapter: "",
|
|
118
258
|
qdrant: {
|
|
119
259
|
url: "",
|
|
120
260
|
api_key: "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/shared/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/core/shared/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
+
export interface PmCliErrorContext {
|
|
2
|
+
code?: string;
|
|
3
|
+
type?: string;
|
|
4
|
+
required?: string;
|
|
5
|
+
why?: string;
|
|
6
|
+
examples?: string[];
|
|
7
|
+
nextSteps?: string[];
|
|
8
|
+
}
|
|
1
9
|
export declare class PmCliError extends Error {
|
|
2
10
|
readonly exitCode: number;
|
|
3
|
-
|
|
11
|
+
readonly context: PmCliErrorContext;
|
|
12
|
+
constructor(message: string, exitCode: number, context?: PmCliErrorContext);
|
|
4
13
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
export class PmCliError extends Error {
|
|
2
2
|
exitCode;
|
|
3
|
-
|
|
3
|
+
context;
|
|
4
|
+
constructor(message, exitCode, context = {}) {
|
|
4
5
|
super(message);
|
|
5
6
|
this.name = "PmCliError";
|
|
6
7
|
this.exitCode = exitCode;
|
|
8
|
+
this.context = context;
|
|
7
9
|
}
|
|
8
10
|
}
|
|
9
11
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnB,QAAQ,CAAS;IACjB,OAAO,CAAoB;IAE3C,YAAY,OAAe,EAAE,QAAgB,EAAE,UAA6B,EAAE;QAC5E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function normalizeLowercaseWhitespace(value: string): string;
|
|
2
|
+
export declare function tokenizeAlphaNumeric(value: string): string[];
|
|
3
|
+
export declare function uniqueTokens(value: string): string[];
|
|
4
|
+
export declare function jaccardSimilarity(leftTokens: string[], rightTokens: string[]): number;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function normalizeLowercaseWhitespace(value) {
|
|
2
|
+
return value
|
|
3
|
+
.trim()
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.replace(/\s+/g, " ");
|
|
6
|
+
}
|
|
7
|
+
export function tokenizeAlphaNumeric(value) {
|
|
8
|
+
return normalizeLowercaseWhitespace(value)
|
|
9
|
+
.split(/[^a-z0-9]+/)
|
|
10
|
+
.filter((token) => token.length > 0);
|
|
11
|
+
}
|
|
12
|
+
export function uniqueTokens(value) {
|
|
13
|
+
return [...new Set(tokenizeAlphaNumeric(value))];
|
|
14
|
+
}
|
|
15
|
+
export function jaccardSimilarity(leftTokens, rightTokens) {
|
|
16
|
+
if (leftTokens.length === 0 && rightTokens.length === 0) {
|
|
17
|
+
return 1;
|
|
18
|
+
}
|
|
19
|
+
if (leftTokens.length === 0 || rightTokens.length === 0) {
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
const leftSet = new Set(leftTokens);
|
|
23
|
+
const rightSet = new Set(rightTokens);
|
|
24
|
+
let intersection = 0;
|
|
25
|
+
for (const token of leftSet) {
|
|
26
|
+
if (rightSet.has(token)) {
|
|
27
|
+
intersection += 1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const union = new Set([...leftSet, ...rightSet]).size;
|
|
31
|
+
return union === 0 ? 0 : intersection / union;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=text-normalization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-normalization.js","sourceRoot":"","sources":["../../../src/core/shared/text-normalization.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,4BAA4B,CAAC,KAAK,CAAC;SACvC,KAAK,CAAC,YAAY,CAAC;SACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAoB,EAAE,WAAqB;IAC3E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC;AAChD,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export declare function nowIso(): string;
|
|
2
2
|
export declare function isTimestampLiteral(input: string): boolean;
|
|
3
3
|
export declare function compareTimestampStrings(left: string, right: string): number;
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function resolveIsoOrRelative(input: string, now?: Date): string;
|
|
4
|
+
export declare function resolveIsoOrRelative(input: string, now?: Date, fieldLabel?: string): string;
|
package/dist/core/shared/time.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { PmCliError } from "./errors.js";
|
|
2
2
|
import { EXIT_CODE } from "./constants.js";
|
|
3
|
-
const RELATIVE_DEADLINE =
|
|
3
|
+
const RELATIVE_DEADLINE = /^([+-]?)(\d+)([hdwm])$/i;
|
|
4
|
+
const COMPOUND_RELATIVE_DEADLINE = /^[+-]?\d+[hdwm](?:[+-]\d+[hdwm])+$/i;
|
|
5
|
+
const COMPACT_DATE = /^(\d{4})(\d{2})(\d{2})$/;
|
|
6
|
+
const COMPACT_DATETIME = /^(\d{4})(\d{2})(\d{2})(?:[T\s]?)(\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
|
|
7
|
+
const HYPHEN_TIME = /^(\d{4}-\d{2}-\d{2})[T\s](\d{2})-(\d{2})(?:-(\d{2}))?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
|
|
8
|
+
const COMPACT_TIME = /^(\d{4}-\d{2}-\d{2})[T\s](\d{2})(\d{2})(\d{2})?([.,]\d{1,3})?(Z|[+-]\d{2}:?\d{2})?$/i;
|
|
4
9
|
export function nowIso() {
|
|
5
10
|
return new Date().toISOString();
|
|
6
11
|
}
|
|
@@ -15,24 +20,106 @@ export function compareTimestampStrings(left, right) {
|
|
|
15
20
|
}
|
|
16
21
|
return left.localeCompare(right);
|
|
17
22
|
}
|
|
18
|
-
|
|
19
|
-
if (
|
|
20
|
-
return
|
|
21
|
-
const
|
|
22
|
-
return
|
|
23
|
+
function normalizeFraction(raw) {
|
|
24
|
+
if (!raw)
|
|
25
|
+
return "";
|
|
26
|
+
const digits = raw.slice(1);
|
|
27
|
+
return `.${digits.padEnd(3, "0").slice(0, 3)}`;
|
|
23
28
|
}
|
|
24
|
-
|
|
29
|
+
function normalizeOffset(raw) {
|
|
30
|
+
if (!raw)
|
|
31
|
+
return "";
|
|
32
|
+
if (raw.toUpperCase() === "Z")
|
|
33
|
+
return "Z";
|
|
34
|
+
const compact = /^([+-]\d{2})(\d{2})$/.exec(raw);
|
|
35
|
+
if (compact)
|
|
36
|
+
return `${compact[1]}:${compact[2]}`;
|
|
37
|
+
return raw;
|
|
38
|
+
}
|
|
39
|
+
function normalizeTimestampCandidates(input) {
|
|
40
|
+
const candidates = [];
|
|
41
|
+
const push = (value) => {
|
|
42
|
+
if (!value || value === input || candidates.includes(value))
|
|
43
|
+
return;
|
|
44
|
+
candidates.push(value);
|
|
45
|
+
};
|
|
46
|
+
const compactDate = COMPACT_DATE.exec(input);
|
|
47
|
+
if (compactDate) {
|
|
48
|
+
const [, year, month, day] = compactDate;
|
|
49
|
+
push(`${year}-${month}-${day}`);
|
|
50
|
+
}
|
|
51
|
+
const compactDateTime = COMPACT_DATETIME.exec(input);
|
|
52
|
+
if (compactDateTime) {
|
|
53
|
+
const [, year, month, day, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactDateTime;
|
|
54
|
+
const second = secondRaw ? `:${secondRaw}` : "";
|
|
55
|
+
push(`${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
|
|
56
|
+
}
|
|
57
|
+
const hyphenTime = HYPHEN_TIME.exec(input);
|
|
58
|
+
if (hyphenTime) {
|
|
59
|
+
const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = hyphenTime;
|
|
60
|
+
const second = secondRaw ? `:${secondRaw}` : "";
|
|
61
|
+
push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
|
|
62
|
+
}
|
|
63
|
+
const compactTime = COMPACT_TIME.exec(input);
|
|
64
|
+
if (compactTime) {
|
|
65
|
+
const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactTime;
|
|
66
|
+
const second = secondRaw ? `:${secondRaw}` : "";
|
|
67
|
+
push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);
|
|
68
|
+
}
|
|
69
|
+
const spaceDateTime = /^(\d{4}-\d{2}-\d{2})\s+(.+)$/.exec(input);
|
|
70
|
+
if (spaceDateTime) {
|
|
71
|
+
const [, datePart, timePart] = spaceDateTime;
|
|
72
|
+
push(`${datePart}T${timePart}`);
|
|
73
|
+
}
|
|
74
|
+
return candidates;
|
|
75
|
+
}
|
|
76
|
+
function parseTimestampWithFallbacks(input) {
|
|
77
|
+
const direct = Date.parse(input);
|
|
78
|
+
if (Number.isFinite(direct))
|
|
79
|
+
return direct;
|
|
80
|
+
for (const candidate of normalizeTimestampCandidates(input)) {
|
|
81
|
+
const parsed = Date.parse(candidate);
|
|
82
|
+
if (Number.isFinite(parsed))
|
|
83
|
+
return parsed;
|
|
84
|
+
}
|
|
85
|
+
return Number.NaN;
|
|
86
|
+
}
|
|
87
|
+
function daysInUtcMonth(year, monthIndex) {
|
|
88
|
+
return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();
|
|
89
|
+
}
|
|
90
|
+
function addUtcMonths(now, amount) {
|
|
91
|
+
const result = new Date(now.getTime());
|
|
92
|
+
const startDay = result.getUTCDate();
|
|
93
|
+
const targetMonthIndex = result.getUTCMonth() + amount;
|
|
94
|
+
const targetYear = result.getUTCFullYear() + Math.floor(targetMonthIndex / 12);
|
|
95
|
+
const targetMonth = ((targetMonthIndex % 12) + 12) % 12;
|
|
96
|
+
const day = Math.min(startDay, daysInUtcMonth(targetYear, targetMonth));
|
|
97
|
+
result.setUTCFullYear(targetYear, targetMonth, day);
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
export function resolveIsoOrRelative(input, now = new Date(), fieldLabel = "deadline") {
|
|
25
101
|
const trimmed = input.trim();
|
|
102
|
+
if (trimmed.toLowerCase() === "now") {
|
|
103
|
+
return now.toISOString();
|
|
104
|
+
}
|
|
26
105
|
const relative = RELATIVE_DEADLINE.exec(trimmed);
|
|
27
106
|
if (relative) {
|
|
28
|
-
const
|
|
29
|
-
const
|
|
107
|
+
const sign = relative[1] === "-" ? -1 : 1;
|
|
108
|
+
const amount = Number.parseInt(relative[2], 10) * sign;
|
|
109
|
+
const unit = relative[3].toLowerCase();
|
|
110
|
+
if (unit === "m") {
|
|
111
|
+
return addUtcMonths(now, amount).toISOString();
|
|
112
|
+
}
|
|
30
113
|
const msPerUnit = unit === "h" ? 60 * 60 * 1000 : unit === "d" ? 24 * 60 * 60 * 1000 : 7 * 24 * 60 * 60 * 1000;
|
|
31
114
|
return new Date(now.getTime() + amount * msPerUnit).toISOString();
|
|
32
115
|
}
|
|
33
|
-
const timestamp =
|
|
116
|
+
const timestamp = parseTimestampWithFallbacks(trimmed);
|
|
34
117
|
if (!Number.isFinite(timestamp)) {
|
|
35
|
-
|
|
118
|
+
const normalizedLabel = fieldLabel.trim().length > 0 ? fieldLabel.trim() : "deadline";
|
|
119
|
+
const guidance = COMPOUND_RELATIVE_DEADLINE.test(trimmed)
|
|
120
|
+
? "Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string."
|
|
121
|
+
: 'Use ISO/date string input, "now", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';
|
|
122
|
+
throw new PmCliError(`Invalid ${normalizedLabel} value "${input}". ${guidance}`, EXIT_CODE.USAGE);
|
|
36
123
|
}
|
|
37
124
|
return new Date(timestamp).toISOString();
|
|
38
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/core/shared/time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,iBAAiB,GAAG,
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/core/shared/time.ts"],"names":[],"mappings":"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"}
|
package/dist/core/store/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/store/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/store/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ItemFormat, RuntimeSchemaSettings } from "../../types/index.js";
|
|
2
|
+
export interface ItemFormatMigrationResult {
|
|
3
|
+
target_format: ItemFormat;
|
|
4
|
+
scanned: number;
|
|
5
|
+
migrated: string[];
|
|
6
|
+
removed: string[];
|
|
7
|
+
warnings: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function migrateItemFilesToFormat(pmRoot: string, targetFormat: ItemFormat, op?: string, typeToFolder?: Record<string, string>, schema?: RuntimeSchemaSettings): Promise<ItemFormatMigrationResult>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { runActiveOnWriteHooks } from "../extensions/index.js";
|
|
4
|
+
import { pathExists, readFileIfExists, removeFileIfExists, writeFileAtomic } from "../fs/fs-utils.js";
|
|
5
|
+
import { parseItemDocument, serializeItemDocument } from "../item/item-format.js";
|
|
6
|
+
import { TYPE_TO_FOLDER } from "../shared/constants.js";
|
|
7
|
+
import { getItemFormatFromPath, getItemPath } from "./paths.js";
|
|
8
|
+
function alternateItemFormat(targetFormat) {
|
|
9
|
+
return targetFormat === "toon" ? "json_markdown" : "toon";
|
|
10
|
+
}
|
|
11
|
+
function normalizeRelativePath(pmRoot, absolutePath) {
|
|
12
|
+
return path.relative(pmRoot, absolutePath).replaceAll("\\", "/");
|
|
13
|
+
}
|
|
14
|
+
export async function migrateItemFilesToFormat(pmRoot, targetFormat, op = "item_format:migrate", typeToFolder = TYPE_TO_FOLDER, schema) {
|
|
15
|
+
const migratedIds = new Set();
|
|
16
|
+
const removedPaths = new Set();
|
|
17
|
+
const warnings = [];
|
|
18
|
+
let scanned = 0;
|
|
19
|
+
const alternateFormat = alternateItemFormat(targetFormat);
|
|
20
|
+
const typeEntries = Object.entries(typeToFolder);
|
|
21
|
+
for (const [itemType, folder] of typeEntries) {
|
|
22
|
+
const directoryPath = path.join(pmRoot, folder);
|
|
23
|
+
let files = [];
|
|
24
|
+
try {
|
|
25
|
+
files = await fs.readdir(directoryPath);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const variantsById = new Map();
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
const absolutePath = path.join(directoryPath, file);
|
|
33
|
+
const itemFormat = getItemFormatFromPath(absolutePath);
|
|
34
|
+
if (!itemFormat) {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const extension = path.extname(file);
|
|
38
|
+
const itemId = file.slice(0, file.length - extension.length).trim();
|
|
39
|
+
if (itemId.length === 0) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const entry = variantsById.get(itemId) ?? {};
|
|
43
|
+
entry[itemFormat] = absolutePath;
|
|
44
|
+
variantsById.set(itemId, entry);
|
|
45
|
+
}
|
|
46
|
+
const itemIds = [...variantsById.keys()].sort((left, right) => left.localeCompare(right));
|
|
47
|
+
for (const itemId of itemIds) {
|
|
48
|
+
const variants = variantsById.get(itemId);
|
|
49
|
+
scanned += 1;
|
|
50
|
+
const sourcePath = (variants[targetFormat] ?? variants[alternateFormat]);
|
|
51
|
+
const sourceFormat = sourcePath === variants[targetFormat] ? targetFormat : alternateFormat;
|
|
52
|
+
const sourceRaw = await fs.readFile(sourcePath, "utf8");
|
|
53
|
+
const parsedDocument = parseItemDocument(sourceRaw, { format: sourceFormat, schema });
|
|
54
|
+
const targetPath = getItemPath(pmRoot, itemType, itemId, targetFormat, typeToFolder);
|
|
55
|
+
const serializedTarget = serializeItemDocument(parsedDocument, { format: targetFormat, schema });
|
|
56
|
+
const existingTargetRaw = await readFileIfExists(targetPath);
|
|
57
|
+
if (existingTargetRaw !== serializedTarget) {
|
|
58
|
+
await writeFileAtomic(targetPath, serializedTarget);
|
|
59
|
+
warnings.push(...(await runActiveOnWriteHooks({
|
|
60
|
+
path: targetPath,
|
|
61
|
+
scope: "project",
|
|
62
|
+
op,
|
|
63
|
+
})));
|
|
64
|
+
migratedIds.add(itemId);
|
|
65
|
+
}
|
|
66
|
+
const alternatePath = variants[alternateFormat];
|
|
67
|
+
if (alternatePath && alternatePath !== targetPath && (await pathExists(alternatePath))) {
|
|
68
|
+
await removeFileIfExists(alternatePath);
|
|
69
|
+
removedPaths.add(normalizeRelativePath(pmRoot, alternatePath));
|
|
70
|
+
warnings.push(...(await runActiveOnWriteHooks({
|
|
71
|
+
path: alternatePath,
|
|
72
|
+
scope: "project",
|
|
73
|
+
op: `${op}:remove`,
|
|
74
|
+
})));
|
|
75
|
+
migratedIds.add(itemId);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
target_format: targetFormat,
|
|
81
|
+
scanned,
|
|
82
|
+
migrated: [...migratedIds].sort((left, right) => left.localeCompare(right)),
|
|
83
|
+
removed: [...removedPaths].sort((left, right) => left.localeCompare(right)),
|
|
84
|
+
warnings,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=item-format-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-format-migration.js","sourceRoot":"","sources":["../../../src/core/store/item-format-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import type { ItemDocument, ItemFrontMatter, ItemType, PmSettings } from "../../types/index.js";
|
|
1
|
+
import type { ItemDocument, ItemFormat, ItemFrontMatter, ItemType, PmSettings, RuntimeSchemaSettings } from "../../types/index.js";
|
|
2
2
|
export interface LocatedItem {
|
|
3
3
|
id: string;
|
|
4
4
|
type: ItemType;
|
|
5
5
|
itemPath: string;
|
|
6
|
+
item_format: ItemFormat;
|
|
6
7
|
}
|
|
7
|
-
export declare function locateItem(pmRoot: string, rawId: string, idPrefix: string): Promise<LocatedItem | null>;
|
|
8
|
-
export declare function readLocatedItem(item: LocatedItem
|
|
8
|
+
export declare function locateItem(pmRoot: string, rawId: string, idPrefix: string, preferredFormat?: ItemFormat, typeToFolder?: Record<string, string>): Promise<LocatedItem | null>;
|
|
9
|
+
export declare function readLocatedItem(item: LocatedItem, options?: {
|
|
10
|
+
schema?: RuntimeSchemaSettings;
|
|
11
|
+
warnings?: string[];
|
|
12
|
+
}): Promise<{
|
|
9
13
|
raw: string;
|
|
10
14
|
document: ItemDocument;
|
|
11
15
|
}>;
|
|
12
|
-
export declare function listAllFrontMatter(pmRoot: string): Promise<ItemFrontMatter[]>;
|
|
16
|
+
export declare function listAllFrontMatter(pmRoot: string, preferredFormat?: ItemFormat, typeToFolder?: Record<string, string>, warnings?: string[], schema?: RuntimeSchemaSettings): Promise<ItemFrontMatter[]>;
|
|
17
|
+
export declare function listAllFrontMatterWithBody(pmRoot: string, preferredFormat?: ItemFormat, typeToFolder?: Record<string, string>, warnings?: string[], schema?: RuntimeSchemaSettings): Promise<Array<ItemFrontMatter & {
|
|
18
|
+
body: string;
|
|
19
|
+
}>>;
|
|
13
20
|
export declare function mutateItem(params: {
|
|
14
21
|
pmRoot: string;
|
|
15
22
|
settings: PmSettings;
|
|
@@ -18,6 +25,8 @@ export declare function mutateItem(params: {
|
|
|
18
25
|
author: string;
|
|
19
26
|
message?: string;
|
|
20
27
|
force?: boolean;
|
|
28
|
+
bypassAssigneeConflict?: boolean;
|
|
29
|
+
typeToFolder?: Record<string, string>;
|
|
21
30
|
mutate: (document: ItemDocument) => {
|
|
22
31
|
changedFields: string[];
|
|
23
32
|
warnings?: string[];
|