@devflow-tools/database 0.17.8 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/dist/data/LocalDataProvider.d.ts +63 -0
  3. package/dist/data/LocalDataProvider.js +332 -0
  4. package/dist/data/default-enforcer-rules.d.ts +3 -0
  5. package/dist/data/default-enforcer-rules.js +170 -0
  6. package/dist/data/devflow-schema.d.ts +2 -0
  7. package/dist/data/devflow-schema.js +80 -0
  8. package/dist/database.d.ts +45 -7
  9. package/dist/database.js +583 -125
  10. package/dist/index.d.ts +8 -4
  11. package/dist/index.js +11 -5
  12. package/dist/retrieval-ledger.d.ts +16 -1
  13. package/dist/retrieval-ledger.js +6 -0
  14. package/dist/retrieval-runtime.d.ts +39 -0
  15. package/dist/retrieval-runtime.js +2 -0
  16. package/dist/task-aggregate.d.ts +49 -0
  17. package/dist/task-aggregate.js +2 -0
  18. package/dist/task-semantic-control.d.ts +8 -1
  19. package/dist/task-semantic-control.js +2 -4
  20. package/package.json +15 -3
  21. package/CHANGELOG.md +0 -844
  22. package/__tests__/database.failure-category.test.ts +0 -44
  23. package/__tests__/database.host-actions.test.ts +0 -405
  24. package/__tests__/database.learning-candidates.test.ts +0 -93
  25. package/__tests__/database.memory-turn-receipts.test.ts +0 -98
  26. package/__tests__/database.retrieval-ledger.test.ts +0 -68
  27. package/__tests__/database.retrieval-sessions.test.ts +0 -79
  28. package/__tests__/database.semantic-resolution.test.ts +0 -87
  29. package/__tests__/database.skill-executions.test.ts +0 -456
  30. package/__tests__/database.task-runtime.test.ts +0 -73
  31. package/__tests__/database.test.ts +0 -177
  32. package/__tests__/database.work-queue.test.ts +0 -274
  33. package/__tests__/database.workflow-workers.test.ts +0 -60
  34. package/__tests__/node-sqlite.test.ts +0 -68
  35. package/src/database.ts +0 -5853
  36. package/src/host-actions.ts +0 -211
  37. package/src/index.ts +0 -153
  38. package/src/learning-candidates.ts +0 -181
  39. package/src/node-sqlite.ts +0 -60
  40. package/src/obligation-ledger.ts +0 -57
  41. package/src/retrieval-ledger.ts +0 -35
  42. package/src/retrieval-sessions.ts +0 -196
  43. package/src/semantic-resolution.ts +0 -181
  44. package/src/task-runtime.ts +0 -169
  45. package/src/task-semantic-control.ts +0 -270
  46. package/src/types.ts +0 -17
  47. package/src/work-queue.ts +0 -123
  48. package/src/workflow-workers.ts +0 -198
  49. package/tsconfig.json +0 -19
  50. package/tsconfig.tsbuildinfo +0 -1
  51. package/vitest.config.ts +0 -41
package/dist/index.d.ts CHANGED
@@ -1,20 +1,24 @@
1
1
  export { DevFlowDatabase, getGlobalDevFlowDbPath, openGlobalDevFlowDatabase, openGlobalDevFlowReadOnlyDatabase, } from './database';
2
+ export { LocalDataProvider } from './data/LocalDataProvider';
3
+ export { DEVFLOW_SCHEMA_SQL, DEVFLOW_TABLE_NAMES } from './data/devflow-schema';
4
+ export { DEFAULT_ENFORCER_RULES, seedDefaultEnforcerRules } from './data/default-enforcer-rules';
2
5
  export type { BenchmarkReportMetaRecord, BenchmarkReportRecord, FeedbackRecord, GovernanceAuditRecord, GovernanceRuleRecord, HookFallbackRecord, HookReceiptRecord, ContextReceiptRecord, ContextSelectionEventRecord, PolicyVerificationBaselineRecord, MemoryDistillCheckpointRecord, MemoryTurnRecord, MemoryTurnStatus, TelemetryFailureRecord, } from './database';
3
6
  export type { EnqueueWorkInput, LeaseWorkInput, RequestSessionClosureInput, SessionClosureRecord, SessionClosureState, WorkError, WorkItemRecord, WorkKind, WorkQueueHealth, WorkState, ProjectMutationLeaseRecord, } from './work-queue';
4
- export type { RetrievalLedgerEventRecord, RetrievalLedgerSourceType, RetrievalLedgerStage, } from './retrieval-ledger';
7
+ export type { RetrievalLedgerEventRecord, RetrievalLedgerSourceType, RetrievalLedgerStage, VerifyReceiptBoundRetrievalInput, VerifyReceiptBoundRetrievalResult, } from './retrieval-ledger';
8
+ export { retrievalLedgerTransitionId } from './retrieval-ledger';
5
9
  export { hostActionReportsEqual, isHostActionState, mapHostActionRow, serializeHostActionReport, } from './host-actions';
6
10
  export { RETRIEVAL_MAX_CYCLES, isRetrievalSessionState } from './retrieval-sessions';
7
11
  export type { AppendRetrievalCycleInput, CreateRetrievalSessionInput, RetrievalCycleRecord, RetrievalGapKind, RetrievalGapRecord, RetrievalSessionRecord, RetrievalSessionState, } from './retrieval-sessions';
12
+ export type { AppendRetrievalCycleV2Input, CreateRetrievalSessionV2Input, RetrievalSessionV2Record, } from './retrieval-runtime';
8
13
  export type { FailHostActionInput, HostActionRecord, HostActionState, ReportHostActionInput, RequestHostActionInput, StartHostActionInput, VerifyHostActionInput, } from './host-actions';
9
14
  export { mapSessionObligationRow, normalizeTurnId, } from './obligation-ledger';
10
15
  export { assertTaskIdentity, mapChannelQueryPlanRow, mapTaskIntentArtifactRow, mapTerminalTransitionRow, mapToolNameResolutionRow, mapTranscriptCheckpointRow, stableSemanticJson, } from './task-semantic-control';
11
16
  export { mapTaskRuntimeEventRow, mapTaskRuntimeSnapshotRow, stableTaskRuntimeHash, stableTaskRuntimeJson, } from './task-runtime';
17
+ export type { AppendTaskAggregateInput, AppendTaskAggregateResult, LeaseTaskOutboxInput, TaskAggregateRecord, TaskOutboxRecord, } from './task-aggregate';
12
18
  export type { TaskRuntimeChannelRecord, TaskRuntimeChannelRequirement, TaskRuntimeChannelStatus, TaskRuntimeEventRecord, TaskRuntimeIdentityRecord, TaskRuntimeObligationRecord, TaskRuntimeObligationState, TaskRuntimeSnapshotRecord, } from './task-runtime';
13
- export type { ChannelQueryPlanRecord, TaskIdentityRecord, TaskIntentArtifactRecord, TerminalTransitionRecord, ToolNameResolutionRecord, ToolNameResolutionStatus, TranscriptCheckpointRecord, } from './task-semantic-control';
19
+ export type { CanonicalSemanticTaskWrite, ChannelQueryPlanRecord, TaskIdentityRecord, TaskIntentArtifactRecord, TerminalTransitionRecord, ToolNameResolutionRecord, ToolNameResolutionStatus, TranscriptCheckpointRecord, } from './task-semantic-control';
14
20
  export { LEGAL_WORKFLOW_WORKER_TRANSITIONS, TERMINAL_WORKFLOW_WORKER_STATES, mapWorkflowMergeRow, mapWorkflowWorkerEventRow, mapWorkflowWorkerRow, } from './workflow-workers';
15
21
  export type { CreateWorkflowWorkerInput, EnqueueWorkflowMergeInput, TransitionWorkflowWorkerInput, WorkflowMergeRecord, WorkflowMergeState, WorkflowWorkerEventRecord, WorkflowWorkerRecord, WorkflowWorkerState, } from './workflow-workers';
16
22
  export { mapLearningCandidateRow, mapLearningEvidenceRow, mapLearningVersionRow, stableLearningJson, } from './learning-candidates';
17
23
  export type { AddLearningCandidateEvidenceInput, LearningCandidateEvidenceRecord, LearningCandidateKind, LearningCandidateRecord, LearningCandidateState, LearningCandidateVersionRecord, LearningEvidencePolarity, LearningOutcomeState, TransitionLearningCandidateInput, UpsertLearningCandidateInput, } from './learning-candidates';
18
24
  export type { SessionObligationKind, SessionObligationRecord, SessionObligationState, } from './obligation-ledger';
19
- export { assertSemanticResolutionRecord, mapSemanticResolutionRow, stableSemanticResolutionJson, } from './semantic-resolution';
20
- export type { PersistedSemanticGeneratedBy, PersistedSemanticResolutionState, SemanticResolutionRecord, } from './semantic-resolution';
package/dist/index.js CHANGED
@@ -1,11 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stableSemanticResolutionJson = exports.mapSemanticResolutionRow = exports.assertSemanticResolutionRecord = exports.stableLearningJson = exports.mapLearningVersionRow = exports.mapLearningEvidenceRow = exports.mapLearningCandidateRow = exports.mapWorkflowWorkerRow = exports.mapWorkflowWorkerEventRow = exports.mapWorkflowMergeRow = exports.TERMINAL_WORKFLOW_WORKER_STATES = exports.LEGAL_WORKFLOW_WORKER_TRANSITIONS = exports.stableTaskRuntimeJson = exports.stableTaskRuntimeHash = exports.mapTaskRuntimeSnapshotRow = exports.mapTaskRuntimeEventRow = exports.stableSemanticJson = exports.mapTranscriptCheckpointRow = exports.mapToolNameResolutionRow = exports.mapTerminalTransitionRow = exports.mapTaskIntentArtifactRow = exports.mapChannelQueryPlanRow = exports.assertTaskIdentity = exports.normalizeTurnId = exports.mapSessionObligationRow = exports.isRetrievalSessionState = exports.RETRIEVAL_MAX_CYCLES = exports.serializeHostActionReport = exports.mapHostActionRow = exports.isHostActionState = exports.hostActionReportsEqual = exports.openGlobalDevFlowReadOnlyDatabase = exports.openGlobalDevFlowDatabase = exports.getGlobalDevFlowDbPath = exports.DevFlowDatabase = void 0;
3
+ exports.stableLearningJson = exports.mapLearningVersionRow = exports.mapLearningEvidenceRow = exports.mapLearningCandidateRow = exports.mapWorkflowWorkerRow = exports.mapWorkflowWorkerEventRow = exports.mapWorkflowMergeRow = exports.TERMINAL_WORKFLOW_WORKER_STATES = exports.LEGAL_WORKFLOW_WORKER_TRANSITIONS = exports.stableTaskRuntimeJson = exports.stableTaskRuntimeHash = exports.mapTaskRuntimeSnapshotRow = exports.mapTaskRuntimeEventRow = exports.stableSemanticJson = exports.mapTranscriptCheckpointRow = exports.mapToolNameResolutionRow = exports.mapTerminalTransitionRow = exports.mapTaskIntentArtifactRow = exports.mapChannelQueryPlanRow = exports.assertTaskIdentity = exports.normalizeTurnId = exports.mapSessionObligationRow = exports.isRetrievalSessionState = exports.RETRIEVAL_MAX_CYCLES = exports.serializeHostActionReport = exports.mapHostActionRow = exports.isHostActionState = exports.hostActionReportsEqual = exports.retrievalLedgerTransitionId = exports.seedDefaultEnforcerRules = exports.DEFAULT_ENFORCER_RULES = exports.DEVFLOW_TABLE_NAMES = exports.DEVFLOW_SCHEMA_SQL = exports.LocalDataProvider = exports.openGlobalDevFlowReadOnlyDatabase = exports.openGlobalDevFlowDatabase = exports.getGlobalDevFlowDbPath = exports.DevFlowDatabase = void 0;
4
4
  var database_1 = require("./database");
5
5
  Object.defineProperty(exports, "DevFlowDatabase", { enumerable: true, get: function () { return database_1.DevFlowDatabase; } });
6
6
  Object.defineProperty(exports, "getGlobalDevFlowDbPath", { enumerable: true, get: function () { return database_1.getGlobalDevFlowDbPath; } });
7
7
  Object.defineProperty(exports, "openGlobalDevFlowDatabase", { enumerable: true, get: function () { return database_1.openGlobalDevFlowDatabase; } });
8
8
  Object.defineProperty(exports, "openGlobalDevFlowReadOnlyDatabase", { enumerable: true, get: function () { return database_1.openGlobalDevFlowReadOnlyDatabase; } });
9
+ var LocalDataProvider_1 = require("./data/LocalDataProvider");
10
+ Object.defineProperty(exports, "LocalDataProvider", { enumerable: true, get: function () { return LocalDataProvider_1.LocalDataProvider; } });
11
+ var devflow_schema_1 = require("./data/devflow-schema");
12
+ Object.defineProperty(exports, "DEVFLOW_SCHEMA_SQL", { enumerable: true, get: function () { return devflow_schema_1.DEVFLOW_SCHEMA_SQL; } });
13
+ Object.defineProperty(exports, "DEVFLOW_TABLE_NAMES", { enumerable: true, get: function () { return devflow_schema_1.DEVFLOW_TABLE_NAMES; } });
14
+ var default_enforcer_rules_1 = require("./data/default-enforcer-rules");
15
+ Object.defineProperty(exports, "DEFAULT_ENFORCER_RULES", { enumerable: true, get: function () { return default_enforcer_rules_1.DEFAULT_ENFORCER_RULES; } });
16
+ Object.defineProperty(exports, "seedDefaultEnforcerRules", { enumerable: true, get: function () { return default_enforcer_rules_1.seedDefaultEnforcerRules; } });
17
+ var retrieval_ledger_1 = require("./retrieval-ledger");
18
+ Object.defineProperty(exports, "retrievalLedgerTransitionId", { enumerable: true, get: function () { return retrieval_ledger_1.retrievalLedgerTransitionId; } });
9
19
  var host_actions_1 = require("./host-actions");
10
20
  Object.defineProperty(exports, "hostActionReportsEqual", { enumerable: true, get: function () { return host_actions_1.hostActionReportsEqual; } });
11
21
  Object.defineProperty(exports, "isHostActionState", { enumerable: true, get: function () { return host_actions_1.isHostActionState; } });
@@ -41,7 +51,3 @@ Object.defineProperty(exports, "mapLearningCandidateRow", { enumerable: true, ge
41
51
  Object.defineProperty(exports, "mapLearningEvidenceRow", { enumerable: true, get: function () { return learning_candidates_1.mapLearningEvidenceRow; } });
42
52
  Object.defineProperty(exports, "mapLearningVersionRow", { enumerable: true, get: function () { return learning_candidates_1.mapLearningVersionRow; } });
43
53
  Object.defineProperty(exports, "stableLearningJson", { enumerable: true, get: function () { return learning_candidates_1.stableLearningJson; } });
44
- var semantic_resolution_1 = require("./semantic-resolution");
45
- Object.defineProperty(exports, "assertSemanticResolutionRecord", { enumerable: true, get: function () { return semantic_resolution_1.assertSemanticResolutionRecord; } });
46
- Object.defineProperty(exports, "mapSemanticResolutionRow", { enumerable: true, get: function () { return semantic_resolution_1.mapSemanticResolutionRow; } });
47
- Object.defineProperty(exports, "stableSemanticResolutionJson", { enumerable: true, get: function () { return semantic_resolution_1.stableSemanticResolutionJson; } });
@@ -1,4 +1,4 @@
1
- export type RetrievalLedgerStage = 'eligible' | 'candidate' | 'selected' | 'exposed' | 'adopted' | 'consumed' | 'verified' | 'positive_outcome' | 'negative_outcome' | 'unknown' | 'unknown_outcome' | 'rejected';
1
+ export type RetrievalLedgerStage = 'eligible' | 'candidate' | 'selected' | 'consumed' | 'verified' | 'positive_outcome' | 'negative_outcome' | 'unknown_outcome' | 'rejected';
2
2
  export type RetrievalLedgerSourceType = 'code' | 'memory' | 'knowledge' | 'action';
3
3
  export interface RetrievalLedgerEventRecord {
4
4
  schemaVersion?: 'retrieval-ledger-event.v1';
@@ -29,3 +29,18 @@ export interface RetrievalLedgerEventRecord {
29
29
  payload: Record<string, unknown>;
30
30
  createdAt: number;
31
31
  }
32
+ export interface VerifyReceiptBoundRetrievalInput {
33
+ projectRoot: string;
34
+ sessionId: string;
35
+ executionId: string;
36
+ contextReceipt: string;
37
+ toolUseId: string;
38
+ verificationReceipt: string;
39
+ verifiedAt: number;
40
+ }
41
+ export interface VerifyReceiptBoundRetrievalResult {
42
+ selected: number;
43
+ consumed: number;
44
+ verified: number;
45
+ }
46
+ export declare function retrievalLedgerTransitionId(sourceEventId: string, stage: RetrievalLedgerStage, provenance: string): string;
@@ -1,2 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.retrievalLedgerTransitionId = retrievalLedgerTransitionId;
4
+ const node_crypto_1 = require("node:crypto");
5
+ function retrievalLedgerTransitionId(sourceEventId, stage, provenance) {
6
+ return `retrieval:${(0, node_crypto_1.createHash)('sha256')
7
+ .update(`${sourceEventId}\0${stage}\0${provenance}`).digest('hex')}`;
8
+ }
@@ -0,0 +1,39 @@
1
+ import type { CanonicalTaskIdentity, RetrievalCycleReceiptV1, RetrievalSufficiencyStatus } from '@devflow-tools/sdk';
2
+ export interface RetrievalSessionV2Record {
3
+ id: string;
4
+ identity: CanonicalTaskIdentity;
5
+ taskRevision: number;
6
+ factsHash: string;
7
+ planHash: string;
8
+ activationSnapshotHash: string;
9
+ coordinatorVersion: string;
10
+ state: 'open' | RetrievalSufficiencyStatus;
11
+ cycle: number;
12
+ noGainCount: number;
13
+ maxCycles: 3;
14
+ initialTokenBudget: number;
15
+ remainingTokenBudget: number;
16
+ finalReceiptHash?: string;
17
+ createdAt: number;
18
+ updatedAt: number;
19
+ expiresAt: number;
20
+ }
21
+ export interface CreateRetrievalSessionV2Input {
22
+ id: string;
23
+ identity: CanonicalTaskIdentity;
24
+ taskRevision: number;
25
+ factsHash: string;
26
+ planHash: string;
27
+ activationSnapshotHash: string;
28
+ coordinatorVersion: string;
29
+ tokenBudget: number;
30
+ expiresAt: number;
31
+ createdAt?: number;
32
+ }
33
+ export interface AppendRetrievalCycleV2Input {
34
+ sessionId: string;
35
+ projectRoot: string;
36
+ taskSessionId: string;
37
+ receipt: RetrievalCycleReceiptV1;
38
+ remainingTokenBudget: number;
39
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,49 @@
1
+ import type { CanonicalTaskIdentity, TaskAggregateEventV1, TaskDefinitionV1, TaskRuntimeSnapshotV2 } from '@devflow-tools/sdk';
2
+ export interface TaskAggregateRecord {
3
+ identity: CanonicalTaskIdentity;
4
+ revision: number;
5
+ definitionHash: string;
6
+ activationSnapshotHash: string;
7
+ lastEventSequence: number;
8
+ snapshot: TaskRuntimeSnapshotV2;
9
+ updatedAt: number;
10
+ }
11
+ export interface TaskOutboxRecord {
12
+ operationId: string;
13
+ eventId: string;
14
+ projectRoot: string;
15
+ sessionId: string;
16
+ turnId: string;
17
+ revision: number;
18
+ kind: string;
19
+ payload: Record<string, unknown>;
20
+ state: 'pending' | 'leased' | 'completed' | 'dead_letter';
21
+ leaseOwner?: string;
22
+ leaseExpiresAt?: number;
23
+ fencingToken: number;
24
+ attempts: number;
25
+ createdAt: number;
26
+ updatedAt: number;
27
+ }
28
+ export interface AppendTaskAggregateInput {
29
+ definition?: TaskDefinitionV1;
30
+ event: TaskAggregateEventV1;
31
+ snapshot: TaskRuntimeSnapshotV2;
32
+ outbox?: {
33
+ operationId: string;
34
+ kind: string;
35
+ payload: Record<string, unknown>;
36
+ };
37
+ }
38
+ export interface AppendTaskAggregateResult {
39
+ event: TaskAggregateEventV1;
40
+ snapshot: TaskRuntimeSnapshotV2;
41
+ replayed: boolean;
42
+ }
43
+ export interface LeaseTaskOutboxInput {
44
+ projectRoot: string;
45
+ owner: string;
46
+ limit: number;
47
+ leaseMs: number;
48
+ now?: number;
49
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -5,7 +5,7 @@ export interface TaskIdentityRecord {
5
5
  sessionId: string;
6
6
  turnId: string;
7
7
  requestId: string;
8
- executionId?: string;
8
+ executionId: string;
9
9
  }
10
10
  export interface TaskIntentArtifactRecord extends TaskIdentityRecord {
11
11
  version: number;
@@ -36,6 +36,12 @@ export interface ChannelQueryPlanRecord extends TaskIdentityRecord {
36
36
  degradation?: Record<string, unknown>;
37
37
  createdAt: number;
38
38
  }
39
+ export interface CanonicalSemanticTaskWrite {
40
+ revision: number;
41
+ activation: RuntimeActivationSnapshotV1;
42
+ context: SemanticExecutionContext;
43
+ definition: TaskDefinitionV1;
44
+ }
39
45
  export type ToolNameResolutionStatus = 'canonical' | 'alias' | 'unsupported';
40
46
  export interface ToolNameResolutionRecord extends TaskIdentityRecord {
41
47
  id: string;
@@ -77,3 +83,4 @@ export declare function mapToolNameResolutionRow(row: Record<string, unknown>):
77
83
  export declare function mapTerminalTransitionRow(row: Record<string, unknown>): TerminalTransitionRecord;
78
84
  export declare function mapTranscriptCheckpointRow(row: Record<string, unknown>): TranscriptCheckpointRecord;
79
85
  export declare function assertTaskIdentity(record: TaskIdentityRecord): void;
86
+ import type { RuntimeActivationSnapshotV1, SemanticExecutionContext, TaskDefinitionV1 } from '@devflow-tools/sdk';
@@ -102,14 +102,12 @@ function assertTaskIdentity(record) {
102
102
  sessionId: record.sessionId,
103
103
  turnId: record.turnId,
104
104
  requestId: record.requestId,
105
+ executionId: record.executionId,
105
106
  })) {
106
107
  if (typeof value !== 'string' || value.trim().length === 0) {
107
108
  throw new Error(`TASK_IDENTITY_INVALID:${field}`);
108
109
  }
109
110
  }
110
- if (record.executionId !== undefined && record.executionId.trim().length === 0) {
111
- throw new Error('TASK_IDENTITY_INVALID:executionId');
112
- }
113
111
  }
114
112
  function mapTaskIdentityRow(row) {
115
113
  return {
@@ -119,7 +117,7 @@ function mapTaskIdentityRow(row) {
119
117
  sessionId: requiredString(row.session_id, 'session_id'),
120
118
  turnId: requiredString(row.turn_id, 'turn_id'),
121
119
  requestId: requiredString(row.request_id, 'request_id'),
122
- executionId: optionalString(row.execution_id),
120
+ executionId: requiredString(row.execution_id, 'execution_id'),
123
121
  };
124
122
  }
125
123
  function canonicalize(value) {
package/package.json CHANGED
@@ -1,17 +1,29 @@
1
1
  {
2
2
  "name": "@devflow-tools/database",
3
- "version": "0.17.8",
4
- "description": "DevFlow SQLite database package",
3
+ "version": "0.18.1",
4
+ "description": "SQLite persistence primitives shared by DevFlow runtime packages.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
7
10
  "scripts": {
8
11
  "build": "tsc",
9
12
  "test": "vitest run"
10
13
  },
14
+ "dependencies": {
15
+ "@devflow-tools/sdk": "0.18.1"
16
+ },
11
17
  "devDependencies": {
12
18
  "@types/node": "^22.15.0",
13
19
  "typescript": "^5.5.0",
14
20
  "vitest": "^2.0.0"
15
21
  },
16
- "gitHead": "940c6c004c0ebb59abad3da9bc67137fa2d2a666"
22
+ "gitHead": "940c6c004c0ebb59abad3da9bc67137fa2d2a666",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/shilongfeicool/dev-flow.git"
27
+ },
28
+ "homepage": "https://github.com/shilongfeicool/dev-flow#readme"
17
29
  }